From d66ccda16a25f391eeb7b0fb9bceeeab7481797c Mon Sep 17 00:00:00 2001 From: Anders Broman Date: Wed, 5 Apr 2006 16:05:29 +0000 Subject: [PATCH] Add some IE:s svn path=/trunk/; revision=17817 --- epan/dissectors/packet-gtp.c | 1427 +++++++++++++++++++++++++++------- 1 file changed, 1166 insertions(+), 261 deletions(-) diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c index 62ab76cee6..4de19a7132 100644 --- a/epan/dissectors/packet-gtp.c +++ b/epan/dissectors/packet-gtp.c @@ -67,56 +67,56 @@ void proto_reg_handoff_gtp(void); static int proto_gtp = -1; -static int hf_gtp_apn = -1; -static int hf_gtp_cause = -1; -static int hf_gtp_chrg_char = -1; +static int hf_gtp_apn = -1; +static int hf_gtp_cause = -1; +static int hf_gtp_chrg_char = -1; static int hf_gtp_chrg_char_s = -1; static int hf_gtp_chrg_char_n = -1; static int hf_gtp_chrg_char_p = -1; static int hf_gtp_chrg_char_f = -1; static int hf_gtp_chrg_char_h = -1; static int hf_gtp_chrg_char_r = -1; -static int hf_gtp_chrg_id = -1; -static int hf_gtp_chrg_ipv4 = -1; -static int hf_gtp_chrg_ipv6 = -1; +static int hf_gtp_chrg_id = -1; +static int hf_gtp_chrg_ipv4 = -1; +static int hf_gtp_chrg_ipv6 = -1; static int hf_gtp_ext_flow_label = -1; -static int hf_gtp_ext_id = -1; -static int hf_gtp_ext_val = -1; -static int hf_gtp_flags = -1; -static int hf_gtp_flags_ver = -1; -static int hf_gtp_flags_pt = -1; +static int hf_gtp_ext_id = -1; +static int hf_gtp_ext_val = -1; +static int hf_gtp_flags = -1; +static int hf_gtp_flags_ver = -1; +static int hf_gtp_flags_pt = -1; static int hf_gtp_flags_spare1 = -1; -static int hf_gtp_flags_snn = -1; +static int hf_gtp_flags_snn = -1; static int hf_gtp_flags_spare2 = -1; -static int hf_gtp_flags_e = -1; -static int hf_gtp_flags_s = -1; -static int hf_gtp_flags_pn = -1; -static int hf_gtp_flow_ii = -1; +static int hf_gtp_flags_e = -1; +static int hf_gtp_flags_s = -1; +static int hf_gtp_flags_pn = -1; +static int hf_gtp_flow_ii = -1; static int hf_gtp_flow_label = -1; -static int hf_gtp_flow_sig = -1; +static int hf_gtp_flow_sig = -1; static int hf_gtp_gsn_addr_len = -1; static int hf_gtp_gsn_addr_type = -1; -static int hf_gtp_gsn_ipv4 = -1; -static int hf_gtp_gsn_ipv6 = -1; -static int hf_gtp_imsi = -1; -static int hf_gtp_length = -1; -static int hf_gtp_map_cause = -1; +static int hf_gtp_gsn_ipv4 = -1; +static int hf_gtp_gsn_ipv6 = -1; +static int hf_gtp_imsi = -1; +static int hf_gtp_length = -1; +static int hf_gtp_map_cause = -1; static int hf_gtp_message_type = -1; -static int hf_gtp_ms_reason = -1; -static int hf_gtp_ms_valid = -1; -static int hf_gtp_msisdn = -1; -static int hf_gtp_next = -1; +static int hf_gtp_ms_reason = -1; +static int hf_gtp_ms_valid = -1; +static int hf_gtp_msisdn = -1; +static int hf_gtp_next = -1; static int hf_gtp_npdu_number = -1; -static int hf_gtp_node_ipv4 = -1; -static int hf_gtp_node_ipv6 = -1; -static int hf_gtp_nsapi = -1; -static int hf_gtp_ptmsi = -1; -static int hf_gtp_ptmsi_sig = -1; +static int hf_gtp_node_ipv4 = -1; +static int hf_gtp_node_ipv6 = -1; +static int hf_gtp_nsapi = -1; +static int hf_gtp_ptmsi = -1; +static int hf_gtp_ptmsi_sig = -1; static int hf_gtp_qos_version = -1; static int hf_gtp_qos_spare1 = -1; -static int hf_gtp_qos_delay = -1; -static int hf_gtp_qos_mean = -1; -static int hf_gtp_qos_peak = -1; +static int hf_gtp_qos_delay = -1; +static int hf_gtp_qos_mean = -1; +static int hf_gtp_qos_peak = -1; static int hf_gtp_qos_spare2 = -1; static int hf_gtp_qos_precedence = -1; static int hf_gtp_qos_spare3 = -1; @@ -139,75 +139,75 @@ static int hf_gtp_rab_gtpu_dn = -1; static int hf_gtp_rab_gtpu_up = -1; static int hf_gtp_rab_pdu_dn = -1; static int hf_gtp_rab_pdu_up = -1; -static int hf_gtp_rai_mcc = -1; -static int hf_gtp_rai_mnc = -1; -static int hf_gtp_rai_rac = -1; -static int hf_gtp_rai_lac = -1; +static int hf_gtp_rai_mcc = -1; +static int hf_gtp_rai_mnc = -1; +static int hf_gtp_rai_rac = -1; +static int hf_gtp_rai_lac = -1; static int hf_gtp_ranap_cause = -1; -static int hf_gtp_recovery = -1; -static int hf_gtp_reorder = -1; -static int hf_gtp_rnc_ipv4 = -1; -static int hf_gtp_rnc_ipv6 = -1; -static int hf_gtp_rp = -1; -static int hf_gtp_rp_nsapi = -1; -static int hf_gtp_rp_sms = -1; -static int hf_gtp_rp_spare = -1; -static int hf_gtp_sel_mode = -1; +static int hf_gtp_recovery = -1; +static int hf_gtp_reorder = -1; +static int hf_gtp_rnc_ipv4 = -1; +static int hf_gtp_rnc_ipv6 = -1; +static int hf_gtp_rp = -1; +static int hf_gtp_rp_nsapi = -1; +static int hf_gtp_rp_sms = -1; +static int hf_gtp_rp_spare = -1; +static int hf_gtp_sel_mode = -1; static int hf_gtp_seq_number = -1; static int hf_gtp_sndcp_number = -1; -static int hf_gtp_tear_ind = -1; -static int hf_gtp_teid = -1; -static int hf_gtp_teid_cp = -1; -static int hf_gtp_teid_data = -1; -static int hf_gtp_teid_ii = -1; -static int hf_gtp_tft_code = -1; -static int hf_gtp_tft_spare = -1; +static int hf_gtp_tear_ind = -1; +static int hf_gtp_teid = -1; +static int hf_gtp_teid_cp = -1; +static int hf_gtp_teid_data = -1; +static int hf_gtp_teid_ii = -1; +static int hf_gtp_tft_code = -1; +static int hf_gtp_tft_spare = -1; static int hf_gtp_tft_number = -1; -static int hf_gtp_tft_eval = -1; -static int hf_gtp_tid = -1; -static int hf_gtp_tlli = -1; -static int hf_gtp_tr_comm = -1; -static int hf_gtp_trace_ref = -1; +static int hf_gtp_tft_eval = -1; +static int hf_gtp_tid = -1; +static int hf_gtp_tlli = -1; +static int hf_gtp_tr_comm = -1; +static int hf_gtp_trace_ref = -1; static int hf_gtp_trace_type = -1; -static int hf_gtp_unknown = -1; +static int hf_gtp_unknown = -1; static int hf_gtp_user_addr_pdp_org = -1; static int hf_gtp_user_addr_pdp_type = -1; -static int hf_gtp_user_ipv4 = -1; -static int hf_gtp_user_ipv6 = -1; -static int hf_gtp_security_mode = -1; -static int hf_gtp_no_of_vectors = -1; -static int hf_gtp_cipher_algorithm = -1; -static int hf_gtp_cksn_ksi = -1; -static int hf_gtp_cksn = -1; -static int hf_gtp_ksi = -1; -static int hf_gtp_ext_length = -1; -static int hf_gtp_ext_apn_res = -1; -static int hf_gtp_ext_rat_type = -1; -static int hf_gtp_ext_imeisv = -1; +static int hf_gtp_user_ipv4 = -1; +static int hf_gtp_user_ipv6 = -1; +static int hf_gtp_security_mode = -1; +static int hf_gtp_no_of_vectors = -1; +static int hf_gtp_cipher_algorithm = -1; +static int hf_gtp_cksn_ksi = -1; +static int hf_gtp_cksn = -1; +static int hf_gtp_ksi = -1; +static int hf_gtp_ext_length = -1; +static int hf_gtp_ext_apn_res = -1; +static int hf_gtp_ext_rat_type = -1; +static int hf_gtp_ext_imeisv = -1; /* Initialize the subtree pointers */ -static gint ett_gtp = -1; -static gint ett_gtp_flags = -1; -static gint ett_gtp_ext = -1; -static gint ett_gtp_rai = -1; -static gint ett_gtp_qos = -1; +static gint ett_gtp = -1; +static gint ett_gtp_flags = -1; +static gint ett_gtp_ext = -1; +static gint ett_gtp_rai = -1; +static gint ett_gtp_qos = -1; static gint ett_gtp_auth_tri = -1; -static gint ett_gtp_flow_ii = -1; +static gint ett_gtp_flow_ii = -1; static gint ett_gtp_rab_cntxt = -1; -static gint ett_gtp_rp = -1; +static gint ett_gtp_rp = -1; static gint ett_gtp_pkt_flow_id = -1; static gint ett_gtp_chrg_char = -1; -static gint ett_gtp_user = -1; -static gint ett_gtp_mm = -1; -static gint ett_gtp_trip = -1; -static gint ett_gtp_quint = -1; -static gint ett_gtp_pdp = -1; -static gint ett_gtp_apn = -1; -static gint ett_gtp_proto = -1; +static gint ett_gtp_user = -1; +static gint ett_gtp_mm = -1; +static gint ett_gtp_trip = -1; +static gint ett_gtp_quint = -1; +static gint ett_gtp_pdp = -1; +static gint ett_gtp_apn = -1; +static gint ett_gtp_proto = -1; static gint ett_gtp_gsn_addr = -1; -static gint ett_gtp_tft = -1; -static gint ett_gtp_tft_pf = -1; +static gint ett_gtp_tft = -1; +static gint ett_gtp_tft_pf = -1; static gint ett_gtp_tft_flags = -1; static gint ett_gtp_rab_setup = -1; static gint ett_gtp_hdr_list = -1; @@ -218,11 +218,41 @@ static gint ett_gtp_can_pack = -1; static gint ett_gtp_data_resp = -1; static gint ett_gtp_priv_ext = -1; static gint ett_gtp_net_cap = -1; -static gint ett_gtp_ext_tree_apn_res = -1; -static gint ett_gtp_ext_rat_type = -1; -static gint ett_gtp_ext_imeisv = -1; - -static gboolean gtp_tpdu = TRUE; +static gint ett_gtp_ext_tree_apn_res = -1; +static gint ett_gtp_ext_rat_type = -1; +static gint ett_gtp_ext_imeisv = -1; +static gint ett_gtp_ext_ran_tr_cont = -1; +static gint ett_gtp_ext_pdp_cont_prio = -1; +static gint ett_gtp_ext_ssgn_no = -1; +static gint ett_gtp_ext_rab_setup_inf = -1; +static gint ett_gtp_ext_common_flgs = -1; +static gint ett_gtp_ext_usr_loc_inf = -1; +static gint ett_gtp_ext_ms_time_zone = -1; +static gint ett_gtp_ext_camel_chg_inf_con = -1; +static gint ett_GTP_EXT_MBMS_UE_CTX = -1; +static gint ett_gtp_ext_tmgi = -1; +static gint ett_gtp_ext_rim_ra = -1; +static gint ett_gtp_ext_mbms_prot_conf_opt = -1; +static gint ett_gtp_ext_mbms_sa = -1; +static gint ett_gtp_ext_bms_ses_dur = -1; +static gint ett_gtp_ext_src_rnc_pdp_ctx_inf = -1; +static gint ett_gtp_ext_add_trs_inf = -1; +static gint ett_gtp_ext_hop_count = -1; +static gint ett_gtp_ext_sel_plmn_id = -1; +static gint ett_gtp_ext_mbms_ses_id = -1; +static gint ett_gtp_ext_mbms_2g_3g_ind = -1; +static gint ett_gtp_ext_enh_nsapi = -1; +static gint ett_gtp_ext_ad_mbms_trs_inf = -1; +static gint ett_gtp_ext_mbms_ses_id_rep_no = -1; +static gint ett_gtp_ext_mbms_time_to_data_tr = -1; +static gint ett_gtp_ext_ps_ho_req_ctx = -1; +static gint ett_gtp_ext_bss_cont = -1; +static gint ett_gtp_ext_cell_id = -1; +static gint ett_gtp_ext_pdu_no = -1; +static gint ett_gtp_ext_bssgp_cause = -1; +static gint ett_gtp_ext_ra_prio_lcs = -1; + +static gboolean gtp_tpdu = TRUE; static gboolean gtp_over_tcp = TRUE; static gboolean gtp_etsi_order = FALSE; static guint gtpv0_port = 0; @@ -275,36 +305,36 @@ static const value_string pt_types[] = { #define GTP_EXT_GSN_ADDR_LEN_MASK 0x3F /* Definition of QoS masks */ -#define GTP_EXT_QOS_SPARE1_MASK 0xC0 -#define GTP_EXT_QOS_DELAY_MASK 0x38 -#define GTP_EXT_QOS_RELIABILITY_MASK 0x07 -#define GTP_EXT_QOS_PEAK_MASK 0xF0 -#define GTP_EXT_QOS_SPARE2_MASK 0x08 -#define GTP_EXT_QOS_PRECEDENCE_MASK 0x07 -#define GTP_EXT_QOS_SPARE3_MASK 0xE0 -#define GTP_EXT_QOS_MEAN_MASK 0x1F -#define GTP_EXT_QOS_TRAF_CLASS_MASK 0xE0 -#define GTP_EXT_QOS_DEL_ORDER_MASK 0x18 -#define GTP_EXT_QOS_DEL_ERR_SDU_MASK 0x07 -#define GTP_EXT_QOS_RES_BER_MASK 0xF0 -#define GTP_EXT_QOS_SDU_ERR_RATIO_MASK 0x0F -#define GTP_EXT_QOS_TRANS_DELAY_MASK 0xFC +#define GTP_EXT_QOS_SPARE1_MASK 0xC0 +#define GTP_EXT_QOS_DELAY_MASK 0x38 +#define GTP_EXT_QOS_RELIABILITY_MASK 0x07 +#define GTP_EXT_QOS_PEAK_MASK 0xF0 +#define GTP_EXT_QOS_SPARE2_MASK 0x08 +#define GTP_EXT_QOS_PRECEDENCE_MASK 0x07 +#define GTP_EXT_QOS_SPARE3_MASK 0xE0 +#define GTP_EXT_QOS_MEAN_MASK 0x1F +#define GTP_EXT_QOS_TRAF_CLASS_MASK 0xE0 +#define GTP_EXT_QOS_DEL_ORDER_MASK 0x18 +#define GTP_EXT_QOS_DEL_ERR_SDU_MASK 0x07 +#define GTP_EXT_QOS_RES_BER_MASK 0xF0 +#define GTP_EXT_QOS_SDU_ERR_RATIO_MASK 0x0F +#define GTP_EXT_QOS_TRANS_DELAY_MASK 0xFC #define GTP_EXT_QOS_TRAF_HANDL_PRIORITY_MASK 0x03 /* Definition of Radio Priority's masks */ #define GTPv1_EXT_RP_NSAPI_MASK 0xF0 #define GTPv1_EXT_RP_SPARE_MASK 0x08 -#define GTPv1_EXT_RP_MASK 0x07 +#define GTPv1_EXT_RP_MASK 0x07 /* definitions of GTP messages */ -#define GTP_MSG_UNKNOWN 0x00 -#define GTP_MSG_ECHO_REQ 0x01 -#define GTP_MSG_ECHO_RESP 0x02 +#define GTP_MSG_UNKNOWN 0x00 +#define GTP_MSG_ECHO_REQ 0x01 +#define GTP_MSG_ECHO_RESP 0x02 #define GTP_MSG_VER_NOT_SUPP 0x03 #define GTP_MSG_NODE_ALIVE_REQ 0x04 #define GTP_MSG_NODE_ALIVE_RESP 0x05 -#define GTP_MSG_REDIR_REQ 0x06 -#define GTP_MSG_REDIR_RESP 0x07 +#define GTP_MSG_REDIR_REQ 0x06 +#define GTP_MSG_REDIR_RESP 0x07 #define GTP_MSG_CREATE_PDP_REQ 0x10 #define GTP_MSG_CREATE_PDP_RESP 0x11 #define GTP_MSG_UPDATE_PDP_REQ 0x12 @@ -315,7 +345,7 @@ static const value_string pt_types[] = { #define GTP_MSG_CREATE_AA_PDP_RESP 0x17 /* 2G */ #define GTP_MSG_DELETE_AA_PDP_REQ 0x18 /* 2G */ #define GTP_MSG_DELETE_AA_PDP_RESP 0x19 /* 2G */ -#define GTP_MSG_ERR_IND 0x1A +#define GTP_MSG_ERR_IND 0x1A #define GTP_MSG_PDU_NOTIFY_REQ 0x1B #define GTP_MSG_PDU_NOTIFY_RESP 0x1C #define GTP_MSG_PDU_NOTIFY_REJ_REQ 0x1D @@ -327,8 +357,8 @@ static const value_string pt_types[] = { #define GTP_MSG_FAIL_REP_RESP 0x23 #define GTP_MSG_MS_PRESENT_REQ 0x24 #define GTP_MSG_MS_PRESENT_RESP 0x25 -#define GTP_MSG_IDENT_REQ 0x30 -#define GTP_MSG_IDENT_RESP 0x31 +#define GTP_MSG_IDENT_REQ 0x30 +#define GTP_MSG_IDENT_RESP 0x31 #define GTP_MSG_SGSN_CNTXT_REQ 0x32 #define GTP_MSG_SGSN_CNTXT_RESP 0x33 #define GTP_MSG_SGSN_CNTXT_ACK 0x34 @@ -342,55 +372,55 @@ static const value_string pt_types[] = { #define GTP_MSG_FORW_SRNS_CNTXT_ACK 0x3C #define GTP_MSG_DATA_TRANSF_REQ 0xF0 #define GTP_MSG_DATA_TRANSF_RESP 0xF1 -#define GTP_MSG_TPDU 0xFF +#define GTP_MSG_TPDU 0xFF static const value_string message_type[] = { - { GTP_MSG_UNKNOWN, "For future use" }, - { GTP_MSG_ECHO_REQ, "Echo request" }, - { GTP_MSG_ECHO_RESP, "Echo response" }, - { GTP_MSG_VER_NOT_SUPP, "Version not supported" }, - { GTP_MSG_NODE_ALIVE_REQ, "Node alive request" }, - { GTP_MSG_NODE_ALIVE_RESP, "Node alive response" }, - { GTP_MSG_REDIR_REQ, "Redirection request" }, - { GTP_MSG_REDIR_RESP, "Redirection response" }, - { GTP_MSG_CREATE_PDP_REQ, "Create PDP context request" }, - { GTP_MSG_CREATE_PDP_RESP, "Create PDP context response" }, - { GTP_MSG_UPDATE_PDP_REQ, "Update PDP context request" }, - { GTP_MSG_UPDATE_PDP_RESP, "Update PDP context response" }, - { GTP_MSG_DELETE_PDP_REQ, "Delete PDP context request" }, - { GTP_MSG_DELETE_PDP_RESP, "Delete PDP context response" }, + { GTP_MSG_UNKNOWN, "For future use" }, + { GTP_MSG_ECHO_REQ, "Echo request" }, + { GTP_MSG_ECHO_RESP, "Echo response" }, + { GTP_MSG_VER_NOT_SUPP, "Version not supported" }, + { GTP_MSG_NODE_ALIVE_REQ, "Node alive request" }, + { GTP_MSG_NODE_ALIVE_RESP, "Node alive response" }, + { GTP_MSG_REDIR_REQ, "Redirection request" }, + { GTP_MSG_REDIR_RESP, "Redirection response" }, + { GTP_MSG_CREATE_PDP_REQ, "Create PDP context request" }, + { GTP_MSG_CREATE_PDP_RESP, "Create PDP context response" }, + { GTP_MSG_UPDATE_PDP_REQ, "Update PDP context request" }, + { GTP_MSG_UPDATE_PDP_RESP, "Update PDP context response" }, + { GTP_MSG_DELETE_PDP_REQ, "Delete PDP context request" }, + { GTP_MSG_DELETE_PDP_RESP, "Delete PDP context response" }, { GTP_MSG_CREATE_AA_PDP_REQ, "Create AA PDP Context Request" }, { GTP_MSG_CREATE_AA_PDP_RESP, "Create AA PDP Context Response" }, { GTP_MSG_DELETE_AA_PDP_REQ, "Delete AA PDP Context Request" }, { GTP_MSG_DELETE_AA_PDP_RESP, "Delete AA PDP Context Response" }, - { GTP_MSG_ERR_IND, "Error indication" }, - { GTP_MSG_PDU_NOTIFY_REQ, "PDU notification request" }, - { GTP_MSG_PDU_NOTIFY_RESP, "PDU notification response" }, + { GTP_MSG_ERR_IND, "Error indication" }, + { GTP_MSG_PDU_NOTIFY_REQ, "PDU notification request" }, + { GTP_MSG_PDU_NOTIFY_RESP, "PDU notification response" }, { GTP_MSG_PDU_NOTIFY_REJ_REQ, "PDU notification reject request" }, { GTP_MSG_PDU_NOTIFY_REJ_RESP, "PDU notification reject response" }, - { GTP_MSG_SUPP_EXT_HDR, "Supported extension header notification" }, + { GTP_MSG_SUPP_EXT_HDR, "Supported extension header notification" }, { GTP_MSG_SEND_ROUT_INFO_REQ, "Send routing information for GPRS request" }, { GTP_MSG_SEND_ROUT_INFO_RESP, "Send routing information for GPRS response" }, - { GTP_MSG_FAIL_REP_REQ, "Failure report request" }, - { GTP_MSG_FAIL_REP_RESP, "Failure report response" }, - { GTP_MSG_MS_PRESENT_REQ, "Note MS GPRS present request" }, - { GTP_MSG_MS_PRESENT_RESP, "Note MS GPRS present response" }, - { GTP_MSG_IDENT_REQ, "Identification request" }, - { GTP_MSG_IDENT_RESP, "Identification response" }, - { GTP_MSG_SGSN_CNTXT_REQ, "SGSN context request" }, - { GTP_MSG_SGSN_CNTXT_RESP, "SGSN context response" }, - { GTP_MSG_SGSN_CNTXT_ACK, "SGSN context acknowledgement" }, - { GTP_MSG_FORW_RELOC_REQ, "Forward relocation request" }, - { GTP_MSG_FORW_RELOC_RESP, "Forward relocation response" }, - { GTP_MSG_FORW_RELOC_COMP, "Forward relocation complete" }, - { GTP_MSG_RELOC_CANCEL_REQ, "Relocation cancel request" }, + { GTP_MSG_FAIL_REP_REQ, "Failure report request" }, + { GTP_MSG_FAIL_REP_RESP, "Failure report response" }, + { GTP_MSG_MS_PRESENT_REQ, "Note MS GPRS present request" }, + { GTP_MSG_MS_PRESENT_RESP, "Note MS GPRS present response" }, + { GTP_MSG_IDENT_REQ, "Identification request" }, + { GTP_MSG_IDENT_RESP, "Identification response" }, + { GTP_MSG_SGSN_CNTXT_REQ, "SGSN context request" }, + { GTP_MSG_SGSN_CNTXT_RESP, "SGSN context response" }, + { GTP_MSG_SGSN_CNTXT_ACK, "SGSN context acknowledgement" }, + { GTP_MSG_FORW_RELOC_REQ, "Forward relocation request" }, + { GTP_MSG_FORW_RELOC_RESP, "Forward relocation response" }, + { GTP_MSG_FORW_RELOC_COMP, "Forward relocation complete" }, + { GTP_MSG_RELOC_CANCEL_REQ, "Relocation cancel request" }, { GTP_MSG_RELOC_CANCEL_RESP, "Relocation cancel response" }, - { GTP_MSG_FORW_SRNS_CNTXT, "Forward SRNS context" }, - { GTP_MSG_FORW_RELOC_ACK, "Forward relocation complete acknowledge" }, + { GTP_MSG_FORW_SRNS_CNTXT, "Forward SRNS context" }, + { GTP_MSG_FORW_RELOC_ACK, "Forward relocation complete acknowledge" }, { GTP_MSG_FORW_SRNS_CNTXT_ACK, "Forward SRNS context acknowledge" }, - { GTP_MSG_DATA_TRANSF_REQ, "Data record transfer request" }, - { GTP_MSG_DATA_TRANSF_RESP, "Data record transfer response" }, - { GTP_MSG_TPDU, "T-PDU" }, + { GTP_MSG_DATA_TRANSF_REQ, "Data record transfer request" }, + { GTP_MSG_DATA_TRANSF_RESP, "Data record transfer response" }, + { GTP_MSG_TPDU, "T-PDU" }, { 0, NULL } }; @@ -451,11 +481,43 @@ static const value_string message_type[] = { #define GTP_EXT_UTRAN_CONT 0x8B /* 3G */ #define GTP_EXT_RAB_SETUP 0x8C /* 3G */ #define GTP_EXT_HDR_LIST 0x8D /* 3G */ -#define GTP_EXT_TRIGGER_ID 0x8E /* 3G */ -#define GTP_EXT_OMC_ID 0x8F /* 3G */ -#define GTP_EXT_APN_RES 0x95 /* 3G */ -#define GTP_EXT_RAT_TYPE 0x97 /* 3G */ -#define GTP_EXT_IMEISV 0x9A /* 3G */ +#define GTP_EXT_TRIGGER_ID 0x8E /* 3G 142 7.7.41 */ +#define GTP_EXT_OMC_ID 0x8F /* 3G 143 TLV OMC Identity 7.7.42 */ +#define GTP_EXT_RAN_TR_CONT 0x90 /* 3G 144 TLV RAN Transparent Container 7.7.43 */ +#define GTP_EXT_PDP_CONT_PRIO 0x91 /* 3G 145 TLV PDP Context Prioritization 7.7.45 */ +#define GTP_EXT_ADD_RAB_SETUP_INF 0x92 /* 3G 146 TLV Additional RAB Setup Information 7.7.45A */ +#define GTP_EXT_SSGN_NO 0x93 /* 3G 147 TLV SGSN Number 7.7.47 */ +#define GTP_EXT_COMMON_FLGS 0x94 /* 3G 148 TLV Common Flags 7.7.48 */ +#define GTP_EXT_APN_RES 0x95 /* 3G 149 */ +#define GTP_EXT_RA_PRIO_LCS 0x96 /* 3G 150 TLV Radio Priority LCS 7.7.25B */ +#define GTP_EXT_RAT_TYPE 0x97 /* 3G 151 TLV RAT Type 7.7.50 */ +#define GTP_EXT_USR_LOC_INF 0x98 /* 3G 152 TLV User Location Information 7.7.51 */ +#define GTP_EXT_MS_TIME_ZONE 0x99 /* 3G 153 TLV MS Time Zone 7.7.52 */ + +#define GTP_EXT_IMEISV 0x9A /* 3G */ +#define GTP_EXT_CAMEL_CHG_INF_CON 0x9B /* 3G 155 TLV CAMEL Charging Information Container 7.7.54 */ +#define GTP_EXT_MBMS_UE_CTX 0x9C /* 3G 156 TLV MBMS UE Context 7.7.55 */ +#define GTP_EXT_TMGI 0x9D /* 3G 157 TLV Temporary Mobile Group Identity (TMGI) 7.7.56 */ +#define GTP_EXT_RIM_RA 0x9E /* 3G 158 TLV RIM Routing Address 7.7.57 */ +#define GTP_EXT_MBMS_PROT_CONF_OPT 0x9F /* 3G 159 TLV MBMS Protocol Configuration Options 7.7.58 */ +#define GTP_EXT_MBMS_SA 0xA0 /* 3G 160 TLV MBMS Service Area 7.7.60 */ +#define GTP_EXT_SRC_RNC_PDP_CTX_INF 0xA1 /* 3G 161 TLV Source RNC PDCP context info 7.7.61 */ +#define GTP_EXT_ADD_TRS_INF 0xA2 /* 3G 162 TLV Additional Trace Info 7.7.62 */ +#define GTP_EXT_HOP_COUNT 0xA3 /* 3G 163 TLV Hop Counter 7.7.63 */ +#define GTP_EXT_SEL_PLMN_ID 0xA4 /* 3G 164 TLV Selected PLMN ID 7.7.64 */ +#define GTP_EXT_MBMS_SES_ID 0xA5 /* 3G 165 TLV MBMS Session Identifier 7.7.65 */ +#define GTP_EXT_MBMS_2G_3G_IND 0xA6 /* 3G 166 TLV MBMS 2G/3G Indicator 7.7.66 */ +#define GTP_EXT_ENH_NSAPI 0xA7 /* 3G 167 TLV Enhanced NSAPI 7.7.67 */ +#define GTP_EXT_MBMS_SES_DUR 0xA8 /* 3G 168 TLV MBMS Session Duration 7.7.59 */ +#define GTP_EXT_ADD_MBMS_TRS_INF 0xA9 /* 3G 169 TLV Additional MBMS Trace Info 7.7.68 */ +#define GTP_EXT_MBMS_SES_ID_REP_NO 0xAA /* 3G 170 TLV MBMS Session Identity Repetition Number 7.7.69 */ +#define GTP_EXT_MBMS_TIME_TO_DATA_TR 0xAB /* 3G 171 TLV MBMS Time To Data Transfer 7.7.70 */ +#define GTP_EXT_PS_HO_REQ_CTX 0xAC /* 3G 172 TLV PS Handover Request Context 7.7.71 */ +#define GTP_EXT_BSS_CONT 0xAD /* 3G 173 TLV BSS Container 7.7.72 */ +#define GTP_EXT_CELL_ID 0xAE /* 3G 174 TLV Cell Identification 7.7.73 */ +#define GTP_EXT_PDU_NO 0xAF /* 3G 175 TLV PDU Numbers 7.7.74 */ +#define GTP_EXT_BSSGP_CAUSE 0xA0 /* 3G 176 TLV BSSGP Cause 7.7.75 */ + #define GTP_EXT_C1 0xC1 #define GTP_EXT_C2 0xC2 #define GTP_EXT_REL_PACK 0xF9 /* charging */ @@ -467,74 +529,106 @@ static const value_string message_type[] = { #define GTP_EXT_PRIV_EXT 0xFF static const value_string gtp_val[] = { - { GTP_EXT_CAUSE, "Cause of operation" }, - { GTP_EXT_IMSI, "IMSI" }, - { GTP_EXT_RAI, "Routing Area Identity" }, - { GTP_EXT_TLLI, "Temporary Logical Link Identity" }, - { GTP_EXT_PTMSI, "Packet TMSI" }, - { GTP_EXT_QOS_GPRS, "Quality of Service" }, - { GTP_EXT_REORDER, "Reorder required" }, - { GTP_EXT_AUTH_TRI, "Authentication triplets" }, + { GTP_EXT_CAUSE, "Cause of operation" }, + { GTP_EXT_IMSI, "IMSI" }, + { GTP_EXT_RAI, "Routing Area Identity" }, + { GTP_EXT_TLLI, "Temporary Logical Link Identity" }, + { GTP_EXT_PTMSI, "Packet TMSI" }, + { GTP_EXT_QOS_GPRS, "Quality of Service" }, + { GTP_EXT_REORDER, "Reorder required" }, + { GTP_EXT_AUTH_TRI, "Authentication triplets" }, { GTP_EXT_MAP_CAUSE, "MAP cause" }, { GTP_EXT_PTMSI_SIG, "P-TMSI signature" }, - { GTP_EXT_MS_VALID, "MS validated" }, - { GTP_EXT_RECOVER, "Recovery" }, - { GTP_EXT_SEL_MODE, "Selection mode" }, + { GTP_EXT_MS_VALID, "MS validated" }, + { GTP_EXT_RECOVER, "Recovery" }, + { GTP_EXT_SEL_MODE, "Selection mode" }, - { GTP_EXT_16, "Flow label data I" }, + { GTP_EXT_16, "Flow label data I" }, { GTP_EXT_FLOW_LABEL, "Flow label data I" }, - { GTP_EXT_TEID, "Tunnel Endpoint Identifier Data I" }, /* 3G */ + { GTP_EXT_TEID, "Tunnel Endpoint Identifier Data I" }, /* 3G */ - { GTP_EXT_17, "Flow label signalling" }, - { GTP_EXT_FLOW_SIG, "Flow label signalling" }, - { GTP_EXT_TEID_CP, "Tunnel Endpoint Identifier Data Control Plane" }, /* 3G */ + { GTP_EXT_17, "Flow label signalling" }, + { GTP_EXT_FLOW_SIG, "Flow label signalling" }, + { GTP_EXT_TEID_CP, "Tunnel Endpoint Identifier Data Control Plane" }, /* 3G */ - { GTP_EXT_18, "Flow label data II" }, - { GTP_EXT_FLOW_II, "Flow label data II" }, - { GTP_EXT_TEID_II, "Tunnel Endpoint Identifier Data II" }, /* 3G */ + { GTP_EXT_18, "Flow label data II" }, + { GTP_EXT_FLOW_II, "Flow label data II" }, + { GTP_EXT_TEID_II, "Tunnel Endpoint Identifier Data II" }, /* 3G */ - { GTP_EXT_19, "MS not reachable reason" }, + { GTP_EXT_19, "MS not reachable reason" }, { GTP_EXT_MS_REASON, "MS not reachable reason" }, - { GTP_EXT_TEAR_IND, "Teardown ID" }, /* 3G */ - - { GTP_EXT_NSAPI, "NSAPI" }, /* 3G */ - { GTP_EXT_RANAP_CAUSE, "RANAP cause" }, /* 3G */ - { GTP_EXT_RAB_CNTXT, "RAB context" }, /* 3G */ - { GTP_EXT_RP_SMS, "Radio Priority for MO SMS" }, /* 3G */ - { GTP_EXT_RP, "Radio Priority" }, /* 3G */ - { GTP_EXT_PKT_FLOW_ID, "Packet Flow ID" }, /* 3G */ - { GTP_EXT_CHRG_CHAR, "Charging characteristics" }, /* 3G */ - { GTP_EXT_TRACE_REF, "Trace references" }, /* 3G */ - { GTP_EXT_TRACE_TYPE, "Trace type" }, /* 3G */ - { GTPv1_EXT_MS_REASON, "MS not reachable reason" }, /* 3G */ - { GTP_EXT_TR_COMM, "Packet transfer command" }, /* charging */ - { GTP_EXT_CHRG_ID, "Charging ID" }, + { GTP_EXT_TEAR_IND, "Teardown ID" }, /* 3G */ + + { GTP_EXT_NSAPI, "NSAPI" }, /* 3G */ + { GTP_EXT_RANAP_CAUSE, "RANAP cause" }, /* 3G */ + { GTP_EXT_RAB_CNTXT, "RAB context" }, /* 3G */ + { GTP_EXT_RP_SMS, "Radio Priority for MO SMS" }, /* 3G */ + { GTP_EXT_RP, "Radio Priority" }, /* 3G */ + { GTP_EXT_PKT_FLOW_ID, "Packet Flow ID" }, /* 3G */ + { GTP_EXT_CHRG_CHAR, "Charging characteristics" }, /* 3G */ + { GTP_EXT_TRACE_REF, "Trace references" }, /* 3G */ + { GTP_EXT_TRACE_TYPE, "Trace type" }, /* 3G */ + { GTPv1_EXT_MS_REASON, "MS not reachable reason" }, /* 3G */ + { GTP_EXT_TR_COMM, "Packet transfer command" }, /* charging */ + { GTP_EXT_CHRG_ID, "Charging ID" }, { GTP_EXT_USER_ADDR, "End user address" }, - { GTP_EXT_MM_CNTXT, "MM context" }, + { GTP_EXT_MM_CNTXT, "MM context" }, { GTP_EXT_PDP_CNTXT, "PDP context" }, { GTP_EXT_APN, "Access Point Name" }, { GTP_EXT_PROTO_CONF, "Protocol configuration options" }, { GTP_EXT_GSN_ADDR, "GSN address" }, { GTP_EXT_MSISDN, "MS international PSTN/ISDN number" }, - { GTP_EXT_QOS_UMTS, "Quality of service (UMTS)" }, /* 3G */ - { GTP_EXT_AUTH_QUI, "Authentication quintuplets" }, /* 3G */ - { GTP_EXT_TFT, "Traffic Flow Template (TFT)" }, /* 3G */ - { GTP_EXT_TARGET_ID, "Target (RNC) identification" }, /* 3G */ - { GTP_EXT_UTRAN_CONT, "UTRAN transparent field" }, /* 3G */ - { GTP_EXT_RAB_SETUP, "RAB setup information" }, /* 3G */ - { GTP_EXT_HDR_LIST, "Extension Header Types List" }, /* 3G */ - { GTP_EXT_TRIGGER_ID, "Trigger Id" }, /* 3G */ - { GTP_EXT_OMC_ID, "OMC Identity" }, /* 3G */ - { GTP_EXT_APN_RES, "APN Restriction" }, /* 3G */ - { GTP_EXT_RAT_TYPE, "RAT Type" }, /* 3G */ - { GTP_EXT_IMEISV, "IMEI(SV)" }, /* 3G */ - { GTP_EXT_REL_PACK, "Sequence numbers of released packets IE" }, /* charging */ - { GTP_EXT_CAN_PACK, "Sequence numbers of canceled packets IE" }, /* charging */ - { GTP_EXT_CHRG_ADDR, "Charging Gateway address" }, - { GTP_EXT_DATA_REQ, "Data record packet" }, /* charging */ - { GTP_EXT_DATA_RESP, "Requests responded" }, /* charging */ - { GTP_EXT_NODE_ADDR, "Address of recommended node" }, /* charging */ - { GTP_EXT_PRIV_EXT, "Private Extension" }, + { GTP_EXT_QOS_UMTS, "Quality of service (UMTS)" }, /* 3G */ + { GTP_EXT_AUTH_QUI, "Authentication quintuplets" }, /* 3G */ + { GTP_EXT_TFT, "Traffic Flow Template (TFT)" }, /* 3G */ + { GTP_EXT_TARGET_ID, "Target (RNC) identification" }, /* 3G */ + { GTP_EXT_UTRAN_CONT, "UTRAN transparent field" }, /* 3G */ + { GTP_EXT_RAB_SETUP, "RAB setup information" }, /* 3G */ + { GTP_EXT_HDR_LIST, "Extension Header Types List" }, /* 3G */ + { GTP_EXT_TRIGGER_ID, "Trigger Id" }, /* 3G */ + { GTP_EXT_OMC_ID, "OMC Identity" }, /* 3G */ + + { GTP_EXT_RAN_TR_CONT, "RAN Transparent Container" }, /* 7.7.43 */ + { GTP_EXT_PDP_CONT_PRIO, "PDP Context Prioritization" }, /* 7.7.45 */ + { GTP_EXT_ADD_RAB_SETUP_INF, "Additional RAB Setup Information" }, /* 7.7.45A */ + { GTP_EXT_SSGN_NO, "SGSN Number" }, /* 7.7.47 */ + { GTP_EXT_COMMON_FLGS, "Common Flags" }, /* 7.7.48 */ + { GTP_EXT_APN_RES, "APN Restriction" }, /* 3G */ + { GTP_EXT_RA_PRIO_LCS, "Radio Priority LCS" }, /* 7.7.25B */ + { GTP_EXT_RAT_TYPE, "RAT Type" }, /* 3G */ + { GTP_EXT_USR_LOC_INF, "User Location Information" }, /* 7.7.51 */ + { GTP_EXT_MS_TIME_ZONE, "MS Time Zone" }, /* 7.7.52 */ + + { GTP_EXT_IMEISV, "IMEI(SV)" }, /* 3G */ + { GTP_EXT_CAMEL_CHG_INF_CON, "CAMEL Charging Information Container" }, /* 7.7.54 */ + { GTP_EXT_MBMS_UE_CTX, "MBMS UE Context" }, /* 7.7.55 */ + { GTP_EXT_TMGI, "Temporary Mobile Group Identity (TMGI)" }, /* 7.7.56 */ + { GTP_EXT_RIM_RA, "RIM Routing Address" }, /* 7.7.57 */ + { GTP_EXT_MBMS_PROT_CONF_OPT, "MBMS Protocol Configuration Options" }, /* 7.7.58 */ + { GTP_EXT_MBMS_SA, "MBMS Service Area" }, /* 7.7.60 */ + { GTP_EXT_SRC_RNC_PDP_CTX_INF, "Source RNC PDCP context info" }, /* 7.7.61 */ + { GTP_EXT_ADD_TRS_INF, "Additional Trace Info" }, /* 7.7.62 */ + { GTP_EXT_HOP_COUNT, "Hop Counter" }, /* 7.7.63 */ + { GTP_EXT_SEL_PLMN_ID, "Selected PLMN ID" }, /* 7.7.64 */ + { GTP_EXT_MBMS_SES_ID, "MBMS Session Identifier" }, /* 7.7.65 */ + { GTP_EXT_MBMS_2G_3G_IND, "MBMS 2G/3G Indicator" }, /* 7.7.66 */ + { GTP_EXT_ENH_NSAPI, "Enhanced NSAPI" }, /* 7.7.67 */ + { GTP_EXT_MBMS_SES_DUR, "MBMS Session Duration" }, /* 7.7.59 */ + { GTP_EXT_ADD_MBMS_TRS_INF, "Additional MBMS Trace Info" }, /* 7.7.68 */ + { GTP_EXT_MBMS_SES_ID_REP_NO, "MBMS Session Identity Repetition Number" }, /* 7.7.69 */ + { GTP_EXT_MBMS_TIME_TO_DATA_TR, "MBMS Time To Data Transfer" }, /* 7.7.70 */ + { GTP_EXT_PS_HO_REQ_CTX, "PS Handover Request Context" }, /* 7.7.71 */ + { GTP_EXT_BSS_CONT, "BSS Container" }, /* 7.7.72 */ + { GTP_EXT_CELL_ID, "Cell Identification" }, /* 7.7.73 */ + { GTP_EXT_PDU_NO, "PDU Numbers" }, /* 7.7.74 */ + { GTP_EXT_BSSGP_CAUSE, "BSSGP Cause" }, /* 7.7.75 */ + { GTP_EXT_REL_PACK, "Sequence numbers of released packets IE" }, /* charging */ + { GTP_EXT_CAN_PACK, "Sequence numbers of canceled packets IE" }, /* charging */ + { GTP_EXT_CHRG_ADDR, "Charging Gateway address" }, + { GTP_EXT_DATA_REQ, "Data record packet" }, /* charging */ + { GTP_EXT_DATA_RESP, "Requests responded" }, /* charging */ + { GTP_EXT_NODE_ADDR, "Address of recommended node" }, /* charging */ + { GTP_EXT_PRIV_EXT, "Private Extension" }, { 0, NULL } }; @@ -583,6 +677,10 @@ static const value_string cause_type[] = { { 218, "Syntactic errors in packet filter(s)" }, { 219, "Missing or unknown APN" }, { 220, "Unknown PDP address or PDP type" }, + { 221, "PDP context without TFT already activated" }, + { 222, "APN access denied - no subscription" }, + { 223, "APN Restriction type incompatibility with currently active PDP Contexts" }, + { 224, "MS MBMS Capabilities Insufficient" }, { 252, "Request related to possibly duplicated packets already fulfilled" }, /* charging */ { 253, "Request already fulfilled" }, /* charging */ { 254, "Sequence numbers of released/cancelled packets IE incorrect" }, /* charging */ @@ -1113,9 +1211,37 @@ static int decode_gtp_hdr_list (tvbuff_t *tvb, int offset, packet_info *pinfo, static int decode_gtp_trigger_id (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_omc_id (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_ran_tr_cont (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_pdp_cont_prio (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_add_rab_setup_inf (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_ssgn_no (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_common_flgs (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_apn_res (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_ra_prio_lcs (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_rat_type (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_imeisv (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_camel_chg_inf_con (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_ue_ctx (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_tmgi (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_rim_ra (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_prot_conf_opt (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_sa (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_src_rnc_pdp_ctx_inf (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_add_trs_inf (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_hop_count (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_sel_plmn_id (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_ses_id (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_2g_3g_ind(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_enh_nsapi (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_ses_dur (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_add_mbms_trs_inf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_ses_id_rep_no(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_mbms_time_to_data_tr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_ps_ho_req_ctx(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_bss_cont (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_cell_id (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_pdu_no (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); +static int decode_gtp_bssgp_cause (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_chrg_addr (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); static int decode_gtp_rel_pack (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); @@ -1132,55 +1258,83 @@ typedef struct _gtp_opt { } gtp_opt_t; static const gtp_opt_t gtpopt[] = { - { GTP_EXT_CAUSE, decode_gtp_cause }, - { GTP_EXT_IMSI, decode_gtp_imsi }, - { GTP_EXT_RAI, decode_gtp_rai }, - { GTP_EXT_TLLI, decode_gtp_tlli }, - { GTP_EXT_PTMSI, decode_gtp_ptmsi }, - { GTP_EXT_QOS_GPRS, decode_gtp_qos_gprs }, - { GTP_EXT_REORDER, decode_gtp_reorder }, - { GTP_EXT_AUTH_TRI, decode_gtp_auth_tri }, - { GTP_EXT_MAP_CAUSE, decode_gtp_map_cause }, - { GTP_EXT_PTMSI_SIG, decode_gtp_ptmsi_sig }, - { GTP_EXT_MS_VALID, decode_gtp_ms_valid }, - { GTP_EXT_RECOVER, decode_gtp_recovery }, - { GTP_EXT_SEL_MODE, decode_gtp_sel_mode }, - { GTP_EXT_16, decode_gtp_16 }, - { GTP_EXT_17, decode_gtp_17 }, - { GTP_EXT_18, decode_gtp_18 }, - { GTP_EXT_19, decode_gtp_19 }, - { GTP_EXT_NSAPI, decode_gtp_nsapi }, - { GTP_EXT_RANAP_CAUSE, decode_gtp_ranap_cause }, - { GTP_EXT_RAB_CNTXT, decode_gtp_rab_cntxt }, - { GTP_EXT_RP_SMS, decode_gtp_rp_sms }, - { GTP_EXT_RP, decode_gtp_rp }, - { GTP_EXT_PKT_FLOW_ID, decode_gtp_pkt_flow_id }, - { GTP_EXT_CHRG_CHAR, decode_gtp_chrg_char }, - { GTP_EXT_TRACE_REF, decode_gtp_trace_ref }, - { GTP_EXT_TRACE_TYPE, decode_gtp_trace_type }, - { GTPv1_EXT_MS_REASON, decode_gtp_ms_reason }, - { GTP_EXT_TR_COMM, decode_gtp_tr_comm }, - { GTP_EXT_CHRG_ID, decode_gtp_chrg_id }, - { GTP_EXT_USER_ADDR, decode_gtp_user_addr }, - { GTP_EXT_MM_CNTXT, decode_gtp_mm_cntxt }, - { GTP_EXT_PDP_CNTXT, decode_gtp_pdp_cntxt }, - { GTP_EXT_APN, decode_gtp_apn }, - { GTP_EXT_PROTO_CONF, decode_gtp_proto_conf }, - { GTP_EXT_GSN_ADDR, decode_gtp_gsn_addr }, - { GTP_EXT_MSISDN, decode_gtp_msisdn }, - { GTP_EXT_QOS_UMTS, decode_gtp_qos_umts }, /* 3G */ - { GTP_EXT_AUTH_QUI, decode_gtp_auth_qui }, /* 3G */ - { GTP_EXT_TFT, decode_gtp_tft }, /* 3G */ - { GTP_EXT_TARGET_ID, decode_gtp_target_id }, /* 3G */ - { GTP_EXT_UTRAN_CONT, decode_gtp_utran_cont }, /* 3G */ - { GTP_EXT_RAB_SETUP, decode_gtp_rab_setup }, /* 3G */ - { GTP_EXT_HDR_LIST, decode_gtp_hdr_list }, /* 3G */ - { GTP_EXT_TRIGGER_ID, decode_gtp_trigger_id }, /* 3G */ - { GTP_EXT_OMC_ID, decode_gtp_omc_id }, /* 3G */ + { GTP_EXT_CAUSE, decode_gtp_cause }, + { GTP_EXT_IMSI, decode_gtp_imsi }, + { GTP_EXT_RAI, decode_gtp_rai }, + { GTP_EXT_TLLI, decode_gtp_tlli }, + { GTP_EXT_PTMSI, decode_gtp_ptmsi }, + { GTP_EXT_QOS_GPRS, decode_gtp_qos_gprs }, + { GTP_EXT_REORDER, decode_gtp_reorder }, + { GTP_EXT_AUTH_TRI, decode_gtp_auth_tri }, + { GTP_EXT_MAP_CAUSE, decode_gtp_map_cause }, + { GTP_EXT_PTMSI_SIG, decode_gtp_ptmsi_sig }, + { GTP_EXT_MS_VALID, decode_gtp_ms_valid }, + { GTP_EXT_RECOVER, decode_gtp_recovery }, + { GTP_EXT_SEL_MODE, decode_gtp_sel_mode }, + { GTP_EXT_16, decode_gtp_16 }, + { GTP_EXT_17, decode_gtp_17 }, + { GTP_EXT_18, decode_gtp_18 }, + { GTP_EXT_19, decode_gtp_19 }, + { GTP_EXT_NSAPI, decode_gtp_nsapi }, + { GTP_EXT_RANAP_CAUSE, decode_gtp_ranap_cause }, + { GTP_EXT_RAB_CNTXT, decode_gtp_rab_cntxt }, + { GTP_EXT_RP_SMS, decode_gtp_rp_sms }, + { GTP_EXT_RP, decode_gtp_rp }, + { GTP_EXT_PKT_FLOW_ID, decode_gtp_pkt_flow_id }, + { GTP_EXT_CHRG_CHAR, decode_gtp_chrg_char }, + { GTP_EXT_TRACE_REF, decode_gtp_trace_ref }, + { GTP_EXT_TRACE_TYPE, decode_gtp_trace_type }, + { GTPv1_EXT_MS_REASON, decode_gtp_ms_reason }, + { GTP_EXT_TR_COMM, decode_gtp_tr_comm }, + { GTP_EXT_CHRG_ID, decode_gtp_chrg_id }, + { GTP_EXT_USER_ADDR, decode_gtp_user_addr }, + { GTP_EXT_MM_CNTXT, decode_gtp_mm_cntxt }, + { GTP_EXT_PDP_CNTXT, decode_gtp_pdp_cntxt }, + { GTP_EXT_APN, decode_gtp_apn }, + { GTP_EXT_PROTO_CONF, decode_gtp_proto_conf }, + { GTP_EXT_GSN_ADDR, decode_gtp_gsn_addr }, + { GTP_EXT_MSISDN, decode_gtp_msisdn }, + { GTP_EXT_QOS_UMTS, decode_gtp_qos_umts }, /* 3G */ + { GTP_EXT_AUTH_QUI, decode_gtp_auth_qui }, /* 3G */ + { GTP_EXT_TFT, decode_gtp_tft }, /* 3G */ + { GTP_EXT_TARGET_ID, decode_gtp_target_id }, /* 3G */ + { GTP_EXT_UTRAN_CONT, decode_gtp_utran_cont }, /* 3G */ + { GTP_EXT_RAB_SETUP, decode_gtp_rab_setup }, /* 3G */ + { GTP_EXT_HDR_LIST, decode_gtp_hdr_list }, /* 3G */ + { GTP_EXT_TRIGGER_ID, decode_gtp_trigger_id }, /* 3G */ + { GTP_EXT_OMC_ID, decode_gtp_omc_id }, /* 3G */ /* TS 29 060 V6.11.0 */ - { GTP_EXT_APN_RES, decode_gtp_apn_res }, /* 3G */ - { GTP_EXT_RAT_TYPE, decode_gtp_rat_type, }, /* 3G */ - { GTP_EXT_IMEISV, decode_gtp_imeisv, }, /* 3G */ + { GTP_EXT_RAN_TR_CONT, decode_gtp_ran_tr_cont }, /* 7.7.43 */ + { GTP_EXT_PDP_CONT_PRIO, decode_gtp_pdp_cont_prio }, /* 7.7.45 */ + { GTP_EXT_ADD_RAB_SETUP_INF, decode_gtp_add_rab_setup_inf }, /* 7.7.45A */ + { GTP_EXT_SSGN_NO, decode_gtp_ssgn_no }, /* 7.7.47 */ + { GTP_EXT_COMMON_FLGS, decode_gtp_common_flgs }, /* 7.7.48 */ + { GTP_EXT_APN_RES, decode_gtp_apn_res }, /* 3G */ + { GTP_EXT_RA_PRIO_LCS, decode_gtp_ra_prio_lcs }, /* 7.7.25B */ + { GTP_EXT_RAT_TYPE, decode_gtp_rat_type }, /* 3G */ + { GTP_EXT_IMEISV, decode_gtp_imeisv }, /* 3G */ + { GTP_EXT_CAMEL_CHG_INF_CON, decode_gtp_camel_chg_inf_con }, /* 7.7.54 */ + { GTP_EXT_MBMS_UE_CTX, decode_gtp_mbms_ue_ctx }, /* 7.7.55 */ + { GTP_EXT_TMGI, decode_gtp_tmgi }, /* 7.7.56 */ + { GTP_EXT_RIM_RA, decode_gtp_rim_ra }, /* 7.7.57 */ + { GTP_EXT_MBMS_PROT_CONF_OPT, decode_gtp_mbms_prot_conf_opt }, /* 7.7.58 */ + { GTP_EXT_MBMS_SA, decode_gtp_mbms_sa }, /* 7.7.60 */ + { GTP_EXT_SRC_RNC_PDP_CTX_INF, decode_gtp_src_rnc_pdp_ctx_inf }, /* 7.7.61 */ + { GTP_EXT_ADD_TRS_INF, decode_gtp_add_trs_inf }, /* 7.7.62 */ + { GTP_EXT_HOP_COUNT, decode_gtp_hop_count }, /* 7.7.63 */ + { GTP_EXT_SEL_PLMN_ID, decode_gtp_sel_plmn_id }, /* 7.7.64 */ + { GTP_EXT_MBMS_SES_ID, decode_gtp_mbms_ses_id }, /* 7.7.65 */ + { GTP_EXT_MBMS_2G_3G_IND, decode_gtp_mbms_2g_3g_ind }, /* 7.7.66 */ + { GTP_EXT_ENH_NSAPI, decode_gtp_enh_nsapi }, /* 7.7.67 */ + { GTP_EXT_MBMS_SES_DUR, decode_gtp_mbms_ses_dur }, /* 7.7.59 */ + { GTP_EXT_ADD_MBMS_TRS_INF, decode_gtp_add_mbms_trs_inf }, /* 7.7.68 */ + { GTP_EXT_MBMS_SES_ID_REP_NO, decode_gtp_mbms_ses_id_rep_no }, /* 7.7.69 */ + { GTP_EXT_MBMS_TIME_TO_DATA_TR, decode_gtp_mbms_time_to_data_tr }, /* 7.7.70 */ + { GTP_EXT_PS_HO_REQ_CTX, decode_gtp_ps_ho_req_ctx }, /* 7.7.71 */ + { GTP_EXT_BSS_CONT, decode_gtp_bss_cont }, /* 7.7.72 */ + { GTP_EXT_CELL_ID, decode_gtp_cell_id }, /* 7.7.73 */ + { GTP_EXT_PDU_NO, decode_gtp_pdu_no }, /* 7.7.74 */ + { GTP_EXT_BSSGP_CAUSE, decode_gtp_bssgp_cause }, /* 7.7.75 */ { GTP_EXT_REL_PACK, decode_gtp_rel_pack }, /* charging */ { GTP_EXT_CAN_PACK, decode_gtp_can_pack }, /* charging */ @@ -2643,6 +2797,30 @@ decode_gtp_ms_reason(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr return 2; } +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.25B + * Radio Priority LCS + */ + static int +decode_gtp_ra_prio_lcs(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_RA_PRIO_LCS, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ra_prio_lcs); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } /* GPRS: 12.15 v7.6.0, chapter 7.3.3, page 45 * UMTS: 33.015 @@ -3902,6 +4080,125 @@ decode_gtp_chrg_addr(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr return 3 + length; } +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.44 RAN Transparent Container + */ + static int + decode_gtp_ran_tr_cont(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_RAN_TR_CONT, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ran_tr_cont); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.45 PDP Context Prioritization + */ + static int + decode_gtp_pdp_cont_prio(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_PDP_CONT_PRIO, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_pdp_cont_prio); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.45A Additional RAB Setup Information + */ +static int +decode_gtp_add_rab_setup_inf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_ADD_RAB_SETUP_INF, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_rab_setup_inf); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.47 SGSN Number + */ + static int + decode_gtp_ssgn_no(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_SSGN_NO, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ssgn_no); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.48 Common Flags + */ + static int + decode_gtp_common_flgs(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_COMMON_FLGS, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_common_flgs); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + /* GPRS: ? * UMTS: 29.060 v6.11.0, chapter 7.7.49 */ @@ -3955,12 +4252,52 @@ decode_gtp_rat_type(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tre * User Location Information * Type = 152 (Decimal) */ +static int +decode_gtp_usr_loc_inf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_USR_LOC_INF, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_usr_loc_inf); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } /* GPRS: ? * UMTS: 29.060 v6.11.0, chapter 7.7.52 * MS Time Zone * Type = 153 (Decimal) */ +static int +decode_gtp_ms_time_zone(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MS_TIME_ZONE, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ms_time_zone); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } /* GPRS: ? * UMTS: 29.060 v6.11.0, chapter 7.7.53 * International Mobile Equipment Identity (and Software Version) (IMEI(SV)) @@ -3991,11 +4328,549 @@ decode_gtp_imeisv(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree * CAMEL Charging Information Container * Type = 155 (Decimal) */ +static int +decode_gtp_camel_chg_inf_con(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_CAMEL_CHG_INF_CON, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_camel_chg_inf_con); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.55 + * MBMS UE Context + */ +static int +decode_gtp_mbms_ue_ctx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_UE_CTX, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_GTP_EXT_MBMS_UE_CTX); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.56 + * Temporary Mobile Group Identity (TMGI) + */ +static int +decode_gtp_tmgi(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_TMGI, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_tmgi); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.57 + * RIM Routing Address + */ +static int +decode_gtp_rim_ra(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_RIM_RA, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_rim_ra); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.58 + * MBMS Protocol Configuration Options + */ +static int +decode_gtp_mbms_prot_conf_opt(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_PROT_CONF_OPT, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_prot_conf_opt); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.59 + * MBMS Session Duration + */ +static int +decode_gtp_mbms_ses_dur(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_SES_DUR, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_bms_ses_dur); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.60 + * MBMS Service Area + */ +static int +decode_gtp_mbms_sa(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_SA, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_sa); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.61 + * Source RNC PDCP context info + */ +static int +decode_gtp_src_rnc_pdp_ctx_inf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_SRC_RNC_PDP_CTX_INF, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_src_rnc_pdp_ctx_inf); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + /* GPRS: ? * UMTS: 29.060 v6.11.0, chapter 7.7.62 * Additional Trace Info - * Type =162 (Decimal) */ +static int +decode_gtp_add_trs_inf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_ADD_TRS_INF, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_add_trs_inf); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.63 + * Hop Counter + */ +static int +decode_gtp_hop_count(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_HOP_COUNT, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_hop_count); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.64 + * Selected PLMN ID + */ +static int +decode_gtp_sel_plmn_id(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_SEL_PLMN_ID, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_sel_plmn_id); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.65 + * MBMS Session Identifier + */ +static int +decode_gtp_mbms_ses_id(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_SES_ID, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_ses_id); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.66 + * MBMS 2G/3G Indicator + */ +static int +decode_gtp_mbms_2g_3g_ind(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_2G_3G_IND, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_2g_3g_ind); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.67 + * Enhanced NSAPI + */ +static int +decode_gtp_enh_nsapi(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_ENH_NSAPI, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_enh_nsapi); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.68 + * Additional MBMS Trace Info + */ +static int +decode_gtp_add_mbms_trs_inf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_ADD_MBMS_TRS_INF, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ad_mbms_trs_inf); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.69 + * MBMS Session Identity Repetition Number + */ +static int +decode_gtp_mbms_ses_id_rep_no(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_SES_ID_REP_NO, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_ses_id_rep_no); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.70 + * MBMS Time To Data Transfer + */ +static int +decode_gtp_mbms_time_to_data_tr(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_MBMS_TIME_TO_DATA_TR, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_mbms_time_to_data_tr); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.71 + * PS Handover Request Context + */ +static int +decode_gtp_ps_ho_req_ctx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_PS_HO_REQ_CTX, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_ps_ho_req_ctx); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.72 + * BSS Container + */ +static int +decode_gtp_bss_cont(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_BSS_CONT, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_bss_cont); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.73 + * Cell Identification + */ +static int +decode_gtp_cell_id(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_CELL_ID, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_cell_id); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.74 + * PDU Numbers + */ +static int +decode_gtp_pdu_no(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_PDU_NO, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_pdu_no); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } + +/* GPRS: ? + * UMTS: 29.060 v6.11.0, chapter 7.7.75 + * BSSGP Cause + */ +static int +decode_gtp_bssgp_cause(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { + + guint16 length; + proto_tree *ext_tree; + proto_item *te; + + length = tvb_get_ntohs(tvb, offset+1); + te = proto_tree_add_text(tree, tvb, offset, 3+length, "%s : ", val_to_str(GTP_EXT_BSSGP_CAUSE, gtp_val, "Unknown")); + ext_tree = proto_item_add_subtree(te, ett_gtp_ext_bssgp_cause); + + offset++; + proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, FALSE); + offset = offset +2; + /* TODO add decoding of data */ + proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet"); + + return 3 + length; + + } /* GPRS: 12.15 * UMTS: 33.015 @@ -4616,6 +5491,36 @@ proto_register_gtp(void) &ett_gtp_ext_tree_apn_res, &ett_gtp_ext_rat_type, &ett_gtp_ext_imeisv, + &ett_gtp_ext_ran_tr_cont, + &ett_gtp_ext_pdp_cont_prio, + &ett_gtp_ext_ssgn_no, + &ett_gtp_ext_rab_setup_inf, + &ett_gtp_ext_common_flgs, + &ett_gtp_ext_usr_loc_inf, + &ett_gtp_ext_ms_time_zone, + &ett_gtp_ext_camel_chg_inf_con, + &ett_GTP_EXT_MBMS_UE_CTX, + &ett_gtp_ext_tmgi, + &ett_gtp_ext_rim_ra, + &ett_gtp_ext_mbms_prot_conf_opt, + &ett_gtp_ext_mbms_sa, + &ett_gtp_ext_bms_ses_dur, + &ett_gtp_ext_src_rnc_pdp_ctx_inf, + &ett_gtp_ext_add_trs_inf, + &ett_gtp_ext_hop_count, + &ett_gtp_ext_sel_plmn_id, + &ett_gtp_ext_mbms_ses_id, + &ett_gtp_ext_mbms_2g_3g_ind, + &ett_gtp_ext_enh_nsapi, + &ett_gtp_ext_ad_mbms_trs_inf, + &ett_gtp_ext_mbms_ses_id_rep_no, + &ett_gtp_ext_mbms_time_to_data_tr, + &ett_gtp_ext_ps_ho_req_ctx, + &ett_gtp_ext_bss_cont, + &ett_gtp_ext_cell_id, + &ett_gtp_ext_pdu_no, + &ett_gtp_ext_bssgp_cause, + &ett_gtp_ext_ra_prio_lcs, }; module_t *gtp_module;