2009-02-10 21:57:56 +00:00
|
|
|
/* packet-gtpv2.c
|
|
|
|
*
|
|
|
|
* Routines for GTPv2 dissection
|
2013-01-23 15:56:29 +00:00
|
|
|
* Copyright 2009 - 2012, Anders Broman <anders.broman [at] ericcsson.com>
|
2009-02-10 21:57:56 +00:00
|
|
|
*
|
|
|
|
* Wireshark - Network traffic analyzer
|
|
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
|
|
* Copyright 1998 Gerald Combs
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2012-06-28 23:18:38 +00:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
2012-02-04 09:41:21 +00:00
|
|
|
* Ref: 3GPP TS 29.274 version 11.1.0 Release 11 ETSI TS 129 274 V8.1.1 (2009-04)
|
2009-02-10 21:57:56 +00:00
|
|
|
*/
|
|
|
|
|
2012-09-20 02:03:38 +00:00
|
|
|
#include "config.h"
|
2009-02-10 21:57:56 +00:00
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
|
|
|
|
#include <epan/packet.h>
|
2013-11-09 13:41:10 +00:00
|
|
|
#include <epan/to_str.h>
|
2009-02-11 19:48:21 +00:00
|
|
|
#include <epan/asn1.h>
|
2009-08-11 23:29:21 +00:00
|
|
|
#include <epan/expert.h>
|
2010-06-01 22:22:09 +00:00
|
|
|
#include <epan/sminmpec.h>
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
#include "packet-gsm_a_common.h"
|
2009-02-11 19:48:21 +00:00
|
|
|
#include "packet-gsm_map.h"
|
2010-04-05 07:37:04 +00:00
|
|
|
#include "packet-e164.h"
|
2009-02-13 06:10:57 +00:00
|
|
|
#include "packet-e212.h"
|
2010-06-28 15:31:41 +00:00
|
|
|
#include "packet-s1ap.h"
|
|
|
|
#include "packet-ranap.h"
|
2011-11-06 08:18:26 +00:00
|
|
|
#include "packet-bssgp.h"
|
2012-04-25 08:39:49 +00:00
|
|
|
#include "packet-ntp.h"
|
2013-12-17 06:10:41 +00:00
|
|
|
#include "packet-gtpv2.h"
|
2014-03-17 12:52:41 +00:00
|
|
|
#include "packet-diameter.h"
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2013-12-15 23:44:12 +00:00
|
|
|
void proto_register_gtpv2(void);
|
|
|
|
void proto_reg_handoff_gtpv2(void);
|
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
static dissector_handle_t nas_eps_handle;
|
2011-12-07 19:04:13 +00:00
|
|
|
static dissector_table_t gtpv2_priv_ext_dissector_table;
|
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
/*GTPv2 Message->GTP Header(SB)*/
|
2009-02-10 21:57:56 +00:00
|
|
|
static int proto_gtpv2 = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-01-07 15:21:23 +00:00
|
|
|
static int hf_gtpv2_reserved = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_spare_half_octet = -1;
|
|
|
|
static int hf_gtpv2_spare_bits = -1;
|
2009-02-10 21:57:56 +00:00
|
|
|
static int hf_gtpv2_flags = -1;
|
|
|
|
static int hf_gtpv2_version = -1;
|
2010-07-21 10:28:46 +00:00
|
|
|
static int hf_gtpv2_p = -1;
|
2009-02-10 21:57:56 +00:00
|
|
|
static int hf_gtpv2_t = -1;
|
|
|
|
static int hf_gtpv2_message_type = -1;
|
|
|
|
static int hf_gtpv2_msg_length = -1;
|
|
|
|
static int hf_gtpv2_teid = -1;
|
|
|
|
static int hf_gtpv2_seq = -1;
|
|
|
|
static int hf_gtpv2_spare = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
static int hf_gtpv2_ie = -1;
|
|
|
|
static int hf_gtpv2_ie_len = -1;
|
|
|
|
static int hf_gtpv2_cr = -1;
|
|
|
|
static int hf_gtpv2_instance = -1;
|
2009-02-11 19:48:21 +00:00
|
|
|
static int hf_gtpv2_cause = -1;
|
2010-12-30 14:09:09 +00:00
|
|
|
static int hf_gtpv2_cause_cs = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_cause_bce = -1;
|
|
|
|
static int hf_gtpv2_cause_pce = -1;
|
|
|
|
static int hf_gtpv2_cause_off_ie_t = -1;
|
2009-02-16 21:21:11 +00:00
|
|
|
static int hf_gtpv2_rec = -1;
|
2011-07-30 14:05:31 +00:00
|
|
|
/*Start SRVCC Messages*/
|
|
|
|
static int hf_gtpv2_stn_sr = -1;
|
|
|
|
static int hf_gtpv2_len_trans_con = -1;
|
|
|
|
static int hf_gtpv2_eksi = -1;
|
|
|
|
static int hf_gtpv2_ck = -1;
|
|
|
|
static int hf_gtpv2_ik = -1;
|
|
|
|
static int hf_gtpv2_len_ms_classmark2 = -1;
|
|
|
|
static int hf_gtpv2_len_ms_classmark3 = -1;
|
|
|
|
static int hf_gtpv2_len_supp_codec_list = -1;
|
|
|
|
static int hf_gtpv2_ksi = -1;
|
|
|
|
/*static int hf_gtpv2_kc = -1; */
|
|
|
|
static int hf_gtpv2_cksn = -1;
|
|
|
|
static int hf_gtpv2_srvcc_cause = -1;
|
2012-12-09 18:17:47 +00:00
|
|
|
static int hf_gtpv2_rac = -1;
|
2011-07-30 14:05:31 +00:00
|
|
|
static int hf_gtpv2_rnc_id = -1;
|
2012-12-09 18:17:47 +00:00
|
|
|
static int hf_gtpv2_ext_rnc_id = -1;
|
2011-07-30 14:05:31 +00:00
|
|
|
static int hf_gtpv2_lac = -1;
|
|
|
|
static int hf_gtpv2_sac = -1;
|
|
|
|
static int hf_gtpv2_tgt_g_cell_id = -1;
|
|
|
|
static int hf_gtpv2_teid_c = -1;
|
|
|
|
static int hf_gtpv2_sv_sti = -1;
|
|
|
|
static int hf_gtpv2_sv_ics = -1;
|
|
|
|
static int hf_gtpv2_sv_emind = -1;
|
|
|
|
/*End SRVCC Messages*/
|
2009-02-16 21:21:11 +00:00
|
|
|
static int hf_gtpv2_apn = -1;
|
|
|
|
static int hf_gtpv2_ebi = -1;
|
|
|
|
static int hf_gtpv2_daf = -1;
|
|
|
|
static int hf_gtpv2_dtf = -1;
|
|
|
|
static int hf_gtpv2_hi = -1;
|
|
|
|
static int hf_gtpv2_dfi = -1;
|
|
|
|
static int hf_gtpv2_oi = -1;
|
|
|
|
static int hf_gtpv2_isrsi = -1;
|
|
|
|
static int hf_gtpv2_israi = -1;
|
|
|
|
static int hf_gtpv2_sgwci = -1;
|
2011-02-11 21:21:45 +00:00
|
|
|
static int hf_gtpv2_sqci = -1;
|
|
|
|
static int hf_gtpv2_uimsi = -1;
|
|
|
|
static int hf_gtpv2_cfsi = -1;
|
|
|
|
static int hf_gtpv2_crsi = -1;
|
2009-02-16 21:21:11 +00:00
|
|
|
static int hf_gtpv2_pt = -1;
|
2011-02-11 21:21:45 +00:00
|
|
|
static int hf_gtpv2_ps = -1;
|
2009-02-16 21:21:11 +00:00
|
|
|
static int hf_gtpv2_si = -1;
|
|
|
|
static int hf_gtpv2_msv = -1;
|
2013-08-20 05:04:45 +00:00
|
|
|
static int hf_gtpv2_spare1 = -1;
|
|
|
|
static int hf_gtpv2_spare2 = -1;
|
|
|
|
static int hf_gtpv2_spare3 = -1;
|
|
|
|
static int hf_gtpv2_s6af = -1;
|
|
|
|
static int hf_gtpv2_s4af = -1;
|
|
|
|
static int hf_gtpv2_mbmdt = -1;
|
|
|
|
static int hf_gtpv2_israu = -1;
|
2011-02-11 21:21:45 +00:00
|
|
|
static int hf_gtpv2_ccrsi = -1;
|
2009-03-01 20:39:44 +00:00
|
|
|
static int hf_gtpv2_pdn_type = -1;
|
|
|
|
static int hf_gtpv2_pdn_ipv4 = -1;
|
|
|
|
static int hf_gtpv2_pdn_ipv6_len = -1;
|
|
|
|
static int hf_gtpv2_pdn_ipv6 = -1;
|
2011-01-07 15:21:23 +00:00
|
|
|
static int hf_gtpv2_pdn_numbers_nsapi = -1;
|
|
|
|
static int hf_gtpv2_p_tmsi = -1;
|
|
|
|
static int hf_gtpv2_p_tmsi_sig = -1;
|
2012-05-02 07:23:32 +00:00
|
|
|
static int hf_gtpv2_mmbr_ul = -1;
|
|
|
|
static int hf_gtpv2_mmbr_dl = -1;
|
2009-02-16 21:21:11 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
static int hf_gtpv2_rat_type = -1;
|
2009-03-01 20:39:44 +00:00
|
|
|
static int hf_gtpv2_uli_ecgi_flg = -1;
|
2011-01-12 16:43:59 +00:00
|
|
|
static int hf_gtpv2_uli_lai_flg = -1;
|
2009-03-01 20:39:44 +00:00
|
|
|
static int hf_gtpv2_uli_tai_flg = -1;
|
|
|
|
static int hf_gtpv2_uli_rai_flg = -1;
|
|
|
|
static int hf_gtpv2_uli_sai_flg = -1;
|
|
|
|
static int hf_gtpv2_uli_cgi_flg = -1;
|
2011-08-26 06:22:20 +00:00
|
|
|
static int hf_gtpv2_glt = -1;
|
2009-02-13 06:10:57 +00:00
|
|
|
static int hf_gtpv2_cng_rep_act = -1;
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2011-01-08 20:09:29 +00:00
|
|
|
static int hf_gtpv2_selec_mode = -1;
|
|
|
|
static int hf_gtpv2_source_type = -1;
|
2011-01-04 07:14:11 +00:00
|
|
|
static int hf_gtpv2_f_teid_v4 = -1;
|
|
|
|
static int hf_gtpv2_f_teid_v6 = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
static int hf_gtpv2_f_teid_interface_type= -1;
|
|
|
|
static int hf_gtpv2_f_teid_gre_key= -1;
|
|
|
|
static int hf_gtpv2_f_teid_ipv4= -1;
|
|
|
|
static int hf_gtpv2_f_teid_ipv6= -1;
|
2011-01-05 16:46:40 +00:00
|
|
|
static int hf_gtpv2_tmsi = -1;
|
2010-12-30 14:09:09 +00:00
|
|
|
static int hf_gtpv2_hsgw_addr_f_len = -1;
|
2011-01-07 15:21:23 +00:00
|
|
|
static int hf_gtpv2_hsgw_addr_ipv4 = -1;
|
|
|
|
static int hf_gtpv2_hsgw_addr_ipv6 = -1;
|
|
|
|
static int hf_gtpv2_gre_key = -1;
|
|
|
|
static int hf_gtpv2_sgw_addr_ipv4 = -1;
|
|
|
|
static int hf_gtpv2_sgw_addr_ipv6 = -1;
|
|
|
|
static int hf_gtpv2_sgw_s1u_teid = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
static int hf_gtpv2_imsi= -1;
|
2011-01-07 15:21:23 +00:00
|
|
|
static int hf_gtpv2_ipv4_addr = -1;
|
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static int hf_gtpv2_ambr_up= -1;
|
|
|
|
static int hf_gtpv2_ambr_down= -1;
|
|
|
|
static int hf_gtpv2_ip_address_ipv4= -1;
|
|
|
|
static int hf_gtpv2_ip_address_ipv6= -1;
|
|
|
|
static int hf_gtpv2_mei= -1;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
|
|
|
/* Trace Information */
|
2013-02-03 22:29:48 +00:00
|
|
|
/* static int hf_gtpv2_tra_info = -1; */
|
2011-01-07 15:21:23 +00:00
|
|
|
static int hf_gtpv2_tra_info_msc_momt_calls = -1;
|
|
|
|
static int hf_gtpv2_tra_info_msc_momt_sms = -1;
|
|
|
|
static int hf_gtpv2_tra_info_msc_lu_imsi_ad = -1;
|
|
|
|
static int hf_gtpv2_tra_info_msc_handovers = -1;
|
|
|
|
static int hf_gtpv2_tra_info_msc_ss = -1;
|
|
|
|
static int hf_gtpv2_tra_info_mgw_context = -1;
|
|
|
|
static int hf_gtpv2_tra_info_sgsn_pdp_context = -1;
|
|
|
|
static int hf_gtpv2_tra_info_sgsn_momt_sms = -1;
|
|
|
|
static int hf_gtpv2_tra_info_sgsn_rau_gprs_ad = -1;
|
|
|
|
static int hf_gtpv2_tra_info_sgsn_mbms = -1;
|
|
|
|
static int hf_gtpv2_tra_info_sgsn_reserved = -1;
|
|
|
|
static int hf_gtpv2_tra_info_ggsn_pdp = -1;
|
|
|
|
static int hf_gtpv2_tra_info_ggsn_mbms = -1;
|
|
|
|
static int hf_gtpv2_tra_info_bm_sc = -1;
|
|
|
|
static int hf_gtpv2_tra_info_mme_sgw_ss = -1;
|
|
|
|
static int hf_gtpv2_tra_info_mme_sgw_sr = -1;
|
|
|
|
static int hf_gtpv2_tra_info_mme_sgw_iataud = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_msc_s = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_mgw = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_sgsn = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_ggsn = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_rnc = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_bm_sc = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_mme = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_sgw = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_pdn_gw = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lne_enb = -1;
|
|
|
|
static int hf_gtpv2_tra_info_tdl = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_a = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_lu = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_mc = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_g = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_b = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_e = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_f = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_cap = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_d = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmsc_map_c = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmgw_mc = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmgw_nb_up = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmgw_lu_up = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_gb = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_lu = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_gn = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_map_gr = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_map_gd = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_map_gf = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_gs = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgsn_ge = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lggsn_gn = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lggsn_gi = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lggsn_gmb = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lrnc_lu = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lrnc_lur = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lrnc_lub = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lrnc_uu = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lbm_sc_gmb = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmme_s1_mme = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmme_s3 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmme_s6a = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmme_s10 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lmme_s11 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgw_s4 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgw_s5 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgw_s8b = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lsgw_s11 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s2a = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s2b = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s2c = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s5 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s6c = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_gx = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_s8b = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lpdn_gw_sgi = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lenb_s1_mme = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lenb_x2 = -1;
|
|
|
|
static int hf_gtpv2_tra_info_lenb_uu = -1;
|
|
|
|
|
2010-04-05 07:37:04 +00:00
|
|
|
static int hf_gtpv2_address_digits = -1;
|
2010-06-28 15:31:41 +00:00
|
|
|
static int hf_gtpv2_ti = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static int hf_gtpv2_bearer_qos_pvi= -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_pl= -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_pci= -1;
|
2011-01-04 07:14:11 +00:00
|
|
|
static int hf_gtpv2_bearer_qos_label_qci = -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_mbr_up = -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_mbr_down = -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_gbr_up = -1;
|
|
|
|
static int hf_gtpv2_bearer_qos_gbr_down = -1;
|
|
|
|
static int hf_gtpv2_flow_qos_label_qci = -1;
|
|
|
|
static int hf_gtpv2_flow_qos_mbr_up = -1;
|
|
|
|
static int hf_gtpv2_flow_qos_mbr_down = -1;
|
|
|
|
static int hf_gtpv2_flow_qos_gbr_up = -1;
|
|
|
|
static int hf_gtpv2_flow_qos_gbr_down = -1;
|
|
|
|
|
|
|
|
static int hf_gtpv2_delay_value = -1;
|
|
|
|
static int hf_gtpv2_charging_id = -1;
|
|
|
|
static int hf_gtpv2_charging_characteristic = -1;
|
|
|
|
static int hf_gtpv2_bearer_flag_ppc = -1;
|
|
|
|
static int hf_gtpv2_bearer_flag_vb = -1;
|
|
|
|
static int hf_gtpv2_ue_time_zone_dst = -1;
|
2011-01-08 20:09:29 +00:00
|
|
|
static int hf_gtpv2_fq_csid_type = -1;
|
|
|
|
static int hf_gtpv2_fq_csid_nr = -1;
|
|
|
|
static int hf_gtpv2_fq_csid_ipv4 = -1;
|
|
|
|
static int hf_gtpv2_fq_csid_ipv6 = -1;
|
|
|
|
static int hf_gtpv2_fq_csid_id = -1;
|
2010-12-30 14:09:09 +00:00
|
|
|
static int hf_gtpv2_complete_req_msg_type = -1;
|
|
|
|
static int hf_gtpv2_mme_grp_id = -1;
|
|
|
|
static int hf_gtpv2_mme_code = -1;
|
|
|
|
static int hf_gtpv2_m_tmsi = -1;
|
2010-06-28 15:31:41 +00:00
|
|
|
static int hf_gtpv2_container_type = -1;
|
|
|
|
static int hf_gtpv2_cause_type = -1;
|
|
|
|
static int hf_gtpv2_CauseRadioNetwork = -1;
|
|
|
|
static int hf_gtpv2_CauseTransport = -1;
|
|
|
|
static int hf_gtpv2_CauseNas = -1;
|
|
|
|
static int hf_gtpv2_CauseProtocol = -1;
|
|
|
|
static int hf_gtpv2_CauseMisc = -1;
|
|
|
|
static int hf_gtpv2_target_type = -1;
|
2010-12-30 14:09:09 +00:00
|
|
|
static int hf_gtpv2_macro_enodeb_id = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static int hf_gtpv2_node_type= -1;
|
2011-01-12 16:43:59 +00:00
|
|
|
static int hf_gtpv2_fqdn = -1;
|
2010-06-01 22:22:09 +00:00
|
|
|
static int hf_gtpv2_enterprise_id = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
static int hf_gtpv2_apn_rest= -1;
|
|
|
|
static int hf_gtpv2_pti= -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_mm_context_sm = -1;
|
|
|
|
static int hf_gtpv2_mm_context_nhi = -1;
|
|
|
|
static int hf_gtpv2_mm_context_drxi = -1;
|
|
|
|
static int hf_gtpv2_mm_context_cksn = -1;
|
|
|
|
static int hf_gtpv2_mm_context_cksn_ksi = -1;
|
2011-12-01 21:26:22 +00:00
|
|
|
static int hf_gtpv2_mm_context_kasme = -1;
|
2012-04-11 15:52:14 +00:00
|
|
|
static int hf_gtpv2_mm_context_rand = -1;
|
|
|
|
static int hf_gtpv2_mm_context_xres_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_xres = -1;
|
|
|
|
static int hf_gtpv2_mm_context_autn_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_autn = -1;
|
|
|
|
static int hf_gtpv2_mm_context_drx = -1;
|
|
|
|
static int hf_gtpv2_mm_context_ue_net_cap_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_ms_net_cap_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_mei_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_vdp_len = -1;
|
2012-05-02 07:23:32 +00:00
|
|
|
static int hf_gtpv2_mm_context_higher_br_16mb_flg_len = -1;
|
|
|
|
static int hf_gtpv2_mm_context_higher_br_16mb_flg = -1;
|
2013-04-22 19:03:12 +00:00
|
|
|
static int hf_gtpv2_vdp_length = -1;
|
2012-05-02 07:23:32 +00:00
|
|
|
|
2011-12-01 21:26:22 +00:00
|
|
|
static int hf_gtpv2_una = -1;
|
|
|
|
static int hf_gtpv2_gena = -1;
|
|
|
|
static int hf_gtpv2_gana = -1;
|
|
|
|
static int hf_gtpv2_ina = -1;
|
|
|
|
static int hf_gtpv2_ena = -1;
|
|
|
|
static int hf_gtpv2_hnna = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_mm_context_ksi_a= -1;
|
|
|
|
static int hf_gtpv2_mm_context_ksi = -1;
|
|
|
|
static int hf_gtpv2_mm_context_nr_tri = -1;
|
2012-04-11 15:52:14 +00:00
|
|
|
static int hf_gtpv2_mm_context_used_cipher = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_mm_context_nr_qui = -1;
|
|
|
|
static int hf_gtpv2_mm_context_nr_qua = -1;
|
2011-12-01 21:26:22 +00:00
|
|
|
static int hf_gtpv2_mm_context_uamb_ri = -1;
|
|
|
|
static int hf_gtpv2_mm_context_osci = -1;
|
|
|
|
static int hf_gtpv2_mm_context_samb_ri = -1;
|
2011-01-03 17:22:02 +00:00
|
|
|
static int hf_gtpv2_mm_context_unipa = -1;
|
|
|
|
static int hf_gtpv2_mm_context_unc = -1;
|
|
|
|
static int hf_gtpv2_mm_context_nas_dl_cnt = -1;
|
|
|
|
static int hf_gtpv2_mm_context_nas_ul_cnt = -1;
|
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
static int hf_gtpv2_uli_cgi_lac= -1;
|
|
|
|
static int hf_gtpv2_uli_cgi_ci= -1;
|
|
|
|
static int hf_gtpv2_uli_sai_lac= -1;
|
|
|
|
static int hf_gtpv2_uli_sai_sac= -1;
|
|
|
|
static int hf_gtpv2_uli_rai_lac= -1;
|
|
|
|
static int hf_gtpv2_uli_rai_rac= -1;
|
|
|
|
static int hf_gtpv2_uli_tai_tac= -1;
|
|
|
|
static int hf_gtpv2_uli_ecgi_eci= -1;
|
2011-01-12 16:43:59 +00:00
|
|
|
static int hf_gtpv2_uli_lai_lac = -1;
|
2010-06-08 08:36:22 +00:00
|
|
|
static int hf_gtpv2_uli_ecgi_eci_spare= -1;
|
2011-01-08 20:09:29 +00:00
|
|
|
static int hf_gtpv2_nsapi = -1;
|
2009-07-30 21:11:26 +00:00
|
|
|
static int hf_gtpv2_bearer_control_mode= -1;
|
|
|
|
|
2011-11-06 08:18:26 +00:00
|
|
|
static int hf_gtpv2_bss_container_phx = -1;
|
|
|
|
static int hf_gtpv2_bss_con_sapi_flg = -1;
|
|
|
|
static int hf_gtpv2_bss_con_rp_flg = -1;
|
|
|
|
static int hf_gtpv2_bss_con_pfi_flg = -1;
|
|
|
|
static int hf_gtpv2_bss_con_pfi = -1;
|
|
|
|
static int hf_gtpv2_bss_con_rp = -1;
|
|
|
|
static int hf_gtpv2_bss_con_sapi = -1;
|
|
|
|
static int hf_gtpv2_bss_con_xid_len = -1;
|
|
|
|
static int hf_gtpv2_bss_con_xid = -1;
|
|
|
|
static int hf_gtpv2_home_enodeb_id = -1;
|
|
|
|
static int hf_gtpv2_tac = -1;
|
2011-02-11 21:15:41 +00:00
|
|
|
|
2012-02-02 20:56:20 +00:00
|
|
|
/* MBMS */
|
|
|
|
static int hf_gtpv2_mbms_service_area_nr = -1;
|
|
|
|
static int hf_gtpv2_mbms_service_area_id = -1;
|
2012-02-04 09:41:21 +00:00
|
|
|
static int hf_gtpv2_mbms_session_id = -1;
|
|
|
|
static int hf_gtpv2_mbms_flow_id = -1;
|
2012-02-06 17:29:29 +00:00
|
|
|
static int hf_gtpv2_cteid = -1;
|
2012-02-04 09:41:21 +00:00
|
|
|
static int hf_gtpv2_ip_addr_type = -1;
|
|
|
|
static int hf_gtpv2_ip_addr_len = -1;
|
|
|
|
static int hf_gtpv2_mbms_ip_mc_dist_addrv4 = -1;
|
|
|
|
static int hf_gtpv2_mbms_ip_mc_dist_addrv6 = -1;
|
|
|
|
static int hf_gtpv2_mbms_ip_mc_src_addrv4 = -1;
|
|
|
|
static int hf_gtpv2_mbms_ip_mc_src_addrv6 = -1;
|
|
|
|
static int hf_gtpv2_mbms_hc_indicator = -1;
|
|
|
|
static int hf_gtpv2_mbms_dist_indication = -1;
|
2013-11-08 05:58:13 +00:00
|
|
|
static int hf_gtpv2_subscriber_rfsp = -1;
|
|
|
|
static int hf_gtpv2_rfsp_inuse = -1;
|
2012-02-06 17:29:29 +00:00
|
|
|
static int hf_gtpv2_mbms_service_id = -1;
|
|
|
|
static int hf_gtpv2_add_flags_for_srvcc_ics = -1;
|
|
|
|
static int hf_gtpv2_vsrvcc_flag = -1;
|
2012-04-25 08:39:49 +00:00
|
|
|
static int hf_gtpv2_abs_time_mbms_data = -1;
|
2013-03-14 19:00:40 +00:00
|
|
|
static int hf_gtpv2_henb_info_report_fti = -1;
|
|
|
|
static int hf_gtpv2_ip4cp_subnet_prefix_len = -1;
|
|
|
|
static int hf_gtpv2_ip4cp_ipv4 = -1;
|
|
|
|
static int hf_gtpv2_change_report_flags_sncr = -1;
|
|
|
|
static int hf_gtpv2_change_report_flags_tzcr = -1;
|
|
|
|
static int hf_gtpv2_action_indication_val = -1;
|
2012-04-25 08:39:49 +00:00
|
|
|
static int hf_gtpv2_mbms_session_duration_days = -1;
|
|
|
|
static int hf_gtpv2_mbms_session_duration_secs = -1;
|
2013-06-14 02:44:15 +00:00
|
|
|
static int hf_gtpv2_node_features_prn = -1;
|
|
|
|
static int hf_gtpv2_node_features_mabr =-1;
|
|
|
|
static int hf_gtpv2_node_features_ntsr = -1;
|
2012-04-25 08:39:49 +00:00
|
|
|
static int hf_gtpv2_time_to_data_xfer = -1;
|
2012-04-27 10:48:03 +00:00
|
|
|
static int hf_gtpv2_arp_pvi = -1;
|
|
|
|
static int hf_gtpv2_arp_pl = -1;
|
|
|
|
static int hf_gtpv2_arp_pci = -1;
|
2012-10-29 16:02:51 +00:00
|
|
|
static int hf_gtpv2_timer_unit = -1;
|
|
|
|
static int hf_gtpv2_timer_value = -1;
|
|
|
|
static int hf_gtpv2_lapi = -1;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2011-02-11 21:15:41 +00:00
|
|
|
static gint ett_gtpv2 = -1;
|
|
|
|
static gint ett_gtpv2_flags = -1;
|
|
|
|
static gint ett_gtpv2_ie = -1;
|
|
|
|
static gint ett_gtpv2_uli_flags = -1;
|
|
|
|
static gint ett_gtpv2_uli_field = -1;
|
|
|
|
static gint ett_gtpv2_bearer_ctx = -1;
|
|
|
|
static gint ett_gtpv2_PDN_conn = -1;
|
|
|
|
static gint ett_gtpv2_mm_context_flag = -1;
|
|
|
|
static gint ett_gtpv2_pdn_numbers_nsapi = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_msc_server = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_mgw = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_sgsn = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_ggsn = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_bm_sc = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_trigg_sgw_mme = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_imsc_server = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lmgw = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lsgsn = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lggsn = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lrnc = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lbm_sc = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lmme = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lsgw = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lpdn_gw = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_interfaces_lpdn_lenb = -1;
|
|
|
|
static gint ett_gtpv2_tra_info_ne_types = -1;
|
2011-07-30 14:05:31 +00:00
|
|
|
static gint ett_gtpv2_rai = -1;
|
|
|
|
static gint ett_gtpv2_ms_mark = -1;
|
|
|
|
static gint ett_gtpv2_stn_sr = -1;
|
|
|
|
static gint ett_gtpv2_supp_codec_list = -1;
|
2011-12-01 21:26:22 +00:00
|
|
|
static gint ett_gtpv2_bss_con = -1;
|
|
|
|
static gint ett_gtpv2_mm_context_auth_qua = -1;
|
2012-04-11 15:52:14 +00:00
|
|
|
static gint ett_gtpv2_mm_context_auth_qui = -1;
|
2012-04-12 14:07:31 +00:00
|
|
|
static gint ett_gtpv2_mm_context_auth_tri = -1;
|
2011-12-01 21:26:22 +00:00
|
|
|
static gint ett_gtpv2_mm_context_net_cap = -1;
|
|
|
|
static gint ett_gtpv2_ms_network_capability = -1;
|
|
|
|
static gint ett_gtpv2_vd_pref = -1;
|
|
|
|
static gint ett_gtpv2_access_rest_data = -1;
|
2012-11-29 10:57:33 +00:00
|
|
|
static gint ett_gtpv2_qua = -1;
|
|
|
|
static gint ett_gtpv2_qui = -1;
|
|
|
|
|
2013-06-09 03:28:05 +00:00
|
|
|
static expert_field ei_gtpv2_ie_data_not_dissected = EI_INIT;
|
|
|
|
static expert_field ei_gtpv2_ie_len_invalid = EI_INIT;
|
|
|
|
static expert_field ei_gtpv2_source_type_unknown = EI_INIT;
|
|
|
|
static expert_field ei_gtpv2_fq_csid_type_bad = EI_INIT;
|
2011-02-11 21:15:41 +00:00
|
|
|
|
2010-06-08 08:36:22 +00:00
|
|
|
/* Definition of User Location Info (AVP 22) masks */
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPv2_ULI_CGI_MASK 0x01
|
|
|
|
#define GTPv2_ULI_SAI_MASK 0x02
|
|
|
|
#define GTPv2_ULI_RAI_MASK 0x04
|
|
|
|
#define GTPv2_ULI_TAI_MASK 0x08
|
|
|
|
#define GTPv2_ULI_ECGI_MASK 0x10
|
|
|
|
#define GTPv2_ULI_LAI_MASK 0x20
|
2010-06-08 08:36:22 +00:00
|
|
|
|
2011-01-12 16:43:59 +00:00
|
|
|
#define GTPV2_CREATE_SESSION_REQUEST 32
|
|
|
|
#define GTPV2_CREATE_SESSION_RESPONSE 33
|
2011-11-06 08:18:26 +00:00
|
|
|
#define GTPV2_CONTEXT_RESPONSE 131
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_FORWARD_RELOCATION_REQ 133
|
|
|
|
#define GTPV2_FORWARD_CTX_NOTIFICATION 137
|
2011-11-06 08:18:26 +00:00
|
|
|
#define GTPV2_RAN_INFORMATION_RELAY 152
|
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
static void dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, gint offset, guint8 message_type);
|
2009-09-15 15:54:06 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
/*Message Types for GTPv2 (Refer Pg19 29.274) (SB)*/
|
2009-02-10 21:57:56 +00:00
|
|
|
static const value_string gtpv2_message_type_vals[] = {
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 0, "Reserved"},
|
|
|
|
{ 1, "Echo Request"},
|
|
|
|
{ 2, "Echo Response"},
|
|
|
|
{ 3, "Version Not Supported Indication"},
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 4-24 Reserved for S101 interface TS 29.276 */
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 4, "Node Alive Request"},
|
|
|
|
{ 5, "Node Alive Response"},
|
|
|
|
{ 6, "Redirection Request"},
|
|
|
|
{ 7, "Redirection Response"},
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 25-31 Reserved for Sv interface TS 29.280 */
|
2011-07-30 14:05:31 +00:00
|
|
|
/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 5.2.1*/
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 25, "SRVCC PS to CS Request"},
|
|
|
|
{ 26, "SRVCC PS to CS Response"},
|
|
|
|
{ 27, "SRVCC PS to CS Complete Notification"},
|
|
|
|
{ 28, "SRVCC PS to CS Complete Acknowledge"},
|
|
|
|
{ 29, "SRVCC PS to CS Cancel Notification"},
|
|
|
|
{ 30, "SRVCC PS to CS Cancel Acknowledge"},
|
|
|
|
{ 31, "For Future Sv interface use"},
|
2011-07-30 14:05:31 +00:00
|
|
|
/*End SRVCC Messages*/
|
2010-05-10 15:54:57 +00:00
|
|
|
/* SGSN/MME to PGW (S4/S11, S5/S8) */
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 32, "Create Session Request"},
|
|
|
|
{ 33, "Create Session Response"},
|
|
|
|
{ 34, "Modify Bearer Request"},
|
|
|
|
{ 35, "Modify Bearer Response"},
|
|
|
|
{ 36, "Delete Session Request"},
|
|
|
|
{ 37, "Delete Session Response"},
|
2010-05-10 15:54:57 +00:00
|
|
|
/* SGSN to PGW (S4, S5/S8) */
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 38, "Change Notification Request"},
|
|
|
|
{ 39, "Change Notification Response"},
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 40-63 For future use */
|
|
|
|
/* Messages without explicit response */
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 64, "Modify Bearer Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
|
|
|
|
{ 65, "Modify Bearer Failure Indication"}, /*(PGW to MME/SGSN -S5/S8, S11/S4) */
|
|
|
|
{ 66, "Delete Bearer Command"}, /* (MME to PGW -S11, S5/S8) */
|
|
|
|
{ 67, "Delete Bearer Failure Indication"}, /* (PGW to MME -S5/S8, S11) */
|
|
|
|
{ 68, "Bearer Resource Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
|
|
|
|
{ 69, "Bearer Resource Failure Indication"}, /* (PGW to MME/SGSN -S5/S8, S11/S4) */
|
|
|
|
{ 70, "Downlink Data Notification Failure Indication"}, /*(SGSN/MME to SGW -S4/S11) */
|
|
|
|
{ 71, "Trace Session Activation"},
|
|
|
|
{ 72, "Trace Session Deactivation"},
|
|
|
|
{ 73, "Stop Paging Indication"},
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 74-94 For future use */
|
|
|
|
/* PDN-GW to SGSN/MME (S5/S8, S4/S11) */
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 95, "Create Bearer Request"},
|
|
|
|
{ 96, "Create Bearer Response"},
|
|
|
|
{ 97, "Update Bearer Request"},
|
|
|
|
{ 98, "Update Bearer Response"},
|
|
|
|
{ 99, "Delete Bearer Request"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{100, "Delete Bearer Response"},
|
|
|
|
/* PGW to MME, MME to PGW, SGW to PGW, SGW to MME (S5/S8, S11) */
|
|
|
|
{101, "Delete PDN Connection Set Request"},
|
|
|
|
{102, "Delete PDN Connection Set Response"},
|
|
|
|
/* 103-127 For future use */
|
|
|
|
/* MME to MME, SGSN to MME, MME to SGSN, SGSN to SGSN (S3/10/S16) */
|
|
|
|
{128, "Identification Request"},
|
|
|
|
{129, "Identification Response"},
|
|
|
|
{130, "Context Request"},
|
|
|
|
{131, "Context Response"},
|
|
|
|
{132, "Context Acknowledge"},
|
|
|
|
{133, "Forward Relocation Request"},
|
|
|
|
{134, "Forward Relocation Response"},
|
|
|
|
{135, "Forward Relocation Complete Notification"},
|
|
|
|
{136, "Forward Relocation Complete Acknowledge"},
|
|
|
|
{137, "Forward Access Context Notification"},
|
|
|
|
{138, "Forward Access Context Acknowledge"},
|
|
|
|
{139, "Relocation Cancel Request"},
|
|
|
|
{140, "Relocation Cancel Response"},
|
|
|
|
{141, "Configuration Transfer Tunnel"},
|
|
|
|
/* 142-148 For future use */
|
|
|
|
/* SGSN to MME, MME to SGSN (S3)*/
|
|
|
|
{149, "Detach Notification"},
|
|
|
|
{150, "Detach Acknowledge"},
|
|
|
|
{151, "CS Paging Indication"},
|
|
|
|
{152, "RAN Information Relay"},
|
2010-06-28 15:31:41 +00:00
|
|
|
{153, "Alert MME Notification"},
|
|
|
|
{154, "Alert MME Acknowledge"},
|
|
|
|
{155, "UE Activity Notification"},
|
|
|
|
{156, "UE Activity Acknowledge"},
|
|
|
|
/* 157 to 159 For future use */
|
2010-05-10 15:54:57 +00:00
|
|
|
/* MME to SGW (S11) */
|
|
|
|
{160, "Create Forwarding Tunnel Request"},
|
|
|
|
{161, "Create Forwarding Tunnel Response"},
|
|
|
|
{162, "Suspend Notification"},
|
|
|
|
{163, "Suspend Acknowledge"},
|
|
|
|
{164, "Resume Notification"},
|
|
|
|
{165, "Resume Acknowledge"},
|
|
|
|
{166, "Create Indirect Data Forwarding Tunnel Request"},
|
|
|
|
{167, "Create Indirect Data Forwarding Tunnel Response"},
|
|
|
|
{168, "Delete Indirect Data Forwarding Tunnel Request"},
|
|
|
|
{169, "Delete Indirect Data Forwarding Tunnel Response"},
|
|
|
|
{170, "Release Access Bearers Request"},
|
|
|
|
{171, "Release Access Bearers Response"},
|
|
|
|
/* 172-175 For future use */
|
|
|
|
/* SGW to SGSN/MME (S4/S11) */
|
2010-06-02 06:17:02 +00:00
|
|
|
{176, "Downlink Data Notification"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{177, "Downlink Data Notification Acknowledgement"},
|
2012-02-02 20:56:20 +00:00
|
|
|
{178, "Reserved. Allocated in earlier version of the specification."},
|
|
|
|
{179, "PGW Restart Notification"},
|
|
|
|
{180, "PGW Restart Notification Acknowledge"},
|
|
|
|
/* 181-199 For future use */
|
|
|
|
/* SGW to PGW, PGW to SGW (S5/S8) */
|
2010-06-02 06:17:02 +00:00
|
|
|
{200, "Update PDN Connection Set Request"},
|
|
|
|
{201, "Update PDN Connection Set Response"},
|
2012-02-02 20:56:20 +00:00
|
|
|
/* 202 to 210 For future use */
|
|
|
|
/* MME to SGW (S11) */
|
|
|
|
{211, "Modify Access Bearers Request"},
|
|
|
|
{212, "Modify Access Bearers Response"},
|
|
|
|
/* 213 to 230 For future use */
|
2011-08-03 21:14:04 +00:00
|
|
|
/* MBMS GW to MME/SGSN (Sm/Sn) */
|
2010-06-02 06:17:02 +00:00
|
|
|
{231, "MBMS Session Start Request"},
|
2012-03-15 08:32:49 +00:00
|
|
|
{232, "MBMS Session Start Response"},
|
2010-06-02 06:17:02 +00:00
|
|
|
{233, "MBMS Session Update Request"},
|
|
|
|
{234, "MBMS Session Update Response"},
|
|
|
|
{235, "MBMS Session Stop Request"},
|
|
|
|
{236, "MBMS Session Stop Response"},
|
2011-08-03 21:14:04 +00:00
|
|
|
/* 237 to 239 For future use */
|
2014-02-13 19:29:20 +00:00
|
|
|
{240, "SRVCC CS to PS Response"}, /* 5.2.9 3GPP TS 29.280 V11.5.0 (2013-09) */
|
|
|
|
{241, "SRVCC CS to PS Complete Notification"}, /* 5.2.10 3GPP TS 29.280 V11.5.0 (2013-09) */
|
|
|
|
{242, "SRVCC CS to PS Complete Acknowledge"}, /* 5.2.11 3GPP TS 29.280 V11.5.0 (2013-09) */
|
|
|
|
{243, "SRVCC CS to PS Cancel Notification"}, /* 5.2.12 3GPP TS 29.280 V11.5.0 (2013-09) */
|
|
|
|
{244, "SRVCC CS to PS Cancel Acknowledge"}, /* 5.2.13 3GPP TS 29.280 V11.5.0 (2013-09) */
|
|
|
|
/* 245 to 247 For future Sv interface use*/
|
|
|
|
/* 248 to 255 For future use */
|
2009-02-10 21:57:56 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-11-26 16:50:13 +00:00
|
|
|
static value_string_ext gtpv2_message_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_message_type_vals);
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_IE_RESERVED 0
|
|
|
|
#define GTPV2_IE_IMSI 1
|
|
|
|
#define GTPV2_IE_CAUSE 2
|
|
|
|
#define GTPV2_REC_REST_CNT 3
|
2011-07-30 14:05:31 +00:00
|
|
|
/*Start SRVCC Messages*/
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_IE_STN_SR 51
|
|
|
|
#define GTPV2_IE_SRC_TGT_TRANS_CON 52
|
|
|
|
#define GTPV2_IE_TGT_SRC_TRANS_CON 53
|
|
|
|
#define GTPV2_IE_MM_CON_EUTRAN_SRVCC 54
|
|
|
|
#define GTPV2_IE_MM_CON_UTRAN_SRVCC 55
|
|
|
|
#define GTPV2_IE_SRVCC_CAUSE 56
|
|
|
|
#define GTPV2_IE_TGT_RNC_ID 57
|
|
|
|
#define GTPV2_IE_TGT_GLOGAL_CELL_ID 58
|
|
|
|
#define GTPV2_IE_TEID_C 59
|
|
|
|
#define GTPV2_IE_SV_FLAGS 60
|
|
|
|
#define GTPV2_IE_SAI 61
|
2011-07-30 14:05:31 +00:00
|
|
|
/* 61 - 70 for future sv interface use*/
|
|
|
|
/*End SRVCC Messages*/
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_APN 71
|
|
|
|
#define GTPV2_AMBR 72
|
|
|
|
#define GTPV2_EBI 73
|
|
|
|
#define GTPV2_IP_ADDRESS 74
|
|
|
|
#define GTPV2_MEI 75
|
|
|
|
#define GTPV2_IE_MSISDN 76
|
|
|
|
#define GTPV2_INDICATION 77
|
|
|
|
#define GTPV2_PCO 78
|
|
|
|
#define GTPV2_PAA 79
|
|
|
|
#define GTPV2_BEARER_QOS 80
|
|
|
|
#define GTPV2_IE_FLOW_QOS 81
|
|
|
|
#define GTPV2_IE_RAT_TYPE 82
|
|
|
|
#define GTPV2_IE_SERV_NET 83
|
|
|
|
#define GTPV2_IE_BEARER_TFT 84
|
|
|
|
#define GTPV2_IE_TAD 85
|
|
|
|
#define GTPV2_IE_ULI 86
|
|
|
|
#define GTPV2_IE_F_TEID 87
|
|
|
|
#define GTPV2_IE_TMSI 88
|
|
|
|
#define GTPV2_IE_GLOBAL_CNID 89
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_S103PDF 90
|
|
|
|
#define GTPV2_IE_S1UDF 91
|
|
|
|
#define GTPV2_IE_DEL_VAL 92
|
|
|
|
#define GTPV2_IE_BEARER_CTX 93
|
|
|
|
#define GTPV2_IE_CHAR_ID 94
|
|
|
|
#define GTPV2_IE_CHAR_CHAR 95
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_IE_TRA_INFO 96
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_BEARER_FLAG 97
|
2011-01-08 20:09:29 +00:00
|
|
|
/* define GTPV2_IE_PAGING_CAUSE 98 (void) */
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_PDN_TYPE 99
|
|
|
|
#define GTPV2_IE_PTI 100
|
|
|
|
#define GTPV2_IE_DRX_PARAM 101
|
|
|
|
#define GTPV2_IE_UE_NET_CAPABILITY 102
|
2011-01-03 17:22:02 +00:00
|
|
|
#define GTPV2_IE_MM_CONTEXT_GSM_T 103
|
|
|
|
#define GTPV2_IE_MM_CONTEXT_UTMS_CQ 104
|
|
|
|
#define GTPV2_IE_MM_CONTEXT_GSM_CQ 105
|
|
|
|
#define GTPV2_IE_MM_CONTEXT_UTMS_Q 106
|
|
|
|
#define GTPV2_IE_MM_CONTEXT_EPS_QQ 107
|
|
|
|
#define GTPV2_IE_MM_CONTEXT_UTMS_QQ 108
|
|
|
|
#define GTPV2_IE_PDN_CONNECTION 109
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_PDN_NUMBERS 110
|
|
|
|
#define GTPV2_IE_P_TMSI 111
|
|
|
|
#define GTPV2_IE_P_TMSI_SIG 112
|
|
|
|
#define GTPV2_IE_HOP_COUNTER 113
|
2011-01-03 17:22:02 +00:00
|
|
|
#define GTPV2_IE_UE_TIME_ZONE 114
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_TRACE_REFERENCE 115
|
|
|
|
#define GTPV2_IE_COMPLETE_REQUEST_MSG 116
|
2011-01-03 17:22:02 +00:00
|
|
|
#define GTPV2_IE_GUTI 117
|
2011-08-03 21:14:04 +00:00
|
|
|
#define GTPV2_IE_F_CONTAINER 118
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_F_CAUSE 119
|
|
|
|
#define GTPV2_IE_SEL_PLMN_ID 120
|
|
|
|
#define GTPV2_IE_TARGET_ID 121
|
|
|
|
/* GTPV2_IE_NSAPI 122 */
|
2011-01-08 20:09:29 +00:00
|
|
|
#define GTPV2_IE_PKT_FLOW_ID 123
|
|
|
|
#define GTPV2_IE_RAB_CONTEXT 124
|
|
|
|
#define GTPV2_IE_S_RNC_PDCP_CTX_INFO 125
|
|
|
|
#define GTPV2_IE_UDP_S_PORT_NR 126
|
2011-01-12 16:43:59 +00:00
|
|
|
#define GTPV2_IE_APN_RESTRICTION 127
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_SEL_MODE 128
|
2011-01-04 07:14:11 +00:00
|
|
|
#define GTPV2_IE_SOURCE_IDENT 129
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_BEARER_CONTROL_MODE 130
|
|
|
|
#define GTPV2_IE_CNG_REP_ACT 131
|
2011-01-08 20:09:29 +00:00
|
|
|
#define GTPV2_IE_FQ_CSID 132
|
2011-01-07 16:12:01 +00:00
|
|
|
#define GTPV2_IE_CHANNEL_NEEDED 133
|
2011-01-08 20:09:29 +00:00
|
|
|
#define GTPV2_IE_EMLPP_PRI 134
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_NODE_TYPE 135
|
2011-01-08 20:09:29 +00:00
|
|
|
#define GTPV2_IE_FQDN 136
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_TI 137
|
2012-02-02 20:56:20 +00:00
|
|
|
#define GTPV2_IE_MBMS_SESSION_DURATION 138
|
|
|
|
#define GTPV2_IE_MBMS_SERVICE_AREA 139
|
|
|
|
#define GTPV2_IE_MBMS_SESSION_ID 140
|
|
|
|
#define GTPV2_IE_MBMS_FLOW_ID 141
|
|
|
|
#define GTPV2_IE_MBMS_IP_MC_DIST 142
|
|
|
|
#define GTPV2_IE_MBMS_DIST_ACK 143
|
|
|
|
#define GTPV2_IE_RFSP_INDEX 144
|
|
|
|
#define GTPV2_IE_UCI 145
|
|
|
|
#define GTPV2_IE_CSG_INFO_REP_ACTION 146
|
|
|
|
#define GTPV2_IE_CSG_ID 147
|
|
|
|
#define GTPV2_IE_CMI 148
|
|
|
|
#define GTPV2_IE_SERVICE_INDICATOR 149
|
|
|
|
#define GTPV2_IE_DETACH_TYPE 150
|
|
|
|
#define GTPV2_IE_LDN 151
|
|
|
|
#define GTPV2_IE_NODE_FEATURES 152
|
|
|
|
#define GTPV2_IE_MBMS_TIME_TO_DATA_XFER 153
|
|
|
|
#define GTPV2_IE_THROTTLING 154
|
|
|
|
#define GTPV2_IE_ARP 155
|
|
|
|
#define GTPV2_IE_EPC_TIMER 156
|
|
|
|
#define GTPV2_IE_SIG_PRIO_IND 157
|
|
|
|
#define GTPV2_IE_TMGI 158
|
|
|
|
#define GTPV2_IE_ADD_MM_CONT_FOR_SRVCC 159
|
|
|
|
#define GTPV2_IE_ADD_FLAGS_FOR_SRVCC 160
|
|
|
|
#define GTPV2_IE_MMBR 161
|
|
|
|
#define GTPV2_IE_MDT_CONFIG 162
|
|
|
|
#define GTPV2_IE_APCO 163
|
2012-04-25 08:39:49 +00:00
|
|
|
#define GTPV2_IE_ABS_MBMS_DATA_TF_TIME 164
|
2013-06-14 02:44:15 +00:00
|
|
|
#define GTPV2_IE_HENB_INFO_REPORT 165
|
2013-03-14 19:00:40 +00:00
|
|
|
#define GTPV2_IE_IP4CP 166
|
|
|
|
#define GTPV2_IE_CHANGE_TO_REPORT_FLAGS 167
|
|
|
|
#define GTPV2_IE_ACTION_INDICATION 168
|
|
|
|
/* 169 to 254 reserved for future use */
|
2011-01-07 15:21:23 +00:00
|
|
|
#define GTPV2_IE_PRIVATE_EXT 255
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
#define SPARE 0X0
|
|
|
|
#define CREATE_NEW_TFT 0X20
|
|
|
|
#define DELETE_TFT 0X40
|
|
|
|
#define ADD_PACKET_FILTERS_TFT 0X60
|
|
|
|
#define REPLACE_PACKET_FILTERS_TFT 0X80
|
|
|
|
#define DELETE_PACKET_FILTERS_TFT 0XA0
|
|
|
|
#define NO_TFT_OPERATION 0XC0
|
|
|
|
#define RESERVED 0XE0
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
/* Table 8.1-1: Information Element types for GTPv2 */
|
|
|
|
static const value_string gtpv2_element_type_vals[] = {
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 0, "Reserved"},
|
|
|
|
{ 1, "International Mobile Subscriber Identity (IMSI)"}, /* Variable Length / 8.3 */
|
|
|
|
{ 2, "Cause"}, /* Variable Length / 8.4 */
|
|
|
|
{ 3, "Recovery (Restart Counter)"}, /* Variable Length / 8.5 */
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 4-50 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
|
|
|
|
/* 51-70 Reserved for Sv interface Extendable / See 3GPP TS 29.280 [15] */
|
2011-07-30 14:05:31 +00:00
|
|
|
/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 6.1*/
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 51, "STN-SR"}, /* Variable Length / 6.2 */
|
|
|
|
{ 52, "Source to Target Transparent Container"}, /* Variable Length / 6.3 */
|
|
|
|
{ 53, "Target to Source Transparent Container"}, /* Variable Length / 6.4 */
|
|
|
|
{ 54, "MM Context for E-UTRAN SRVCC"}, /* Variable Length / 6.5 */
|
|
|
|
{ 55, "MM Context for UTRAN SRVCC"}, /* Variable Length / 6.6 */
|
|
|
|
{ 56, "SRVCC Cause"}, /* Fixed Length / 6.7 */
|
|
|
|
{ 57, "Target RNC ID"}, /* Variable Length / 6.8 */
|
|
|
|
{ 58, "Target Global Cell ID"}, /* Variable Length / 6.9 */
|
|
|
|
{ 59, "TEID-C"}, /* Extendable / 6.10 */
|
|
|
|
{ 60, "Sv Flags"}, /* Extendable / 6.11 */
|
|
|
|
{ 61, "Service Area Identifier"}, /* Extendable / 6.12 */
|
|
|
|
/* 62-70 For future Sv interface use */
|
2011-07-30 14:05:31 +00:00
|
|
|
/*End SRVCC Messages*/
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 71, "Access Point Name (APN)"}, /* Variable Length / 8.6 */
|
|
|
|
{ 72, "Aggregate Maximum Bit Rate (AMBR)"}, /* Fixed Length / 8.7 */
|
|
|
|
{ 73, "EPS Bearer ID (EBI)"}, /* Extendable / 8.8 */
|
|
|
|
{ 74, "IP Address"}, /* Extendable / 8.9 */
|
|
|
|
{ 75, "Mobile Equipment Identity (MEI)"}, /* Variable Length / 8.10 */
|
|
|
|
{ 76, "MSISDN"}, /* Variable Length / 8.11 */
|
|
|
|
{ 77, "Indication"}, /* Extendable / 8.12 */
|
|
|
|
{ 78, "Protocol Configuration Options (PCO)"}, /* Variable Length / 8.13 */
|
|
|
|
{ 79, "PDN Address Allocation (PAA)"}, /* Variable Length / 8.14 */
|
|
|
|
{ 80, "Bearer Level Quality of Service (Bearer QoS)"}, /* Variable Length / 8.15 */
|
|
|
|
{ 81, "Flow Quality of Service (Flow QoS)"}, /* Extendable / 8.16 */
|
|
|
|
{ 82, "RAT Type"}, /* Extendable / 8.17 */
|
|
|
|
{ 83, "Serving Network"}, /* Extendable / 8.18 */
|
|
|
|
{ 84, "EPS Bearer Level Traffic Flow Template (Bearer TFT)"}, /* Variable Length / 8.19 */
|
|
|
|
{ 85, "Traffic Aggregation Description (TAD)"}, /* Variable Length / 8.20 */
|
|
|
|
{ 86, "User Location Info (ULI)"}, /* Variable Length / 8.21 */
|
|
|
|
{ 87, "Fully Qualified Tunnel Endpoint Identifier (F-TEID)"}, /* Extendable / 8.22 */
|
|
|
|
{ 88, "TMSI"}, /* Variable Length / 8.23 */
|
|
|
|
{ 89, "Global CN-Id"}, /* Variable Length / 8.24 */
|
|
|
|
{ 90, "S103 PDN Data Forwarding Info (S103PDF)"}, /* Variable Length / 8.25 */
|
|
|
|
{ 91, "S1-U Data Forwarding Info (S1UDF)"}, /* Variable Length/ 8.26 */
|
|
|
|
{ 92, "Delay Value"}, /* Extendable / 8.27 */
|
|
|
|
{ 93, "Bearer Context"}, /* Extendable / 8.28 */
|
|
|
|
{ 94, "Charging ID"}, /* Extendable / 8.29 */
|
|
|
|
{ 95, "Charging Characteristics"}, /* Extendable / 8.30 */
|
|
|
|
{ 96, "Trace Information"}, /* Extendable / 8.31 */
|
|
|
|
{ 97, "Bearer Flags"}, /* Extendable / 8.32 */
|
|
|
|
{ 98, "Paging Cause"}, /* Variable Length / 8.33 */
|
|
|
|
{ 99, "PDN Type"}, /* Extendable / 8.34 */
|
2010-05-10 15:54:57 +00:00
|
|
|
{100, "Procedure Transaction ID"}, /* Extendable / 8.35 */
|
|
|
|
{101, "DRX Parameter"}, /* Variable Length/ 8.36 */
|
|
|
|
{102, "UE Network Capability"}, /* Variable Length / 8.37 */
|
|
|
|
{103, "MM Context (GSM Key and Triplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{104, "MM Context (UMTS Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{105, "MM Context (GSM Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{106, "MM Context (UMTS Key and Quintuplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{107, "MM Context (EPS Security Context, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{108, "MM Context (UMTS Key, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
|
|
|
|
{109, "PDN Connection"}, /* Extendable / 8.39 */
|
|
|
|
{110, "PDU Numbers"}, /* Extendable / 8.40 */
|
|
|
|
{111, "P-TMSI"}, /* Variable Length / 8.41 */
|
|
|
|
{112, "P-TMSI Signature"}, /* Variable Length / 8.42 */
|
|
|
|
{113, "Hop Counter"}, /* Extendable / 8.43 */
|
|
|
|
{114, "UE Time Zone"}, /* Variable Length / 8.44 */
|
|
|
|
{115, "Trace Reference"}, /* Fixed Length / 8.45 */
|
|
|
|
{116, "Complete Request Message"}, /* Variable Length / 8.46 */
|
|
|
|
{117, "GUTI"}, /* Variable Length / 8.47 */
|
|
|
|
{118, "F-Container"}, /* Variable Length / 8.48 */
|
|
|
|
{119, "F-Cause"}, /* Variable Length / 8.49 */
|
|
|
|
{120, "Selected PLMN ID"}, /* Variable Length / 8.50 */
|
|
|
|
{121, "Target Identification"}, /* Variable Length / 8.51 */
|
|
|
|
{122, "NSAPI"}, /* Extendable / 8.52 */
|
|
|
|
{123, "Packet Flow ID"}, /* Variable Length / 8.53 */
|
|
|
|
{124, "RAB Context"}, /* Fixed Length / 8.54 */
|
|
|
|
{125, "Source RNC PDCP Context Info"}, /* Variable Length / 8.55 */
|
|
|
|
{126, "UDP Source Port Number"}, /* Extendable / 8.56 */
|
|
|
|
{127, "APN Restriction"}, /* Extendable / 8.57 */
|
|
|
|
{128, "Selection Mode"}, /* Extendable / 8.58 */
|
|
|
|
{129, "Source Identification"}, /* Variable Length / 8.50 */
|
|
|
|
{130, "Bearer Control Mode"}, /* Extendable / 8.60 */
|
|
|
|
{131, "Change Reporting Action"}, /* Variable Length / 8.61 */
|
|
|
|
{132, "Fully Qualified PDN Connection Set Identifier (FQ-CSID)"}, /* Variable Length / 8.62 */
|
|
|
|
{133, "Channel needed"}, /* Extendable / 8.63 */
|
|
|
|
{134, "eMLPP Priority"}, /* Extendable / 8.64 */
|
|
|
|
{135, "Node Type"}, /* Extendable / 8.65 */
|
|
|
|
{136, "Fully Qualified Domain Name (FQDN)"}, /* Variable Length / 8.66 */
|
|
|
|
{137, "Transaction Identifier (TI)"}, /* Variable Length / 8.68 */
|
2012-04-25 08:39:49 +00:00
|
|
|
{138, "MBMS Session Duration"}, /* Duration Extendable / 8.69 */
|
2011-08-03 21:14:04 +00:00
|
|
|
{139, "MBMS Service Area"}, /* Extendable / 8.70 */
|
|
|
|
{140, "MBMS Session Identifier"}, /* Extendable / 8.71 */
|
|
|
|
{141, "MBMS Flow Identifier"}, /* Extendable / 8.72 */
|
|
|
|
{142, "MBMS IP Multicast Distribution"}, /* Extendable / 8.73 */
|
|
|
|
{143, "MBMS Distribution Acknowledge"}, /* Extendable / 8.74 */
|
|
|
|
{144, "RFSP Index"}, /* Fixed Length / 8.77 */
|
|
|
|
{145, "User CSG Information (UCI)"}, /* Extendable / 8.75 */
|
|
|
|
{146, "CSG Information Reporting Action"}, /* Extendable / 8.76 */
|
|
|
|
{147, "CSG ID"}, /* Extendable / 8.78 */
|
|
|
|
{148, "CSG Membership Indication (CMI)"}, /* Extendable / 8.79 */
|
|
|
|
{149, "Service indicator"}, /* Fixed Length / 8.80 */
|
|
|
|
{150, "Detach Type"}, /* Fixed Length / 8.81 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{151, "Local Distiguished Name (LDN)"}, /* Variable Length / 8.82 */
|
2011-01-03 17:22:02 +00:00
|
|
|
{152, "Node Features"}, /* Extendable / 8.83 */
|
|
|
|
{153, "MBMS Time to Data Transfer"}, /* Extendable / 8.84 */
|
|
|
|
{154, "Throttling"}, /* Extendable / 8.85 */
|
|
|
|
{155, "Allocation/Retention Priority (ARP)"}, /* Extendable / 8.86 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{156, "EPC Timer"}, /* Extendable / 8.87 */
|
|
|
|
{157, "Signalling Priority Indication"}, /* Extendable / 8.88 */
|
|
|
|
{158, "Temporary Mobile Group Identity"}, /* Extendable / 8.89 */
|
|
|
|
{159, "Additional MM context for SRVCC"}, /* Extendable / 8.90 */
|
|
|
|
{160, "Additional flags for SRVCC"}, /* Extendable / 8.91 */
|
|
|
|
{161, "Max MBR/APN-AMBR (MMBR)"}, /* Extendable / 8.92 */
|
|
|
|
{162, "MDT Configuration"}, /* Extendable / 8.93 */
|
|
|
|
{163, "Additional Protocol Configuration Options (APCO)"}, /* Extendable / 8.94 */
|
2012-04-25 08:39:49 +00:00
|
|
|
{164, "Absolute Time of MBMS Data Transfer"}, /* Extendable / 8.95 */
|
2013-03-14 19:00:40 +00:00
|
|
|
{165, "H(e)NB Information Reporting"}, /* Extendable / 8.96*/
|
|
|
|
{166, "IPv4 Configuration Parameters (IP4CP)"}, /* Extendable / 8.97*/
|
|
|
|
{167, "Change to Report Flags"}, /* Extendable / 8.98 */
|
|
|
|
{168, "Action Indication"}, /* Extendable / 8.99 */
|
|
|
|
/* 169 to 254 Spare. For future use. */ /* For future use. FFS */
|
2012-02-02 20:56:20 +00:00
|
|
|
{255, "Private Extension"}, /* Variable Length / 8.67 */
|
2009-02-10 21:57:56 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-11-26 16:50:13 +00:00
|
|
|
static value_string_ext gtpv2_element_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_element_type_vals);
|
2009-02-11 19:48:21 +00:00
|
|
|
|
|
|
|
/* Code to dissect IE's */
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_unknown(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-11 19:48:21 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2009-02-11 19:48:21 +00:00
|
|
|
}
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/*
|
2009-02-11 19:48:21 +00:00
|
|
|
* 8.3 International Mobile Subscriber Identity (IMSI)
|
|
|
|
*
|
|
|
|
* IMSI is defined in 3GPP TS 23.003
|
2009-03-04 19:51:55 +00:00
|
|
|
* Editor's note: IMSI coding will be defined in 3GPP TS 24.301
|
2010-05-10 15:54:57 +00:00
|
|
|
* Editor's note: In the first release of GTPv2 spec (TS 29.274v8.0.0) n = 8.
|
2009-02-11 19:48:21 +00:00
|
|
|
* That is, the overall length of the IE is 11 octets.
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_imsi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-11 19:48:21 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2010-09-03 17:10:52 +00:00
|
|
|
const gchar *imsi_str;
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
|
|
|
|
* a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
|
2011-01-03 17:22:02 +00:00
|
|
|
* allocated string will be returned.
|
|
|
|
*/
|
2013-09-22 20:04:35 +00:00
|
|
|
imsi_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, length, NULL, FALSE);
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_tree_add_string(tree, hf_gtpv2_imsi, tvb, offset, length, imsi_str);
|
2011-01-03 17:22:02 +00:00
|
|
|
proto_item_append_text(item, "%s", imsi_str);
|
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.4 Cause
|
|
|
|
*/
|
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
/* Table 8.4-1: Cause values */
|
|
|
|
static const value_string gtpv2_cause_vals[] = {
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, "Reserved"},
|
2013-03-14 19:00:40 +00:00
|
|
|
/* Request / Initial message */
|
|
|
|
{ 1, "Reserved"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 2, "Local Detach"},
|
|
|
|
{ 3, "Complete Detach"},
|
|
|
|
{ 4, "RAT changed from 3GPP to Non-3GPP"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 5, "ISR deactivation"},
|
|
|
|
{ 6, "Error Indication received from RNC/eNodeB/S4-SGSN"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 7, "IMSI Detach Only"},
|
|
|
|
{ 8, "Reactivation Requested"},
|
|
|
|
{ 9, "PDN reconnection to this APN disallowed"},
|
|
|
|
{ 10, "Access changed from Non-3GPP to 3GPP"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 11, "PDN connection inactivity timer expires"},
|
|
|
|
{ 12, "PGW not responding"},
|
|
|
|
{ 13, "Network Failure"},
|
|
|
|
{ 14, "QoS parameter mismatch"},
|
|
|
|
/* 15 Spare. This value range is reserved for Cause values in a request message */
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 15, "Spare"},
|
2013-03-14 19:00:40 +00:00
|
|
|
/* Acceptance in a Response / triggered message */
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 16, "Request accepted"},
|
|
|
|
{ 17, "Request accepted partially"},
|
|
|
|
{ 18, "New PDN type due to network preference"},
|
|
|
|
{ 19, "New PDN type due to single address bearer only"},
|
2013-03-14 19:00:40 +00:00
|
|
|
/* 20-63 Spare. This value range shall be used by Cause values in an acceptance response/triggered message */
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 20, "Spare"},
|
|
|
|
{ 21, "Spare"},
|
|
|
|
{ 22, "Spare"},
|
|
|
|
{ 23, "Spare"},
|
|
|
|
{ 24, "Spare"},
|
|
|
|
{ 25, "Spare"},
|
|
|
|
{ 26, "Spare"},
|
|
|
|
{ 27, "Spare"},
|
|
|
|
{ 28, "Spare"},
|
|
|
|
{ 29, "Spare"},
|
|
|
|
{ 30, "Spare"},
|
|
|
|
{ 31, "Spare"},
|
|
|
|
{ 32, "Spare"},
|
|
|
|
{ 33, "Spare"},
|
|
|
|
{ 34, "Spare"},
|
|
|
|
{ 35, "Spare"},
|
|
|
|
{ 36, "Spare"},
|
|
|
|
{ 37, "Spare"},
|
|
|
|
{ 38, "Spare"},
|
|
|
|
{ 39, "Spare"},
|
|
|
|
{ 40, "Spare"},
|
|
|
|
{ 41, "Spare"},
|
|
|
|
{ 42, "Spare"},
|
|
|
|
{ 43, "Spare"},
|
|
|
|
{ 44, "Spare"},
|
|
|
|
{ 45, "Spare"},
|
|
|
|
{ 46, "Spare"},
|
|
|
|
{ 47, "Spare"},
|
|
|
|
{ 48, "Spare"},
|
|
|
|
{ 49, "Spare"},
|
|
|
|
{ 50, "Spare"},
|
|
|
|
{ 51, "Spare"},
|
|
|
|
{ 52, "Spare"},
|
|
|
|
{ 53, "Spare"},
|
|
|
|
{ 54, "Spare"},
|
|
|
|
{ 55, "Spare"},
|
|
|
|
{ 56, "Spare"},
|
|
|
|
{ 57, "Spare"},
|
|
|
|
{ 58, "Spare"},
|
|
|
|
{ 59, "Spare"},
|
|
|
|
{ 60, "Spare"},
|
|
|
|
{ 61, "Spare"},
|
|
|
|
{ 62, "Spare"},
|
|
|
|
{ 63, "Spare"},
|
2013-03-14 19:00:40 +00:00
|
|
|
/* Rejection in a Response / triggered message */
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 64, "Context Not Found"},
|
|
|
|
{ 65, "Invalid Message Format"},
|
|
|
|
{ 66, "Version not supported by next peer"},
|
|
|
|
{ 67, "Invalid length"},
|
|
|
|
{ 68, "Service not supported"},
|
|
|
|
{ 69, "Mandatory IE incorrect"},
|
|
|
|
{ 70, "Mandatory IE missing"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 71, "Shall not be used"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 72, "System failure"},
|
|
|
|
{ 73, "No resources available"},
|
|
|
|
{ 74, "Semantic error in the TFT operation"},
|
|
|
|
{ 75, "Syntactic error in the TFT operation"},
|
|
|
|
{ 76, "Semantic errors in packet filter(s)"},
|
|
|
|
{ 77, "Syntactic errors in packet filter(s)"},
|
|
|
|
{ 78, "Missing or unknown APN"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 79, "Shall not be used"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 80, "GRE key not found"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 81, "Relocation failure"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 82, "Denied in RAT"},
|
|
|
|
{ 83, "Preferred PDN type not supported"},
|
|
|
|
{ 84, "All dynamic addresses are occupied"},
|
|
|
|
{ 85, "UE context without TFT already activated"},
|
|
|
|
{ 86, "Protocol type not supported"},
|
|
|
|
{ 87, "UE not responding"},
|
|
|
|
{ 88, "UE refuses"},
|
|
|
|
{ 89, "Service denied"},
|
|
|
|
{ 90, "Unable to page UE"},
|
|
|
|
{ 91, "No memory available"},
|
|
|
|
{ 92, "User authentication failed"},
|
|
|
|
{ 93, "APN access denied - no subscription"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 94, "Request rejected(reason not specified)"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 95, "P-TMSI Signature mismatch"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 96, "IMSI/IMEI not known"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 97, "Semantic error in the TAD operation"},
|
|
|
|
{ 98, "Syntactic error in the TAD operation"},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ 99, "Shall not be used"},
|
|
|
|
{100, "Remote peer not responding"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{101, "Collision with network initiated request"},
|
|
|
|
{102, "Unable to page UE due to Suspension"},
|
|
|
|
{103, "Conditional IE missing"},
|
|
|
|
{104, "APN Restriction type Incompatible with currently active PDN connection"},
|
2011-01-03 17:22:02 +00:00
|
|
|
{105, "Invalid overall length of the triggered response message and a piggybacked initial message"},
|
|
|
|
{106, "Data forwarding not supported"},
|
|
|
|
{107, "Invalid reply from remote peer"},
|
|
|
|
{108, "Fallback to GTPv1"},
|
|
|
|
{109, "Invalid peer"},
|
|
|
|
{110, "Temporarily rejected due to handover procedure in progress"},
|
|
|
|
{111, "Modifications not limited to S1-U bearers"},
|
|
|
|
{112, "Request rejected for a PMIPv6 reason "},
|
2013-03-14 19:00:40 +00:00
|
|
|
{113, "APN Congestion"},
|
|
|
|
{114, "Bearer handling not supported"},
|
|
|
|
{115, "UE already re-attached"},
|
|
|
|
{116, "Multiple PDN connections for a given APN not allowed"},
|
|
|
|
/* 117-239 Spare. For future use in a triggered/response message */
|
2011-01-03 17:22:02 +00:00
|
|
|
/* 240-255 Spare. For future use in an initial/request message */
|
2009-02-11 19:48:21 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-10-29 16:02:51 +00:00
|
|
|
value_string_ext gtpv2_cause_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_cause_vals);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
/* Table 8.4-1: CS (Cause Source) */
|
2011-01-04 07:14:11 +00:00
|
|
|
static const true_false_string gtpv2_cause_cs = {
|
2011-08-03 21:14:04 +00:00
|
|
|
"Originated by remote node",
|
|
|
|
"Originated by node sending the message",
|
2010-12-30 14:09:09 +00:00
|
|
|
};
|
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-11 19:48:21 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 tmp;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Cause value octet 5 */
|
2011-01-03 17:22:02 +00:00
|
|
|
tmp = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
/* Add Cause to ie_tree */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(tmp, >pv2_cause_vals_ext, "Unknown"), tmp);
|
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
/* Octet 6 Spare PCE BCE CS */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause_pce, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause_bce, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause_cs, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* If n = 2, a = 0 and the Cause IE shall be 6 octets long.
|
|
|
|
* Therefore, octets "a(n+1) to a(n+4)" will not be present.
|
|
|
|
* If n = 6, a = 1 and the Cause IE will be 10 octets long.
|
|
|
|
*/
|
|
|
|
if ( length == 2 ) {
|
2011-01-03 17:22:02 +00:00
|
|
|
return;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-08-03 21:14:04 +00:00
|
|
|
/*
|
|
|
|
* If the rejection is due to a mandatory IE or a verifiable conditional IE is faulty
|
|
|
|
* or missing, the offending IE shall be included within an additional field "a(n+1)
|
|
|
|
* to a(n+4)". Only Type and Instance fields of the offending IE that caused the
|
|
|
|
* rejection have a meaning. The length in the Octet 8-9 and spare bits in the Octet 10
|
|
|
|
* shall be set to "0". In this case, the value of "n" shall be "6".
|
|
|
|
* Otherwise, the value of "n" is equal to "2".
|
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
/* Type of the offending IE */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause_off_ie_t, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
/* Length */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2011-01-03 17:22:02 +00:00
|
|
|
/* a(n+4) Spare Instance */
|
2012-12-11 09:39:15 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_half_octet, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
|
|
|
* 8.5 Recovery (Restart Counter)
|
|
|
|
*/
|
2009-02-16 21:21:11 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_recovery(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-16 21:21:11 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 recovery;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
recovery = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_rec, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_item_append_text(item, "%u", recovery);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/*Start SRVCC Messages*/
|
|
|
|
|
|
|
|
/* 6.2 STN-SR */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_stn_sr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2011-08-03 18:38:23 +00:00
|
|
|
proto_item *stn_sr_item;
|
2011-08-02 19:29:51 +00:00
|
|
|
proto_tree *sub_tree;
|
|
|
|
tvbuff_t *new_tvb;
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-10-04 22:44:31 +00:00
|
|
|
stn_sr_item = proto_tree_add_item(tree, hf_gtpv2_stn_sr, tvb, offset, length, ENC_NA);
|
2011-08-02 19:29:51 +00:00
|
|
|
new_tvb = tvb_new_subset(tvb, offset, length, length );
|
2011-08-03 18:38:23 +00:00
|
|
|
sub_tree = proto_item_add_subtree(stn_sr_item, ett_gtpv2_stn_sr);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-02 19:29:51 +00:00
|
|
|
/* Octet 5
|
2011-07-30 14:05:31 +00:00
|
|
|
* contains the Nature of Address and Numbering Plan Indicator (NANPI) of the "AddressString" ASN.1 type (see 3GPP
|
|
|
|
* TS 29.002 [11]). Octets 6 to (n+4) contain the actual STN-SR (digits of an address encoded as a TBCD-STRING as in
|
|
|
|
* the "AddressString" ASN.1 type). For an odd number of STN-SR digits, bits 8 to 5 of the last octet are encoded with the
|
|
|
|
* filler "1111".
|
2011-08-02 19:29:51 +00:00
|
|
|
*/
|
|
|
|
dissect_gsm_map_msisdn(new_tvb, pinfo, sub_tree);
|
2011-07-30 14:05:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.3 Source to Target Transparent Container */
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_src_tgt_trans_con(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-07-30 14:05:31 +00:00
|
|
|
/*ra_type_flag = 0;*/
|
|
|
|
|
2011-08-03 20:31:51 +00:00
|
|
|
/* Transparent Container
|
2011-07-30 14:05:31 +00:00
|
|
|
* When target network is GERAN, this container carries the Old BSS to New BSS
|
|
|
|
* Information IE defined in 3GPP TS 48.008 [8]. When target network is UTRAN, this container carries the Source RNC
|
|
|
|
* to Target RNC Transparent Container IE defined in 3GPP TS 25.413 [9]. The Transparent container field includes the
|
|
|
|
* IE value part as it is specified in the respective specification.
|
2011-08-03 21:14:04 +00:00
|
|
|
*/
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Transparent Container: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2011-08-03 21:14:04 +00:00
|
|
|
/*
|
|
|
|
* bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
|
|
|
|
* dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU
|
|
|
|
*/
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.4 Target to Source Transparent Container */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tgt_src_trans_con(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/* Transparent Container */
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Transparent Container: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.5 MM Context for E-UTRAN SRVCC */
|
|
|
|
static void
|
2011-08-19 12:15:54 +00:00
|
|
|
dissect_gtpv2_mm_con_eutran_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
proto_tree *ms_tree, *fi;
|
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_eksi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset , 16, "CKsrvcc: %s ", tvb_bytes_to_ep_str(tvb, offset, 16));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 16, "IKsrvcc: %s ", tvb_bytes_to_ep_str(tvb, offset, 16));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2011-08-03 20:31:51 +00:00
|
|
|
|
2011-07-30 14:05:31 +00:00
|
|
|
/* Length of Mobile Station Classmark2 */
|
2011-08-19 12:02:49 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
|
2011-08-19 12:02:49 +00:00
|
|
|
de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/* Length of Mobile Station Classmark3 */
|
2011-08-19 12:02:49 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
|
2011-08-19 12:02:49 +00:00
|
|
|
de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-12-14 00:06:16 +00:00
|
|
|
/*Length of Supported Codec List */
|
2011-08-19 12:02:49 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
|
2011-08-19 12:02:49 +00:00
|
|
|
de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.6 MM Context for UTRAN SRVCC */
|
|
|
|
static void
|
2011-08-24 15:35:32 +00:00
|
|
|
dissect_gtpv2_mm_con_utran_srvcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
proto_tree *ms_tree, *fi;
|
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ksi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 16, "CK'cs: %s", tvb_bytes_to_ep_str(tvb, offset, 16));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 16, "IK'cs: %s", tvb_bytes_to_ep_str(tvb, offset, 16));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 8, "Kc': %s", tvb_bytes_to_ep_str(tvb, offset, 8));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 8;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cksn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/*Length of Mobile Station Classmark2 */
|
2011-08-24 15:22:29 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
|
2011-08-24 15:22:29 +00:00
|
|
|
de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/*Length of Mobile Station Classmark3 */
|
2011-08-24 15:22:29 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
|
2011-08-24 15:22:29 +00:00
|
|
|
de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/*Length of Supported Codec List */
|
2011-08-24 15:22:29 +00:00
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2011-07-30 14:05:31 +00:00
|
|
|
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
|
2011-08-24 15:22:29 +00:00
|
|
|
de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.7 SRVCC Cause */
|
|
|
|
static const value_string gtpv2_srvcc_cause_vals[] = {
|
|
|
|
{0, "Reserved"},
|
|
|
|
{1, "Unspecified"},
|
|
|
|
{2, "Handover/Relocation cancelled by source system "},
|
|
|
|
{3, "Handover /Relocation Failure with Target system"},
|
|
|
|
{4, "Handover/Relocation Target not allowed"},
|
|
|
|
{5, "Unknown Target ID"},
|
|
|
|
{6, "Target Cell not available"},
|
|
|
|
{7, "No Radio Resources Available in Target Cell"},
|
|
|
|
{8, "Failure in Radio Interface Procedure"},
|
2014-02-13 19:29:20 +00:00
|
|
|
{9, "Permanent session leg establishment error"},
|
|
|
|
{10, "Temporary session leg establishment error"},
|
|
|
|
|
2011-07-30 14:05:31 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
static value_string_ext gtpv2_srvcc_cause_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_srvcc_cause_vals);
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_srvcc_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 srvcc_cause;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2012-02-06 22:12:11 +00:00
|
|
|
srvcc_cause = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_srvcc_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(srvcc_cause, >pv2_srvcc_cause_vals_ext, "Unknown"), srvcc_cause);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-01-29 14:31:21 +00:00
|
|
|
/*
|
2012-12-07 14:41:05 +00:00
|
|
|
* 3GPP TS 29.280 version 10.3.0
|
|
|
|
* 6.8 Target RNC ID
|
|
|
|
*/
|
2011-07-30 14:05:31 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tgt_rnc_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-12-07 14:41:05 +00:00
|
|
|
guint16 rnc_id;
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree *subtree;
|
|
|
|
proto_item *rai_item;
|
|
|
|
guint32 mcc;
|
|
|
|
guint32 mnc;
|
|
|
|
guint32 lac;
|
|
|
|
guint32 curr_offset;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/*ra_type_flag = 1;*/ /*Flag to be set to differentiate GERAN and UTRAN*/
|
|
|
|
curr_offset = offset;
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
mcc = (tvb_get_guint8(tvb, curr_offset) & 0x0f) << 8;
|
|
|
|
mcc |= (tvb_get_guint8(tvb, curr_offset) & 0xf0);
|
2011-07-30 14:05:31 +00:00
|
|
|
mcc |= (tvb_get_guint8(tvb, curr_offset+1) & 0x0f);
|
2012-11-26 16:50:13 +00:00
|
|
|
mnc = (tvb_get_guint8(tvb, curr_offset+2) & 0x0f) << 8;
|
2011-07-30 14:05:31 +00:00
|
|
|
mnc |= (tvb_get_guint8(tvb, curr_offset+2) & 0xf0);
|
2012-11-26 16:50:13 +00:00
|
|
|
mnc |= (tvb_get_guint8(tvb, curr_offset+1) & 0xf0) >> 4;
|
|
|
|
if ((mnc & 0x000f) == 0x000f)
|
|
|
|
mnc = mnc >> 4;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, curr_offset + 3);
|
2012-12-07 14:41:05 +00:00
|
|
|
rnc_id = tvb_get_ntohs(tvb, curr_offset + 5);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 20:31:51 +00:00
|
|
|
rai_item = proto_tree_add_text(tree,
|
|
|
|
tvb, curr_offset, 6,
|
|
|
|
"Routing area identification: %x-%x-%u-%u",
|
2012-11-26 16:50:13 +00:00
|
|
|
mcc, mnc, lac, rnc_id);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 20:31:51 +00:00
|
|
|
subtree = proto_item_add_subtree(rai_item, ett_gtpv2_rai);
|
2011-07-30 14:05:31 +00:00
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
|
2013-01-27 18:58:52 +00:00
|
|
|
curr_offset+=3;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2012-12-07 14:41:05 +00:00
|
|
|
proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
|
2013-01-27 18:58:52 +00:00
|
|
|
curr_offset+=2;
|
2012-12-07 14:41:05 +00:00
|
|
|
proto_tree_add_item(subtree, hf_gtpv2_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
|
2013-01-27 18:58:52 +00:00
|
|
|
/*curr_offset+=2;*/
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/* no length check possible */
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
/*
|
2012-11-23 12:00:21 +00:00
|
|
|
* 3GPP TS 29.280
|
|
|
|
* 6.9 Target Global Cell ID
|
|
|
|
* The encoding of this IE is defined in 3GPP TS 29.002
|
|
|
|
* GlobalCellId ::= OCTET STRING (SIZE (5..7))
|
2012-11-26 16:50:13 +00:00
|
|
|
* -- Refers to Cell Global Identification defined in TS 3GPP TS 23.003 [17].
|
|
|
|
* -- The internal structure is defined as follows:
|
|
|
|
* -- octet 1 bits 4321 Mobile Country Code 1st digit
|
|
|
|
* -- bits 8765 Mobile Country Code 2nd digit
|
|
|
|
* -- octet 2 bits 4321 Mobile Country Code 3rd digit
|
|
|
|
* -- bits 8765 Mobile Network Code 3rd digit
|
|
|
|
* -- or filler (1111) for 2 digit MNCs
|
|
|
|
* -- octet 3 bits 4321 Mobile Network Code 1st digit
|
|
|
|
* -- bits 8765 Mobile Network Code 2nd digit
|
|
|
|
* -- octets 4 and 5 Location Area Code according to TS 3GPP TS 24.008 [35]
|
|
|
|
* -- octets 6 and 7 Cell Identity (CI) according to TS 3GPP TS 24.008 [35]
|
2012-11-23 12:00:21 +00:00
|
|
|
*/
|
2011-07-30 14:05:31 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tgt_global_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 tgt_cell_id;
|
|
|
|
proto_tree *subtree;
|
|
|
|
proto_item *rai_item;
|
|
|
|
guint32 mcc;
|
|
|
|
guint32 mnc;
|
|
|
|
guint32 lac;
|
|
|
|
guint32 curr_offset;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
curr_offset = offset;
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
mcc = (tvb_get_guint8(tvb, curr_offset) & 0x0f) << 8;
|
|
|
|
mcc |= (tvb_get_guint8(tvb, curr_offset) & 0xf0);
|
2011-07-30 14:05:31 +00:00
|
|
|
mcc |= (tvb_get_guint8(tvb, curr_offset+1) & 0x0f);
|
2012-11-26 16:50:13 +00:00
|
|
|
mnc = (tvb_get_guint8(tvb, curr_offset+2) & 0x0f) << 8;
|
2011-07-30 14:05:31 +00:00
|
|
|
mnc |= (tvb_get_guint8(tvb, curr_offset+2) & 0xf0);
|
2012-11-26 16:50:13 +00:00
|
|
|
mnc |= (tvb_get_guint8(tvb, curr_offset+1) & 0xf0) >> 4;
|
|
|
|
if ((mnc & 0x000f) == 0x000f)
|
|
|
|
mnc = mnc >> 4;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, curr_offset + 3);
|
|
|
|
tgt_cell_id = tvb_get_guint8(tvb, curr_offset + 5);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 20:31:51 +00:00
|
|
|
rai_item = proto_tree_add_text(tree,
|
|
|
|
tvb, curr_offset, 6,
|
|
|
|
"Routing area identification: %x-%x-%u-%u",
|
2012-11-26 16:50:13 +00:00
|
|
|
mcc, mnc, lac, tgt_cell_id);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 20:31:51 +00:00
|
|
|
subtree = proto_item_add_subtree(rai_item, ett_gtpv2_rai);
|
2011-07-30 14:05:31 +00:00
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset + 3, 2, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(subtree, hf_gtpv2_tgt_g_cell_id, tvb, curr_offset + 5, 2, ENC_BIG_ENDIAN);
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%x-%x-%u-%u", mcc, mnc, lac, tgt_cell_id);
|
2011-07-30 14:05:31 +00:00
|
|
|
/* no length check possible */
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.10 Tunnel Endpoint Identifier for Control Plane (TEID-C) */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_teid_c(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_teid_c, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
|
|
|
if (length > 4)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-4, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-4));
|
2012-11-23 12:00:21 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%u", tvb_get_ntohl(tvb, offset-4));
|
2011-07-30 14:05:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.11 Sv Flags */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_sv_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sv_sti, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sv_ics, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sv_emind, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2011-07-30 14:05:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 6.12 Service Area Identifier */
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_sai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-07-30 14:05:31 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
|
|
|
/* 5 MCC digit 2 MCC digit 1
|
|
|
|
* 6 MNC digit 3 MCC digit 3
|
|
|
|
* 7 MNC digit 2 MNC digit 1
|
|
|
|
*/
|
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The Location Area Code (LAC) consists of 2 octets. Bit 8 of Octet 8 is the most significant bit and bit 1 of Octet 9 the
|
2011-07-30 14:05:31 +00:00
|
|
|
* least significant bit. The coding of the location area code is the responsibility of each administration. Coding using full
|
|
|
|
* hexadecimal representation shall be used.
|
2011-08-03 21:14:04 +00:00
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2011-07-30 14:05:31 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The Service Area Code (SAC) consists of 2 octets. Bit 8 of Octet 10 is the most significant bit and bit 1 of Octet 11 the
|
2011-07-30 14:05:31 +00:00
|
|
|
* least significant bit. The SAC is defined by the operator. See 3GPP TS 23.003 [4] subclause 12.5 for more information
|
2011-08-03 21:14:04 +00:00
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2011-07-30 14:05:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*End SRVCC Messages*/
|
|
|
|
|
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
|
|
|
* 8.6 Access Point Name (APN)
|
2011-01-14 03:44:58 +00:00
|
|
|
* The encoding the APN field follows 3GPP TS 23.003 [2] subclause 9.1.
|
2011-01-12 16:43:59 +00:00
|
|
|
* The content of the APN field shall be the full APN with both the APN Network Identifier
|
2011-01-14 03:44:58 +00:00
|
|
|
* and APN Operator Identifier being present as specified in 3GPP TS 23.003 [2]
|
|
|
|
* subclauses 9.1.1 and 9.1.2, 3GPP TS 23.060 [35] Annex A and 3GPP TS 23.401 [3] subclauses 4.3.8.1.
|
2009-02-13 06:10:57 +00:00
|
|
|
*/
|
2009-02-16 21:21:11 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_apn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-16 21:21:11 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 *apn = NULL;
|
|
|
|
int name_len, tmp;
|
2009-02-16 21:21:11 +00:00
|
|
|
|
|
|
|
if (length > 0) {
|
2010-05-10 15:54:57 +00:00
|
|
|
name_len = tvb_get_guint8(tvb, offset);
|
|
|
|
|
|
|
|
if (name_len < 0x20) {
|
2013-09-22 15:50:55 +00:00
|
|
|
apn = tvb_get_string(wmem_packet_scope(), tvb, offset + 1, length - 1);
|
2010-05-10 15:54:57 +00:00
|
|
|
for (;;) {
|
|
|
|
if (name_len >= length - 1)
|
2011-12-14 00:06:16 +00:00
|
|
|
break;
|
2010-05-10 15:54:57 +00:00
|
|
|
tmp = name_len;
|
|
|
|
name_len = name_len + apn[tmp] + 1;
|
|
|
|
apn[tmp] = '.';
|
|
|
|
}
|
|
|
|
} else{
|
2013-09-22 15:50:55 +00:00
|
|
|
apn = tvb_get_string(wmem_packet_scope(), tvb, offset, length);
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
|
|
|
proto_tree_add_string(tree, hf_gtpv2_apn, tvb, offset, length, apn);
|
2009-02-16 21:21:11 +00:00
|
|
|
}
|
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
if (apn)
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item_append_text(item, "%s", apn);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.7 Aggregate Maximum Bit Rate (AMBR)
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ambr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ambr_up, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ambr_down, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/*
|
2009-02-13 06:10:57 +00:00
|
|
|
* 8.8 EPS Bearer ID (EBI)
|
2009-02-16 21:21:11 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ebi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-16 21:21:11 +00:00
|
|
|
{
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 ebi;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Spare (all bits set to 0) B8 - B5*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
/* EPS Bearer ID (EBI) B4 - B1 */
|
2011-04-21 18:09:13 +00:00
|
|
|
ebi = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_item_append_text(item, "%u", ebi);
|
2009-02-16 21:21:11 +00:00
|
|
|
|
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.9 IP Address
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ip_address(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-11-26 16:50:13 +00:00
|
|
|
struct e_in6_addr ipv6_address;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length == 4)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv4, tvb, offset, length, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item_append_text(item, "IPv4 %s", tvb_ip_to_str(tvb, offset));
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
else if (length == 16)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2011-10-10 00:39:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv6, tvb, offset, length, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
tvb_get_ipv6(tvb, offset, &ipv6_address);
|
|
|
|
proto_item_append_text(item, "IPv6 %s", ip6_to_str(&ipv6_address));
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.10 Mobile Equipment Identity (MEI)
|
2011-01-04 18:41:25 +00:00
|
|
|
* The ME Identity field contains either the IMEI or the IMEISV
|
2011-01-03 17:22:02 +00:00
|
|
|
* as defined in clause 6.2 of 3GPP TS 23.003 [2]. It is encoded
|
|
|
|
* as specified in clause 7.7.53 of 3GPP TS 29.060 [4], beginning
|
|
|
|
* with octet 4 of Figure 7.7.53.1. The IMEI(SV) digits are encoded
|
|
|
|
* using BCD coding where IMEI is 15 BCD digits and IMEISV is 16 BCD
|
2011-01-04 18:41:25 +00:00
|
|
|
* digits. For IMEI, bits 5 to 8 of the last octet shall be filled
|
2011-01-03 17:22:02 +00:00
|
|
|
* with an end mark coded as '1111'.
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-01-03 17:22:02 +00:00
|
|
|
const gchar *mei_str;
|
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
|
|
|
|
* a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
|
2011-01-03 17:22:02 +00:00
|
|
|
* allocated string will be returned.
|
|
|
|
*/
|
2013-09-22 20:04:35 +00:00
|
|
|
mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, 0, length, NULL, FALSE);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_tree_add_string(tree, hf_gtpv2_mei, tvb, offset, length, mei_str);
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_item_append_text(item, "%s", mei_str);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
2009-02-11 19:48:21 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 8.11 MSISDN
|
|
|
|
*
|
|
|
|
* MSISDN is defined in 3GPP TS 23.003
|
2009-03-04 19:51:55 +00:00
|
|
|
* Editor's note: MSISDN coding will be defined in TS 24.301.
|
2009-02-11 19:48:21 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-11 19:48:21 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
const char *digit_str;
|
2010-04-05 07:37:04 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Octets 5 to (n+4) represent the MSISDN value is in international number format
|
|
|
|
* as described in ITU-T Rec E.164 [25] and 3GPP TS 29.002 [41].
|
|
|
|
* MSISDN value contains only the actual MSISDN number (does not contain the "nature of
|
|
|
|
* address indicator" octet, which indicates "international number"
|
|
|
|
* as in 3GPP TS 29.002 [41]) and is encoded as TBCD digits, i.e.
|
|
|
|
* digits from 0 through 9 are encoded "0000" to "1001".
|
|
|
|
* When there is an odd number of digits, bits 8 to 5 of the last octet are encoded with
|
|
|
|
* the filler "1111".
|
|
|
|
*/
|
2010-05-10 15:54:57 +00:00
|
|
|
dissect_e164_cc(tvb, tree, 0, TRUE);
|
2011-01-04 18:41:25 +00:00
|
|
|
/* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
|
|
|
|
* a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
|
2011-01-03 17:22:02 +00:00
|
|
|
* allocated string will be returned.
|
|
|
|
*/
|
2013-09-22 20:04:35 +00:00
|
|
|
digit_str = tvb_bcd_dig_to_wmem_packet_str( tvb, 0, length, NULL, FALSE);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
proto_tree_add_string(tree, hf_gtpv2_address_digits, tvb, 0, length, digit_str);
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_item_append_text(item, "%s", digit_str);
|
2009-02-11 19:48:21 +00:00
|
|
|
}
|
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
|
|
|
* 8.12 Indication
|
2009-02-16 21:21:11 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-16 21:21:11 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Octet 5 DAF DTF HI DFI OI ISRSI ISRAI SGWCI */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_daf, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_dtf, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_hi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_dfi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_oi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_isrsi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_israi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sgwci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length == 1) {
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_tree_add_text(tree, tvb, 0, length, "Older version?, should be 2 octets in 8.0.0");
|
|
|
|
return;
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Octet 6 SQCI UIMSI CFSI CRSI P PT SI MSV
|
|
|
|
* 3GPP TS 29.274 version 9.4.0 Release 9
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sqci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2013-08-20 05:04:45 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_uimsi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cfsi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_crsi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ps, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pt, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_si, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_msv, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-07-30 09:33:10 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length == 2) {
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* Only present in version 9 and higher */
|
|
|
|
/* Octet 7 Spare Spare Spare Spare Spare Spare Spare CCRSI */
|
2013-08-20 05:04:45 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_spare1, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_spare2, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_spare3, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_s6af, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_s4af, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbmdt, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_israu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ccrsi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
|
2011-02-11 21:21:45 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
/*
|
|
|
|
* 8.13 Protocol Configuration Options (PCO)
|
2011-01-03 22:13:11 +00:00
|
|
|
* Protocol Configuration Options (PCO) is transferred via GTP tunnels. The sending entity copies the value part of the
|
|
|
|
* PCO into the Value field of the PCO IE. The detailed coding of the PCO field from octets 5 to (n+4) shall be specified
|
|
|
|
* as per clause 10.5.6.3 of 3GPP TS 24.008 [5], starting with octet 3.
|
2009-08-20 07:26:16 +00:00
|
|
|
* Dissected in packet-gsm_a_gm.c
|
2009-02-16 21:21:11 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_pco(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-16 21:21:11 +00:00
|
|
|
{
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (message_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case GTPV2_CREATE_SESSION_REQUEST:
|
|
|
|
/* PCO options as MS to network direction */
|
|
|
|
pinfo->link_dir = P2P_DIR_UL;
|
|
|
|
break;
|
|
|
|
case GTPV2_CREATE_SESSION_RESPONSE:
|
|
|
|
/* PCO options as Network to MS direction: */
|
|
|
|
pinfo->link_dir = P2P_DIR_DL;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-04-04 14:37:25 +00:00
|
|
|
de_sm_pco(tvb, tree, pinfo, 0, length, NULL, 0);
|
2009-02-16 21:21:11 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-16 21:21:11 +00:00
|
|
|
/*
|
2009-03-01 20:39:44 +00:00
|
|
|
* 8.14 PDN Address Allocation (PAA)
|
|
|
|
*/
|
|
|
|
|
|
|
|
static const value_string gtpv2_pdn_type_vals[] = {
|
|
|
|
{1, "IPv4"},
|
|
|
|
{2, "IPv6"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{3, "IPv4/IPv6"},
|
2009-03-01 20:39:44 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
2011-04-21 18:09:13 +00:00
|
|
|
dissect_gtpv2_paa(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2010-05-10 15:54:57 +00:00
|
|
|
guint8 pdn_type;
|
2012-05-07 22:11:34 +00:00
|
|
|
|
|
|
|
pdn_type = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
|
|
|
switch (pdn_type)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
/* IPv4 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
/* IPv6*/
|
2011-08-03 21:14:04 +00:00
|
|
|
/* If PDN type value indicates IPv6, octet 6 contains the IPv6 Prefix Length.
|
|
|
|
* Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
|
|
|
|
* Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
|
|
|
|
* and Interface Identifier and bit 1 of octet 22 the least significant bit.
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-10-04 22:44:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA);
|
2010-05-10 15:54:57 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
/* IPv4/IPv6 */
|
2011-08-03 21:14:04 +00:00
|
|
|
/* If PDN type value indicates IPv4v6, octet 6 contains the IPv6 Prefix Length.
|
|
|
|
* Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
|
|
|
|
* Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
|
|
|
|
* and Interface Identifier and bit 1 of octet 22 the least significant bit.
|
|
|
|
* Octets 23 through 26 contain an IPv4 address. Bit 8 of octet 23 represents
|
|
|
|
* the most significant bit of the IPv4 address and bit 1 of octet 26 the least
|
|
|
|
* significant bit.
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-10-04 22:44:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
|
|
|
/*
|
2009-02-13 06:10:57 +00:00
|
|
|
* 8.15 Bearer Quality of Service (Bearer QoS)
|
2009-03-01 20:39:44 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_bearer_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pvi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pl, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN);
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-03-01 20:39:44 +00:00
|
|
|
/*
|
2009-02-13 06:10:57 +00:00
|
|
|
* 8.16 Flow Quality of Service (Flow QoS)
|
|
|
|
*/
|
2009-03-01 20:39:44 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_flow_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_flow_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN);
|
|
|
|
offset += 5;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN);
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
|
|
|
* 8.17 RAT Type
|
|
|
|
*/
|
|
|
|
static const value_string gtpv2_rat_type_vals[] = {
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, "Reserved"},
|
|
|
|
{1, "UTRAN"},
|
|
|
|
{2, "GERAN"},
|
|
|
|
{3, "WLAN"},
|
|
|
|
{4, "GAN"},
|
|
|
|
{5, "HSPA Evolution"},
|
|
|
|
{6, "EUTRAN"},
|
2011-01-03 17:22:02 +00:00
|
|
|
{7, "Virtual"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, NULL}
|
2009-02-13 06:10:57 +00:00
|
|
|
};
|
2011-01-03 17:22:02 +00:00
|
|
|
static value_string_ext gtpv2_rat_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_rat_type_vals);
|
|
|
|
|
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_rat_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-13 06:10:57 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
guint8 rat_type;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
rat_type = tvb_get_guint8(tvb, 0);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_rat_type, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(rat_type, >pv2_rat_type_vals_ext, "Unknown"), rat_type);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
|
|
|
* 8.18 Serving Network
|
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_serv_net(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-13 06:10:57 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
gchar *mcc_mnc_str;
|
2011-01-04 16:58:55 +00:00
|
|
|
|
2013-09-21 11:08:35 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s", mcc_mnc_str);
|
2009-02-13 06:10:57 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
2010-06-01 22:23:22 +00:00
|
|
|
* 8.19 EPS Bearer Level Traffic Flow Template (Bearer TFT)
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_bearer_tft(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The detailed coding of Traffic Aggregate
|
|
|
|
* Description is specified in 3GPP TS 24.008 [5] ,
|
|
|
|
* clause 10.5.6.12, beginning with octet 3..
|
|
|
|
* Use the decoding in packet-gsm_a_gm.c
|
|
|
|
*/
|
|
|
|
de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL, 0);
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
}
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 8.20 Traffic Aggregate Description (TAD)
|
2009-03-01 20:39:44 +00:00
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The detailed coding of Traffic Aggregate
|
|
|
|
* Description is specified in 3GPP TS 24.008 [5] ,
|
|
|
|
* clause 10.5.6.12, beginning with octet 3..
|
|
|
|
* Use the decoding in packet-gsm_a_gm.c
|
|
|
|
*/
|
|
|
|
de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL, 0);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
2010-06-01 22:22:09 +00:00
|
|
|
|
2009-03-01 20:39:44 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.21 User Location Info (ULI)
|
2009-03-01 20:39:44 +00:00
|
|
|
*
|
|
|
|
* The flags ECGI, TAI, RAI, SAI and CGI in octed 5 indicate if the corresponding
|
2010-05-10 15:54:57 +00:00
|
|
|
* fields are present in the IE or not. If one of these flags is set to "0",
|
2009-03-01 20:39:44 +00:00
|
|
|
* the corresponding field is not present at all. The respective identities are defined in 3GPP
|
|
|
|
* TS 23.003 [2].
|
2010-05-10 15:54:57 +00:00
|
|
|
* Editor's Note: The definition of ECGI is missing in 3GPP TS 23.003 v8.1.0.
|
2009-03-01 20:39:44 +00:00
|
|
|
* It can be found in 3GPP TS 36.413 v8.3.0, but it is expected that it will be moved
|
|
|
|
* to 23.003 in a future version.
|
|
|
|
*/
|
|
|
|
|
2014-03-17 12:52:41 +00:00
|
|
|
static gchar*
|
2011-08-03 20:31:51 +00:00
|
|
|
decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 instance _U_, guint flags)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 1; /* flags are already dissected */
|
|
|
|
proto_item *fi;
|
|
|
|
proto_tree *part_tree;
|
2014-03-17 12:52:41 +00:00
|
|
|
gchar *mcc_mnc_str;
|
|
|
|
gchar *str = NULL;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2011-01-12 16:43:59 +00:00
|
|
|
/* 8.21.1 CGI field */
|
2010-06-08 08:36:22 +00:00
|
|
|
if (flags & GTPv2_ULI_CGI_MASK)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
guint16 lac, ci;
|
|
|
|
|
2011-01-04 16:58:55 +00:00
|
|
|
proto_item_append_text(item, "CGI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 7, "Cell Global Identity (CGI)");
|
2011-08-03 21:14:04 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2014-03-17 12:52:41 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_cgi_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
ci = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_cgi_ci, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, LAC 0x%x, CI 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
lac,
|
|
|
|
ci);
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == length)
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
|
|
|
|
2011-01-12 16:43:59 +00:00
|
|
|
/* 8.21.2 SAI field */
|
2010-06-08 08:36:22 +00:00
|
|
|
if (flags & GTPv2_ULI_SAI_MASK)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
guint16 lac, sac;
|
|
|
|
|
2011-01-04 16:58:55 +00:00
|
|
|
proto_item_append_text(item, "SAI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 7, "Service Area Identity (SAI)");
|
2011-01-03 22:13:11 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2014-03-17 12:52:41 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_sai_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-12-16 08:58:46 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
sac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_sai_sac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-12-16 08:58:46 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, LAC 0x%x, SAC 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
lac,
|
|
|
|
sac);
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == length)
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2011-01-12 16:43:59 +00:00
|
|
|
/* 8.21.3 RAI field */
|
2010-06-08 08:36:22 +00:00
|
|
|
if (flags & GTPv2_ULI_RAI_MASK)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
guint16 lac, rac;
|
2011-01-04 16:58:55 +00:00
|
|
|
proto_item_append_text(item, "RAI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 7, "Routeing Area Identity (RAI)");
|
2011-01-03 22:13:11 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2014-03-17 12:52:41 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_rai_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-12-16 08:58:46 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
rac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_rai_rac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-12-16 08:58:46 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, LAC 0x%x, RAC 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
lac,
|
|
|
|
rac);
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == length)
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2011-01-12 16:43:59 +00:00
|
|
|
/* 8.21.4 TAI field */
|
2010-06-08 08:36:22 +00:00
|
|
|
if (flags & GTPv2_ULI_TAI_MASK)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
guint16 tac;
|
2011-01-04 16:58:55 +00:00
|
|
|
proto_item_append_text(item, "TAI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 5, "Tracking Area Identity (TAI)");
|
2011-01-03 22:13:11 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2014-03-17 12:52:41 +00:00
|
|
|
tac = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_tai_tac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2014-03-17 12:52:41 +00:00
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, TAC 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
tac);
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == length)
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2011-01-12 16:43:59 +00:00
|
|
|
/* 8.21.5 ECGI field */
|
2010-06-08 08:36:22 +00:00
|
|
|
if (flags & GTPv2_ULI_ECGI_MASK)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2010-06-08 08:36:22 +00:00
|
|
|
guint8 octet;
|
|
|
|
guint32 octet4;
|
|
|
|
guint8 spare;
|
|
|
|
guint32 ECGI;
|
2011-01-03 22:13:11 +00:00
|
|
|
|
2011-01-04 16:58:55 +00:00
|
|
|
proto_item_append_text(item, "ECGI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 7, "E-UTRAN Cell Global Identifier (ECGI)");
|
2011-01-03 22:13:11 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2010-05-10 15:54:57 +00:00
|
|
|
/* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare
|
2011-01-04 18:41:25 +00:00
|
|
|
* and hence they would not make any difference to the hex string following it,
|
2011-08-03 21:14:04 +00:00
|
|
|
* thus we directly read 4 bytes from the tvb
|
|
|
|
*/
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
octet = tvb_get_guint8(tvb, offset);
|
2010-06-08 08:36:22 +00:00
|
|
|
spare = octet & 0xF0;
|
2012-11-26 16:50:13 +00:00
|
|
|
octet4 = tvb_get_ntohl(tvb, offset);
|
2010-06-08 08:36:22 +00:00
|
|
|
ECGI = octet4 & 0x0FFFFFFF;
|
2011-01-03 22:13:11 +00:00
|
|
|
proto_tree_add_uint(part_tree, hf_gtpv2_uli_ecgi_eci_spare, tvb, offset, 1, spare);
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The coding of the E-UTRAN cell identifier is the responsibility of each administration.
|
|
|
|
* Coding using full hexadecimal representation shall be used.
|
|
|
|
*/
|
2011-01-03 22:13:11 +00:00
|
|
|
proto_tree_add_uint(part_tree, hf_gtpv2_uli_ecgi_eci, tvb, offset, 4, ECGI);
|
2011-08-26 05:54:00 +00:00
|
|
|
/*proto_tree_add_item(tree, hf_gtpv2_uli_ecgi_eci, tvb, offset, 4, ENC_BIG_ENDIAN);*/
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2014-03-17 12:52:41 +00:00
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, ECGI 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
ECGI);
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == length)
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
|
|
|
}
|
2011-08-03 21:14:04 +00:00
|
|
|
/* 8.21.6 LAI field */
|
2011-01-12 16:43:59 +00:00
|
|
|
if (flags & GTPv2_ULI_LAI_MASK)
|
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
guint16 lac;
|
2011-01-12 16:43:59 +00:00
|
|
|
proto_item_append_text(item, "LAI ");
|
2013-01-14 18:29:27 +00:00
|
|
|
fi = proto_tree_add_text(tree, tvb, offset, 5, "LAI (Location Area Identifier)");
|
2011-01-12 16:43:59 +00:00
|
|
|
part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
|
2014-03-17 12:52:41 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2011-01-12 16:43:59 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The Location Area Code (LAC) consists of 2 octets. Bit 8 of Octet f+3 is the most significant bit
|
|
|
|
* and bit 1 of Octet f+4 the least significant bit. The coding of the location area code is the
|
|
|
|
* responsibility of each administration. Coding using full hexadecimal representation shall be used.
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(part_tree, hf_gtpv2_uli_lai_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2014-03-17 12:52:41 +00:00
|
|
|
lac = tvb_get_ntohs(tvb, offset);
|
|
|
|
str = wmem_strdup_printf(wmem_packet_scope(), "%s, LAC 0x%x",
|
|
|
|
mcc_mnc_str,
|
|
|
|
lac);
|
2011-01-12 16:43:59 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-14 03:44:58 +00:00
|
|
|
|
2014-03-17 12:52:41 +00:00
|
|
|
return str;
|
|
|
|
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
|
|
|
|
2010-06-08 08:36:22 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-06-08 08:36:22 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flags_item;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
int offset = 0;
|
|
|
|
guint flags;
|
2011-01-03 22:13:11 +00:00
|
|
|
|
|
|
|
flags_item = proto_tree_add_text(tree, tvb, offset, 1, "Flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flags_item, ett_gtpv2_uli_flags);
|
2012-11-26 16:50:13 +00:00
|
|
|
flags = tvb_get_guint8(tvb, offset) & 0x3f;
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, offset >> 3, 2, ENC_BIG_ENDIAN);
|
2011-01-04 18:41:25 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* LAI B6 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_lai_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
/* ECGI B5 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_ecgi_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-06-08 08:36:22 +00:00
|
|
|
/* TAI B4 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_tai_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-06-08 08:36:22 +00:00
|
|
|
/* RAI B3 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_rai_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-06-08 08:36:22 +00:00
|
|
|
/* SAI B2 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_sai_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-06-08 08:36:22 +00:00
|
|
|
/* CGI B1 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_uli_cgi_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-06-08 08:36:22 +00:00
|
|
|
|
|
|
|
decode_gtpv2_uli(tvb, pinfo, tree, item, length, instance, flags);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-06-08 08:55:07 +00:00
|
|
|
/* Diameter 3GPP AVP Code: 22 3GPP-User-Location-Info */
|
2010-06-08 08:36:22 +00:00
|
|
|
/*
|
|
|
|
* TS 29.061 v9.2.0
|
|
|
|
* 16.4.7.2 Coding 3GPP Vendor-Specific RADIUS attributes
|
|
|
|
*
|
|
|
|
* For P-GW, the Geographic Location Type values and coding are defined as follows:
|
|
|
|
*
|
2011-08-03 21:14:04 +00:00
|
|
|
* 0 CGI
|
|
|
|
* 1 SAI
|
|
|
|
* 2 RAI
|
|
|
|
* 3-127 Spare for future use
|
|
|
|
* 128 TAI
|
|
|
|
* 129 ECGI
|
|
|
|
* 130 TAI and ECGI
|
|
|
|
* 131-255 Spare for future use
|
2010-06-08 08:36:22 +00:00
|
|
|
*/
|
|
|
|
|
2011-08-26 06:22:20 +00:00
|
|
|
|
|
|
|
static const value_string geographic_location_type_vals[] = {
|
|
|
|
{0, "CGI"},
|
|
|
|
{1, "SAI"},
|
|
|
|
{2, "RAI"},
|
|
|
|
{128, "TAI"},
|
|
|
|
{129, "ECGI"},
|
|
|
|
{130, "TAI and ECGI"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
2010-06-08 08:36:22 +00:00
|
|
|
static int
|
2014-03-17 12:52:41 +00:00
|
|
|
dissect_diameter_3gpp_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
|
2010-06-08 08:36:22 +00:00
|
|
|
{
|
2014-03-17 12:52:41 +00:00
|
|
|
diam_sub_dis_t *diam_sub_dis = (diam_sub_dis_t*)data;
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2010-06-08 08:36:22 +00:00
|
|
|
guint length;
|
|
|
|
guint flags;
|
|
|
|
guint flags_3gpp;
|
2012-05-07 22:11:34 +00:00
|
|
|
length = tvb_length(tvb);
|
2012-11-26 16:50:13 +00:00
|
|
|
flags_3gpp = tvb_get_guint8(tvb, offset);
|
2010-06-08 08:36:22 +00:00
|
|
|
|
2011-09-21 18:55:03 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_glt, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-26 06:22:20 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (flags_3gpp)
|
2010-06-08 08:36:22 +00:00
|
|
|
{
|
2011-09-21 18:55:03 +00:00
|
|
|
case 0:
|
2011-08-26 06:22:20 +00:00
|
|
|
/* CGI */
|
|
|
|
flags = GTPv2_ULI_CGI_MASK;
|
2011-09-21 18:55:03 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2011-08-26 06:22:20 +00:00
|
|
|
/* SAI */
|
|
|
|
flags = GTPv2_ULI_SAI_MASK;
|
2011-09-21 18:55:03 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2011-08-26 06:22:20 +00:00
|
|
|
/* RAI */
|
|
|
|
flags = GTPv2_ULI_RAI_MASK;
|
2011-09-21 18:55:03 +00:00
|
|
|
break;
|
2010-06-08 08:36:22 +00:00
|
|
|
case 128:
|
|
|
|
/* TAI */
|
|
|
|
flags = GTPv2_ULI_TAI_MASK;
|
|
|
|
break;
|
|
|
|
case 129:
|
|
|
|
/* ECGI */
|
|
|
|
flags = GTPv2_ULI_ECGI_MASK;
|
|
|
|
break;
|
|
|
|
case 130:
|
|
|
|
/* TAI and ECGI */
|
|
|
|
flags = GTPv2_ULI_TAI_MASK + GTPv2_ULI_ECGI_MASK;
|
|
|
|
break;
|
|
|
|
default:
|
2011-09-21 18:55:03 +00:00
|
|
|
proto_tree_add_text(tree, tvb, 1, -1, "Geographic Location");
|
2011-08-26 06:22:20 +00:00
|
|
|
return length;
|
2010-06-08 08:36:22 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 12:52:41 +00:00
|
|
|
diam_sub_dis->avp_str = decode_gtpv2_uli(tvb, pinfo, tree, NULL, length, 0, flags);
|
2010-06-08 08:36:22 +00:00
|
|
|
return length;
|
|
|
|
}
|
|
|
|
|
2009-03-01 20:39:44 +00:00
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.22 Fully Qualified TEID (F-TEID)
|
2009-03-01 20:39:44 +00:00
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static const value_string gtpv2_f_teid_interface_type_vals[] = {
|
2012-05-07 22:11:34 +00:00
|
|
|
{ 0, "S1-U eNodeB GTP-U interface"},
|
|
|
|
{ 1, "S1-U SGW GTP-U interface"},
|
|
|
|
{ 2, "S12 RNC GTP-U interface"},
|
|
|
|
{ 3, "S12 SGW GTP-U interface"},
|
|
|
|
{ 4, "S5/S8 SGW GTP-U interface"},
|
|
|
|
{ 5, "S5/S8 PGW GTP-U interface"},
|
|
|
|
{ 6, "S5/S8 SGW GTP-C interface"},
|
|
|
|
{ 7, "S5/S8 PGW GTP-C interface"},
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 8, "S5/S8 SGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
|
2012-05-07 22:11:34 +00:00
|
|
|
"and since alternate CoA is not used the control plane and user plane addresses are the same for PMIPv6)"}, */
|
2012-11-26 16:50:13 +00:00
|
|
|
{ 9, "S5/S8 PGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
|
2012-05-07 22:11:34 +00:00
|
|
|
"and the control plane and user plane addresses are the same for PMIPv6)"}, */
|
2010-05-10 15:54:57 +00:00
|
|
|
{10, "S11 MME GTP-C interface"},
|
|
|
|
{11, "S11/S4 SGW GTP-C interface"},
|
|
|
|
{12, "S10 MME GTP-C interface"},
|
|
|
|
{13, "S3 MME GTP-C interface"},
|
|
|
|
{14, "S3 SGSN GTP-C interface"},
|
|
|
|
{15, "S4 SGSN GTP-U interface"},
|
|
|
|
{16, "S4 SGW GTP-U interface"},
|
|
|
|
{17, "S4 SGSN GTP-C interface"},
|
|
|
|
{18, "S16 SGSN GTP-C interface"},
|
|
|
|
{19, "eNodeB GTP-U interface for DL data forwarding"},
|
|
|
|
{20, "eNodeB GTP-U interface for UL data forwarding"},
|
|
|
|
{21, "RNC GTP-U interface for data forwarding"},
|
|
|
|
{22, "SGSN GTP-U interface for data forwarding"},
|
|
|
|
{23, "SGW GTP-U interface for data forwarding"},
|
2010-12-30 14:09:09 +00:00
|
|
|
{24, "Sm MBMS GW GTP-C interface"},
|
|
|
|
{25, "Sn MBMS GW GTP-C interface"},
|
|
|
|
{26, "Sm MME GTP-C interface"},
|
|
|
|
{27, "Sn SGSN GTP-C interface"},
|
|
|
|
{28, "SGW GTP-U interface for UL data forwarding"},
|
|
|
|
{29, "Sn SGSN GTP-U interface"},
|
2011-01-03 17:22:02 +00:00
|
|
|
{30, "S2b ePDG GTP-C interface"},
|
|
|
|
{31, "S2b-U ePDG GTP-U interface"},
|
|
|
|
{32, "S2b PGW GTP-C interface"},
|
|
|
|
{33, "S2b-U PGW GTP-U interface"},
|
2012-11-14 19:41:35 +00:00
|
|
|
{34, "S2a TWAN GTP-U interface"},
|
|
|
|
{35, "S2a TWAN GTP-C interface"},
|
|
|
|
{36, "S2a PGW GTP-C interface"},
|
|
|
|
{37, "S2a PGW GTP-U interface"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, NULL}
|
2009-07-30 21:11:26 +00:00
|
|
|
};
|
2011-01-03 17:22:02 +00:00
|
|
|
static value_string_ext gtpv2_f_teid_interface_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_f_teid_interface_type_vals);
|
|
|
|
|
2011-01-04 07:14:11 +00:00
|
|
|
static const true_false_string gtpv2_f_teid_v4_vals = {
|
2011-08-03 21:14:04 +00:00
|
|
|
"IPv4 address present",
|
|
|
|
"IPv4 address not present",
|
2011-01-04 07:14:11 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const true_false_string gtpv2_f_teid_v6_vals = {
|
2011-08-03 21:14:04 +00:00
|
|
|
"IPv6 address present",
|
|
|
|
"IPv6 address not present",
|
2011-01-04 07:14:11 +00:00
|
|
|
};
|
|
|
|
|
2009-03-01 20:39:44 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-04-21 18:09:13 +00:00
|
|
|
guint8 flags;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-01-14 03:44:58 +00:00
|
|
|
flags = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_v4, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_v6, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
/* NOTE: "Interface type" IE is defined with 5 bits only in the earlier releases of this specification,
|
|
|
|
* thus pre-Rel-10 GTPv2-C nodes can ignore bit "6" which is marked as "Spare" in earlier releases,
|
2012-11-14 19:41:35 +00:00
|
|
|
* allowing backward compatibility.
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2011-12-14 00:06:16 +00:00
|
|
|
proto_item_append_text(item, "%s, TEID/GRE Key: 0x%s",
|
2012-11-14 19:41:35 +00:00
|
|
|
val_to_str_ext_const((flags & 0x3f), >pv2_f_teid_interface_type_vals_ext, "Unknown"),
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, 4));
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
|
|
|
if (flags & 0x80)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(tvb, offset));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (flags & 0x40)
|
2010-05-10 15:54:57 +00:00
|
|
|
{
|
2011-10-10 00:39:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv6, tvb, offset, 16, ENC_NA);
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(tvb, offset));
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.23 TMSI
|
2009-03-01 20:39:44 +00:00
|
|
|
*/
|
2011-01-05 16:46:40 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tmsi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-05 16:46:40 +00:00
|
|
|
{
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_tmsi, tvb, 0, 4, ENC_BIG_ENDIAN);
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(item, tvb, 0, length, "TMSI: %s", tvb_bytes_to_ep_str(tvb, 0, 4));
|
2011-01-05 16:46:40 +00:00
|
|
|
}
|
2009-03-01 20:39:44 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.24 Global CN-Id
|
2011-01-07 15:21:23 +00:00
|
|
|
* (TS 23.003)
|
|
|
|
* 12.3 CN Identifier
|
|
|
|
*
|
|
|
|
* A CN node is uniquely identified within a PLMN by its CN Identifier (CN-Id). The CN-Id together with the PLMN
|
|
|
|
* identifier globally identifies the CN node. The CN-Id together with the PLMN-Id is used as the CN node identifier in
|
|
|
|
* RANAP signalling over the Iu interface.
|
|
|
|
* Global CN-Id = PLMN-Id || CN-Id
|
|
|
|
* The CN-Id is defined by the operator, and set in the nodes via O&M.
|
|
|
|
* For the syntax description and the use of this identifier in RANAP signalling, see 3GPP TS 25.413 [17].
|
2009-03-01 20:39:44 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_g_cn_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-01 20:39:44 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
int offset = 0;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* >CN-ID M INTEGER (0..4095) */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "CN-Id: %s",
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, 2));
|
2009-03-01 20:39:44 +00:00
|
|
|
}
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.25 S103 PDN Data Forwarding Info (S103PDF)
|
2010-12-30 14:09:09 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_s103pdf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-12-30 14:09:09 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-11-26 16:50:13 +00:00
|
|
|
guint8 m, k, i;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* The HSGW Address and GRE Key identify a GRE Tunnel towards a HSGW over S103 interface for a specific PDN
|
2011-01-07 15:21:23 +00:00
|
|
|
* connection of the UE. The EPS Bearer IDs specify the EPS Bearers which require data forwarding that belonging to this
|
|
|
|
* PDN connection. The number of EPS bearer Ids included is specified by the value of EPS Bearer ID Number.
|
|
|
|
*/
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 5 HSGW Address for forwarding Length = m */
|
|
|
|
m = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_f_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 6 to (m+5) HSGW Address for forwarding [4..16] */
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (m) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 4:
|
|
|
|
/* IPv4 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv4, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
/* IPv6 */
|
2011-10-10 00:39:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv6, tvb, offset, 1, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/* Error */
|
2013-07-03 23:43:26 +00:00
|
|
|
proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
|
|
|
|
"Wrong length %u, should be 4 or 16", m);
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* (m+6)- to (m+9) GRE Key */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* (m+10) EPS Bearer ID Number = k */
|
|
|
|
k = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 1, "EPS Bearer ID Number = %d", k);
|
|
|
|
offset += 1;
|
2011-01-07 19:01:17 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* (m+11) to (m+10+k)
|
|
|
|
* Spare EPS Bearer ID
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
for ( i = 0; i < k; i++ ) {
|
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2010-12-30 14:09:09 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
* 8.26 S1-U Data Forwarding (S1UDF)
|
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_s1udf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 m;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 5 Spare EPS Bearer ID */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 6 Serving GW Address Length = m */
|
|
|
|
m = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 1, "Serving GW Address Length = %u", m);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 7 to (m+6) Serving GW Address [4..16] */
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (m) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 4:
|
|
|
|
/* IPv4 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv4, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
/* IPv6 */
|
2011-10-10 00:39:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv6, tvb, offset, 1, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/* Error */
|
2013-07-03 23:43:26 +00:00
|
|
|
proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
|
|
|
|
"Wrong length %u, should be 4 or 16", m);
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* (m+7) to (m+10)
|
|
|
|
* Serving GW S1-U TEID
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_sgw_s1u_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2011-01-07 15:21:23 +00:00
|
|
|
|
|
|
|
}
|
2010-12-30 14:09:09 +00:00
|
|
|
/*
|
|
|
|
* 8.27 Delay Value
|
2009-03-11 06:15:16 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_delay_value(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-11 06:15:16 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_delay_value, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2009-03-11 06:15:16 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
/*
|
|
|
|
* 8.28 Bearer Context (grouped IE)
|
|
|
|
*/
|
2009-03-11 06:15:16 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_bearer_ctx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-03-11 06:15:16 +00:00
|
|
|
{
|
2012-07-23 17:04:37 +00:00
|
|
|
int offset = 0;
|
2012-05-07 22:11:34 +00:00
|
|
|
tvbuff_t *new_tvb;
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_tree *grouped_tree;
|
|
|
|
|
|
|
|
proto_item_append_text(item, "[Grouped IE]");
|
|
|
|
grouped_tree = proto_item_add_subtree(item, ett_gtpv2_bearer_ctx);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
new_tvb = tvb_new_subset(tvb, offset, length, length );
|
2011-01-03 17:22:02 +00:00
|
|
|
dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, 0, message_type);
|
2009-03-11 06:15:16 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
/* 8.29 Charging ID */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_charging_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_charging_id, tvb, offset, length, ENC_BIG_ENDIAN);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* 8.30 Charging Characteristics
|
2009-09-15 15:54:06 +00:00
|
|
|
* The charging characteristics information element is defined in 3GPP TS 32.251 [8]
|
2010-05-10 15:54:57 +00:00
|
|
|
* and is a way of informing both the SGW and PGW of the rules for producing charging
|
|
|
|
* information based on operator configured triggers. For the encoding of this
|
2009-09-15 15:54:06 +00:00
|
|
|
* information element see 3GPP TS 32.298 [9].
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_char_char(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_charging_characteristic, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 2) {
|
|
|
|
offset += 2;
|
2010-05-10 15:54:57 +00:00
|
|
|
/* These octet(s) is/are present only if explicitly specified */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, length-2, "Remaining octets");
|
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.30 Bearer Flag
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_bearer_flag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 5 Spare VB PPC */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_flag_ppc, tvb, offset, length, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_flag_vb, tvb, offset, length, ENC_BIG_ENDIAN);
|
2011-01-04 18:41:25 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.34 PDN Type
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2011-04-21 18:09:13 +00:00
|
|
|
guint8 pdn;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
if (length != 1) {
|
2013-07-03 23:43:26 +00:00
|
|
|
proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
|
|
|
|
"Wrong length indicated. Expected 1, got %u", length);
|
2010-05-10 15:54:57 +00:00
|
|
|
return;
|
|
|
|
}
|
2009-08-11 23:29:21 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN);
|
2011-01-03 17:22:02 +00:00
|
|
|
pdn = tvb_get_guint8(tvb, offset)& 0x7;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, length, ENC_BIG_ENDIAN);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item_append_text(item, "%s", val_to_str_const(pdn, gtpv2_pdn_type_vals, "Unknown"));
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.31 Trace Information
|
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item *trigg, *msc_server, *mgw, *sgsn, *ggsn, *bm_sc, *sgw_mme, *ne_types;
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree *trigg_tree, *msc_server_tree, *mgw_tree, *sgsn_tree, *ggsn_tree;
|
|
|
|
proto_tree *bm_sc_tree, *sgw_mme_tree, *ne_types_tree;
|
2011-08-03 21:14:04 +00:00
|
|
|
proto_item *interfaces, *imsc_server, *lmgw, *lsgsn, *lggsn, *lrnc, *lbm_sc, *lmme, *lsgw, *lpdn_gw, *lenb;
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree *interfaces_tree, *imsc_server_tree, *lmgw_tree, *lsgsn_tree, *lggsn_tree, *lrnc_tree;
|
|
|
|
proto_tree *lbm_sc_tree, *lmme_tree, *lsgw_tree, *lpdn_gw_tree, *lenb_tree;
|
2011-08-03 21:14:04 +00:00
|
|
|
|
|
|
|
int offset = 0;
|
|
|
|
#if 0
|
|
|
|
guint8 *trace_id = NULL;
|
|
|
|
#endif
|
|
|
|
guint8 tdl;
|
|
|
|
guint16 tid;
|
|
|
|
guint32 bit_offset;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, TRUE);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/* Append Trace ID to main tree */
|
|
|
|
tid = tvb_get_ntohs(tvb, offset);
|
2011-08-03 20:31:51 +00:00
|
|
|
proto_item_append_text(item, "Trace ID: %d ", tid);
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/* Trace ID */
|
|
|
|
/*--------------------------------------------------
|
2011-12-14 00:06:16 +00:00
|
|
|
* trace_id = tvb_format_text(tvb, offset, 2);
|
|
|
|
* proto_tree_add_string(tree, hf_gtpv2_tra_info, tvb, offset, length, trace_id);
|
|
|
|
*--------------------------------------------------*/
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 3, "Trace ID: %d", tid);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/* Triggering Events, put all into a new tree called trigging_tree */
|
|
|
|
trigg = proto_tree_add_text(tree, tvb, offset, 8, "Trigging Events");
|
|
|
|
trigg_tree = proto_item_add_subtree(trigg, ett_gtpv2_tra_info_trigg);
|
|
|
|
|
|
|
|
/* Create all subtrees */
|
|
|
|
msc_server = proto_tree_add_text(trigg_tree, tvb, offset, 2, "MSC Server");
|
|
|
|
msc_server_tree = proto_item_add_subtree(msc_server, ett_gtpv2_tra_info_trigg_msc_server);
|
|
|
|
|
|
|
|
mgw = proto_tree_add_text(trigg_tree, tvb, offset + 2, 1, "MGW");
|
|
|
|
mgw_tree = proto_item_add_subtree(mgw, ett_gtpv2_tra_info_trigg_mgw);
|
|
|
|
|
|
|
|
sgsn = proto_tree_add_text(trigg_tree, tvb, offset + 3, 2, "SGSN");
|
|
|
|
sgsn_tree = proto_item_add_subtree(sgsn, ett_gtpv2_tra_info_trigg_sgsn);
|
|
|
|
|
|
|
|
ggsn = proto_tree_add_text(trigg_tree, tvb, offset + 5, 1, "GGSN");
|
|
|
|
ggsn_tree = proto_item_add_subtree(ggsn, ett_gtpv2_tra_info_trigg_ggsn);
|
|
|
|
|
|
|
|
bm_sc = proto_tree_add_text(trigg_tree, tvb, offset + 6, 1, "BM-SC");
|
|
|
|
bm_sc_tree = proto_item_add_subtree(bm_sc, ett_gtpv2_tra_info_trigg_bm_sc);
|
|
|
|
|
|
|
|
sgw_mme = proto_tree_add_text(trigg_tree, tvb, offset + 7, 1, "SGW MME");
|
|
|
|
sgw_mme_tree = proto_item_add_subtree(sgw_mme, ett_gtpv2_tra_info_trigg_sgw_mme);
|
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* MSC Server - 2 octets */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_momt_calls, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_momt_sms, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_lu_imsi_ad, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_handovers, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_ss, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
2011-12-14 00:06:16 +00:00
|
|
|
/* MGW - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(mgw_tree, hf_gtpv2_tra_info_mgw_context, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(mgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* SGSN - 2 octets */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_pdp_context, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_momt_sms, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_rau_gprs_ad, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_mbms, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(sgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(sgsn_tree, hf_gtpv2_reserved, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* GGSN - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_pdp, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_mbms, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(ggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* BM-SC - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(bm_sc_tree, hf_gtpv2_tra_info_bm_sc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(bm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* MME/SGW - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(sgw_mme_tree, hf_gtpv2_tra_info_mme_sgw_ss, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sgw_mme_tree, hf_gtpv2_tra_info_mme_sgw_sr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sgw_mme_tree, hf_gtpv2_tra_info_mme_sgw_iataud, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(sgw_mme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
/* Create NE Types subtree */
|
|
|
|
ne_types = proto_tree_add_text(tree, tvb, offset, 2, "List of NE Types");
|
|
|
|
ne_types_tree = proto_item_add_subtree(ne_types, ett_gtpv2_tra_info_ne_types);
|
|
|
|
|
|
|
|
|
|
|
|
/* List of NE Types */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_msc_s, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_mgw, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_sgsn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_ggsn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_rnc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_bm_sc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_mme, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_sgw, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_pdn_gw, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(ne_types_tree, hf_gtpv2_tra_info_lne_enb, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(ne_types_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
/* Trace Depth Length */
|
|
|
|
tdl = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_tra_info_tdl, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
/* Trace Depth List
|
|
|
|
* Will be displayed if length of Trace Depth Length is > 0
|
|
|
|
* The list will only contains UTF8String, RAW DATA
|
|
|
|
*/
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, tdl, "Trace Depth List: %s", tvb_bytes_to_ep_str(tvb, offset, tdl));
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += tdl;
|
|
|
|
|
|
|
|
/* Set up subtree interfaces and put all interfaces under it */
|
|
|
|
interfaces = proto_tree_add_text(tree, tvb, offset, 12, "List of Interfaces");
|
|
|
|
interfaces_tree = proto_item_add_subtree(interfaces, ett_gtpv2_tra_info_interfaces);
|
|
|
|
|
|
|
|
/* Create all subtrees */
|
|
|
|
imsc_server = proto_tree_add_text(interfaces_tree, tvb, offset, 2, "MSC Server");
|
|
|
|
imsc_server_tree = proto_item_add_subtree(imsc_server, ett_gtpv2_tra_info_interfaces_imsc_server);
|
|
|
|
|
|
|
|
lmgw = proto_tree_add_text(interfaces_tree, tvb, offset + 2, 1, "MGW");
|
|
|
|
lmgw_tree = proto_item_add_subtree(lmgw, ett_gtpv2_tra_info_interfaces_lmgw);
|
|
|
|
|
|
|
|
lsgsn = proto_tree_add_text(interfaces_tree, tvb, offset + 3, 2, "SGSN");
|
|
|
|
lsgsn_tree = proto_item_add_subtree(lsgsn, ett_gtpv2_tra_info_interfaces_lsgsn);
|
|
|
|
|
|
|
|
lggsn = proto_tree_add_text(interfaces_tree, tvb, offset + 5, 1, "GGSN");
|
|
|
|
lggsn_tree = proto_item_add_subtree(lggsn, ett_gtpv2_tra_info_interfaces_lggsn);
|
|
|
|
|
|
|
|
lrnc = proto_tree_add_text(interfaces_tree, tvb, offset + 6, 1, "RNC");
|
|
|
|
lrnc_tree = proto_item_add_subtree(lrnc, ett_gtpv2_tra_info_interfaces_lrnc);
|
|
|
|
|
|
|
|
lbm_sc = proto_tree_add_text(interfaces_tree, tvb, offset + 7, 1, "BM-SC");
|
|
|
|
lbm_sc_tree = proto_item_add_subtree(lbm_sc, ett_gtpv2_tra_info_interfaces_lbm_sc);
|
|
|
|
|
|
|
|
lmme = proto_tree_add_text(interfaces_tree, tvb, offset + 8, 1, "MME");
|
|
|
|
lmme_tree = proto_item_add_subtree(lmme, ett_gtpv2_tra_info_interfaces_lmme);
|
|
|
|
|
|
|
|
lsgw = proto_tree_add_text(interfaces_tree, tvb, offset + 9, 1, "SGW");
|
|
|
|
lsgw_tree = proto_item_add_subtree(lsgw, ett_gtpv2_tra_info_interfaces_lsgw);
|
|
|
|
|
|
|
|
lpdn_gw = proto_tree_add_text(interfaces_tree, tvb, offset + 10, 1, "PDN GW");
|
|
|
|
lpdn_gw_tree = proto_item_add_subtree(lpdn_gw, ett_gtpv2_tra_info_interfaces_lpdn_gw);
|
|
|
|
|
|
|
|
lenb = proto_tree_add_text(interfaces_tree, tvb, offset + 11, 1, "eNB");
|
|
|
|
lenb_tree = proto_item_add_subtree(lenb, ett_gtpv2_tra_info_interfaces_lpdn_lenb);
|
|
|
|
|
2011-12-14 00:06:16 +00:00
|
|
|
/* MSC Server - 2 octests */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_a, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_lu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_mc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_g, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_b, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_e, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_f, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_cap, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_d, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_c, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(imsc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* MGW - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lmgw_tree, hf_gtpv2_tra_info_lmgw_mc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmgw_tree, hf_gtpv2_tra_info_lmgw_nb_up, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmgw_tree, hf_gtpv2_tra_info_lmgw_lu_up, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lmgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* SGSN - 2 octets */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_gb, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_lu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_gn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_map_gr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_map_gd, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_map_gf, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_gs, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgsn_tree, hf_gtpv2_tra_info_lsgsn_ge, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lsgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
2011-12-14 00:06:16 +00:00
|
|
|
/* GGSN - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lggsn_tree, hf_gtpv2_tra_info_lggsn_gn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lggsn_tree, hf_gtpv2_tra_info_lggsn_gi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lggsn_tree, hf_gtpv2_tra_info_lggsn_gmb, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* RNC - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lrnc_tree, hf_gtpv2_tra_info_lrnc_lu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lrnc_tree, hf_gtpv2_tra_info_lrnc_lur, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lrnc_tree, hf_gtpv2_tra_info_lrnc_lub, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lrnc_tree, hf_gtpv2_tra_info_lrnc_uu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lrnc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* BM_SC - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lbm_sc_tree, hf_gtpv2_tra_info_lbm_sc_gmb, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lbm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* MME - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lmme_tree, hf_gtpv2_tra_info_lmme_s1_mme, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmme_tree, hf_gtpv2_tra_info_lmme_s3, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmme_tree, hf_gtpv2_tra_info_lmme_s6a, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmme_tree, hf_gtpv2_tra_info_lmme_s10, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lmme_tree, hf_gtpv2_tra_info_lmme_s11, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lmme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* SGW - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lsgw_tree, hf_gtpv2_tra_info_lsgw_s4, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgw_tree, hf_gtpv2_tra_info_lsgw_s5, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgw_tree, hf_gtpv2_tra_info_lsgw_s8b, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lsgw_tree, hf_gtpv2_tra_info_lsgw_s11, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lsgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* PDN GW - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s2a, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s2b, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s2c, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s5, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s6c, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_gx, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_s8b, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lpdn_gw_tree, hf_gtpv2_tra_info_lpdn_gw_sgi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-12-14 00:06:16 +00:00
|
|
|
/* eNB - 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(lenb_tree, hf_gtpv2_tra_info_lenb_s1_mme, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lenb_tree, hf_gtpv2_tra_info_lenb_x2, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(lenb_tree, hf_gtpv2_tra_info_lenb_uu, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
bit_offset = offset << 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_bits_item(lenb_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/*--------------------------------------------------
|
2011-12-14 00:06:16 +00:00
|
|
|
* offset += 1;
|
|
|
|
*--------------------------------------------------*/
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/* IP Address of Trace Collection Entity */
|
|
|
|
while ( (offset + 4) <= length ) {
|
2011-08-03 21:14:04 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
offset += 3;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.33 Paging Cause
|
2011-01-05 16:46:40 +00:00
|
|
|
* 8.33 Void (TS 129 274 V9.4.0 (2010-10))
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
/* 8.35 Procedure Transaction ID (PTI) */
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_pti(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_pti, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.36 DRX Parameter
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2011-01-12 16:43:59 +00:00
|
|
|
static void
|
|
|
|
dissect_gtpv2_drx_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
int offset = 0;
|
2011-01-14 03:44:58 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* 36.413 : 9.2.1.17 Paging Cause, void */
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length, "DRX parameter: %s", tvb_bytes_to_ep_str(tvb, offset, (length )));
|
2011-01-12 16:43:59 +00:00
|
|
|
}
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.37 UE Network Capability
|
2011-01-07 15:21:23 +00:00
|
|
|
* UE Network Capability is coded as depicted in Figure 8.37-1. Actual coding of the UE Network Capability field is
|
|
|
|
* defined in 3GPP TS 24.301
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ue_net_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
de_emm_ue_net_cap(tvb, tree, pinfo, 0, length, NULL, 0);
|
2011-01-07 15:21:23 +00:00
|
|
|
|
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.38 MM Context
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static const value_string gtpv2_mm_context_security_mode[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{0, "GSM Key and Triplets"},
|
|
|
|
{1, "UMTS Key, Used Cipher and Quintuplets"},
|
|
|
|
{2, "GSM Key, Used Cipher and Quintuplets"},
|
|
|
|
{3, "UMTS Key and Quintuplets"},
|
|
|
|
{4, "EPS Security Context, Quadruplets and Quintuplets" },
|
|
|
|
{5, "UMTS Key, Quadruplets and Quintuplets"},
|
|
|
|
{0, NULL }
|
2011-01-03 17:22:02 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const true_false_string gtpv2_nhi_vals = {
|
2011-08-03 21:14:04 +00:00
|
|
|
"NH (Next Hop) and NCC (Next Hop Chaining Count) are both present",
|
|
|
|
"NH (Next Hop) and NCC (Next Hop Chaining Count) not present",
|
2011-01-03 17:22:02 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Table 8.38-2: Used NAS Cipher Values */
|
|
|
|
|
|
|
|
static const value_string gtpv2_mm_context_unc_vals[] = {
|
2012-04-11 15:52:14 +00:00
|
|
|
{0, "No ciphering"},
|
|
|
|
{1, "128-EEA1"},
|
|
|
|
{2, "128-EEA2"},
|
|
|
|
{3, "EEA3"},
|
|
|
|
{4, "EEA4" },
|
|
|
|
{5, "EEA5"},
|
|
|
|
{6, "EEA6"},
|
|
|
|
{7, "EEA7"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Table 8.38-3: Used Cipher Values */
|
|
|
|
static const value_string gtpv2_mm_context_used_cipher_vals[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{0, "No ciphering"},
|
|
|
|
{1, "GEA/1"},
|
|
|
|
{2, "GEA/2"},
|
|
|
|
{3, "GEA/3"},
|
|
|
|
{4, "GEA/4" },
|
|
|
|
{5, "GEA/5"},
|
|
|
|
{6, "GEA/6"},
|
|
|
|
{7, "GEA/7"},
|
|
|
|
{0, NULL}
|
2011-01-03 17:22:02 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Table 8.38-4: Used NAS integrity protection algorithm Values */
|
|
|
|
static const value_string gtpv2_mm_context_unipa_vals[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{0, "No ciphering"},
|
|
|
|
{1, "128-EEA1"},
|
|
|
|
{2, "128-EEA2"},
|
|
|
|
{3, "EEA3"},
|
|
|
|
{4, "EEA4" },
|
|
|
|
{5, "EEA5"},
|
|
|
|
{6, "EEA6"},
|
|
|
|
{7, "EEA7"},
|
|
|
|
{0, NULL}
|
2011-01-03 17:22:02 +00:00
|
|
|
};
|
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Helper functions */
|
|
|
|
|
|
|
|
/* Figure 8.38-7: Authentication Triplet */
|
|
|
|
static int
|
|
|
|
dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 num_triplet)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *auth_tri_item;
|
|
|
|
proto_tree *auth_tri_tree;
|
|
|
|
int i;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
for (i = 0; i < num_triplet; i++) {
|
|
|
|
auth_tri_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Triplet %u", i);
|
|
|
|
auth_tri_tree = proto_item_add_subtree(auth_tri_item, ett_gtpv2_mm_context_auth_tri);
|
|
|
|
/*
|
|
|
|
* Figure 8.38-8: Authentication Quintuplet
|
|
|
|
* 1 to 16 RAND
|
|
|
|
* 17 to 20 SRES
|
|
|
|
* 21 to 28 Kc
|
|
|
|
*/
|
|
|
|
proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(auth_tri_tree, tvb, offset, 4, "SRES': %s", tvb_bytes_to_ep_str(tvb, offset, 4));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(auth_tri_tree, tvb, offset, 8, "Kc': %s", tvb_bytes_to_ep_str(tvb, offset, 8));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 8;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 nr_qui)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *auth_qui_item;
|
|
|
|
proto_tree *auth_qui_tree;
|
|
|
|
int i;
|
|
|
|
guint8 xres_len, autn_len;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
for (i = 0; i < nr_qui; i++) {
|
|
|
|
auth_qui_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quintuplet %u", i);
|
|
|
|
auth_qui_tree = proto_item_add_subtree(auth_qui_item, ett_gtpv2_mm_context_auth_qui);
|
|
|
|
/*
|
|
|
|
* Figure 8.38-8: Authentication Quintuplet
|
|
|
|
* 1 to 16 RAND
|
|
|
|
* 17 XRES Length
|
|
|
|
* 18 to m XRES
|
|
|
|
* (m+1) to (m+16) CK
|
|
|
|
* (m+17) to (m+32) IK
|
|
|
|
* m+33 AUTN Length
|
|
|
|
* (m+34) to n AUTN
|
|
|
|
*/
|
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
|
|
|
xres_len = tvb_get_guint8(tvb, offset);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres, tvb, offset, xres_len, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += xres_len;
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_ck, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_ik, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
|
|
|
autn_len = tvb_get_guint8(tvb, offset);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn, tvb, offset, autn_len, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += autn_len;
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return offset;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 nr_qui)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *auth_qua_item;
|
|
|
|
proto_tree *auth_qua_tree;
|
|
|
|
guint8 tmp;
|
|
|
|
int i;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
for (i = 0; i < nr_qui; i++) {
|
|
|
|
auth_qua_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quadruplet");
|
|
|
|
auth_qua_tree = proto_item_add_subtree(auth_qua_item, ett_gtpv2_mm_context_auth_qua);
|
|
|
|
|
|
|
|
proto_tree_add_text(auth_qua_tree, tvb, offset, 16, "RAND: %s",
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, 16));
|
2012-04-12 14:07:31 +00:00
|
|
|
offset += 16;
|
|
|
|
|
|
|
|
tmp = tvb_get_guint8(tvb, offset++);
|
|
|
|
|
|
|
|
proto_tree_add_text(auth_qua_tree, tvb, offset, tmp, "XRES: %s",
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, tmp));
|
2012-04-12 14:07:31 +00:00
|
|
|
offset += tmp;
|
|
|
|
|
|
|
|
tmp = tvb_get_guint8(tvb, offset++);
|
|
|
|
|
|
|
|
proto_tree_add_text(auth_qua_tree, tvb, offset, tmp, "AUTN: %s",
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, tmp));
|
2012-04-12 14:07:31 +00:00
|
|
|
offset += tmp;
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_BIG_ENDIAN);
|
|
|
|
|
|
|
|
offset += 32;
|
|
|
|
}
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
2012-05-02 07:23:32 +00:00
|
|
|
static const value_string gtpv2_mm_context_higher_br_16mb_flg_vals[] = {
|
|
|
|
{0, "Not allowed"},
|
|
|
|
{1, "Allowed"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
static int
|
|
|
|
dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, guint8 samb_ri, guint8 uamb_ri)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *net_cap_item, *msnt_cap_item;
|
|
|
|
proto_tree *net_cap_tree, *msnt_cap_tree;
|
|
|
|
guint8 ue_net_cap_len, ms_net_cap_len, mei_len;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
|
|
|
* If SAMBRI (Subscribed UE AMBR Indicator), bit 1 of octet 6, is set to "1",
|
2012-04-12 14:07:31 +00:00
|
|
|
* then the Uplink/downlink Subscribed UE AMBR parameter field is present,
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (samb_ri) {
|
2012-04-12 14:07:31 +00:00
|
|
|
/* j to (j+3) Uplink Subscribed UE AMBR */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 4, "Uplink Subscribed UE AMBR: %d Kbps",
|
|
|
|
tvb_get_ntohl(tvb, offset));
|
|
|
|
|
|
|
|
offset += 4;
|
|
|
|
/* (j+4) to (j+7) Downlink Subscribed UE AMBR */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 4, "Downlink Subscribed UE AMBR: %d Kbps",
|
|
|
|
tvb_get_ntohl(tvb, offset));
|
|
|
|
|
|
|
|
offset += 4;
|
|
|
|
}
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
|
|
|
* If UAMBRI (Used UE AMBR Indicator), bit 2 of octet 6, is set to "1",
|
2012-04-12 14:07:31 +00:00
|
|
|
* then the Uplink/downlink Used UE AMBR parameter field is present
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (uamb_ri) {
|
2012-04-12 14:07:31 +00:00
|
|
|
/* i to (i+3) Uplink Used UE AMBR */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 4, "Uplink Used UE AMBR: %d Kbps",
|
|
|
|
tvb_get_ntohl(tvb, offset));
|
|
|
|
|
|
|
|
offset += 4;
|
|
|
|
/* (i+4) to (i+7) Downlink Used UE AMBR */
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 4, "Downlink Used UE AMBR: %d Kbps",
|
|
|
|
tvb_get_ntohl(tvb, offset));
|
|
|
|
|
|
|
|
offset += 4;
|
|
|
|
}
|
|
|
|
/* q Length of UE Network Capability */
|
2012-11-26 16:50:13 +00:00
|
|
|
ue_net_cap_len = tvb_get_guint8(tvb, offset);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_ue_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
/* (q+1) to k UE Network Capability */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (ue_net_cap_len) {
|
2012-04-12 14:07:31 +00:00
|
|
|
/* The UE Network Capability coding is specified in clause 9.9.3.34 of 3GPP TS 24.301 [23].
|
2012-05-07 22:11:34 +00:00
|
|
|
* If Length of UE Network Capability is zero, then the UE Network Capability parameter
|
2012-04-12 14:07:31 +00:00
|
|
|
* shall not be present.
|
|
|
|
*/
|
|
|
|
net_cap_item = proto_tree_add_text(tree, tvb, offset, ue_net_cap_len, "UE Network Capability");
|
|
|
|
net_cap_tree = proto_item_add_subtree(net_cap_item, ett_gtpv2_mm_context_net_cap);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += de_emm_ue_net_cap(tvb, net_cap_tree, pinfo, offset, ue_net_cap_len, NULL, 0);
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
/* k+1 Length of MS Network Capability */
|
2012-11-26 16:50:13 +00:00
|
|
|
ms_net_cap_len = tvb_get_guint8(tvb, offset);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_ms_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* (k+2) to m MS Network Capability
|
2012-04-12 14:07:31 +00:00
|
|
|
* The MS Network Capability coding is specified in clause 10.5.5.12 of 3GPP TS 24.008 [5].
|
|
|
|
* If Length of MS Network Capability is zero, then the MS Network Capability parameter shall not be present.
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (ms_net_cap_len) {
|
2012-04-12 14:07:31 +00:00
|
|
|
msnt_cap_item = proto_tree_add_text(tree, tvb, offset, ms_net_cap_len, "MS network capability");
|
|
|
|
msnt_cap_tree = proto_item_add_subtree(msnt_cap_item, ett_gtpv2_ms_network_capability);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += de_gmm_ms_net_cap(tvb, msnt_cap_tree, pinfo, offset, ms_net_cap_len, NULL, 0);
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
/* m+1 Length of Mobile Equipment Identity (MEI) */
|
2012-11-26 16:50:13 +00:00
|
|
|
mei_len = tvb_get_guint8(tvb, offset);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_mei_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
/* (m+2) to r Mobile Equipment Identity (MEI) */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (mei_len) {
|
2012-04-12 14:07:31 +00:00
|
|
|
const gchar *mei_str;
|
2012-05-07 22:11:34 +00:00
|
|
|
|
2013-09-22 20:04:35 +00:00
|
|
|
mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, mei_len, NULL, FALSE);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_string(tree, hf_gtpv2_mei, tvb, offset, mei_len, mei_str);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += mei_len;
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, int offset)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *accrstdata_item;
|
|
|
|
proto_tree *accrstdata_tree;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
accrstdata_item = proto_tree_add_text(tree, tvb, offset, 1, "Access restriction data");
|
|
|
|
accrstdata_tree = proto_item_add_subtree(accrstdata_item, ett_gtpv2_access_rest_data);
|
|
|
|
/* Spare HNNA ENA INA GANA GENA UNA */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(accrstdata_tree, hf_gtpv2_spare_bits, tvb, (offset << 3), 2, ENC_BIG_ENDIAN);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_hnna, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_ena, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_ina, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_gana, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_gena, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(accrstdata_tree, hf_gtpv2_una, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Type = 103 (decimal)
|
|
|
|
* Figure 8.38-1: GSM Key and Triplets
|
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static void
|
2012-04-12 14:07:31 +00:00
|
|
|
dissect_gtpv2_mm_context_gsm_t(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-03 17:22:02 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flag;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
int offset;
|
|
|
|
guint8 oct, drxi, num_triplet, uamb_ri, samb_ri;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
|
|
|
flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 5 */
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Security Mode | Spare | DRXI | CKSN */
|
2012-11-26 16:50:13 +00:00
|
|
|
drxi = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 6 */
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Number of Triplet | Spare | UAMB RI | SAMB RI */
|
2012-11-26 16:50:13 +00:00
|
|
|
oct = tvb_get_guint8(tvb, offset);
|
|
|
|
num_triplet = oct >> 5;
|
|
|
|
uamb_ri = (oct & 0x02) >> 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
samb_ri = oct & 0x01;
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_tri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 7 Spare Used Cipher */
|
2013-03-18 16:11:00 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
offset += 1;
|
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* 8 to 15 Kc */
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 8, "Kc': %s", tvb_bytes_to_ep_str(tvb, offset, 8));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 8;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
/* 16 to h Authentication Triplet [0..4] */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (num_triplet) {
|
2012-04-12 14:07:31 +00:00
|
|
|
dissect_gtpv2_authentication_triplets(tvb, tree, offset, num_triplet);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* (h+1) to (h+2) DRX parameter
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-04-12 14:07:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
|
|
|
|
|
|
|
proto_tree_add_text(flag_tree, tvb, offset, -1, "The rest of the IE not dissected yet");
|
2011-01-03 17:22:02 +00:00
|
|
|
}
|
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Type = 104 (decimal)
|
|
|
|
* Figure 8.38-2: UMTS Key, Used Cipher and Quintuplets
|
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static void
|
2011-01-03 17:30:35 +00:00
|
|
|
dissect_gtpv2_mm_context_utms_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-03 17:22:02 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flag;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
int offset;
|
2012-05-21 08:21:26 +00:00
|
|
|
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
|
|
|
flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 5 */
|
2013-04-19 16:06:55 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
drxi = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 6 */
|
2012-11-26 16:50:13 +00:00
|
|
|
oct = tvb_get_guint8(tvb, offset);
|
|
|
|
nr_qui = oct >> 5;
|
|
|
|
uamb_ri = (oct & 0x02) >> 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
samb_ri = oct & 0x01;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
offset += 1;
|
|
|
|
/* Octet 7 Spare Used Cipher */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN);
|
2013-03-18 16:11:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 8 to 23 CK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 24 to 39 IK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-04-12 14:07:31 +00:00
|
|
|
* 40 to h Authentication Quintuplet [0..4]
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (nr_qui) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* (h+1) to (h+2) DRX parameter
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* r+1 Spare HNNA ENA INA GANA GENA UNA
|
|
|
|
* The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
|
|
|
|
* GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
|
|
|
|
* HNNA(HO-To-Non-3GPPAccess Not Allowed).
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-04-12 14:07:31 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* r+2 Length of Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
vdp_len = tvb_get_guint8(tvb, offset);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* (r+3) to s Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (vdp_len) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, vdp_len, "Voice Domain Preference and UE's Usage Setting");
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += vdp_len;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-05-21 08:21:26 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* s+1 Length of Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == (gint)length) {
|
|
|
|
hbr_len = tvb_get_guint8(tvb, offset);
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-21 08:21:26 +00:00
|
|
|
/* s+2 Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (hbr_len) {
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += hbr_len;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-05-21 08:21:26 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(flag_tree, tvb, offset, -1, "The rest of the IE not dissected yet");
|
2012-05-21 08:21:26 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
}
|
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Type = 105 (decimal)
|
|
|
|
* Figure 8.38-3: GSM Key, Used Cipher and Quintuplets
|
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static void
|
2011-01-03 17:32:15 +00:00
|
|
|
dissect_gtpv2_mm_context_gsm_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-03 17:22:02 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flag;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
int offset;
|
2012-05-21 08:21:26 +00:00
|
|
|
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
|
|
|
flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 5 */
|
2013-04-19 16:06:55 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
drxi = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 6 */
|
2012-11-26 16:50:13 +00:00
|
|
|
oct = tvb_get_guint8(tvb, offset);
|
|
|
|
nr_qui = oct >> 5;
|
|
|
|
uamb_ri = (oct & 0x02) >> 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
samb_ri = oct & 0x01;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
offset += 1;
|
|
|
|
/* Octet 7 Spare Used Cipher */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN);
|
2013-03-18 16:11:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* 8 to 15 Kc */
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 8, "Kc': %s", tvb_bytes_to_ep_str(tvb, offset, 8));
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 8;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-04-12 14:07:31 +00:00
|
|
|
* 40 to h Authentication Quintuplet [0..4]
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (nr_qui) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* (h+1) to (h+2) DRX parameter
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* r+1 Spare HNNA ENA INA GANA GENA UNA
|
|
|
|
* The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
|
|
|
|
* GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
|
|
|
|
* HNNA(HO-To-Non-3GPPAccess Not Allowed).
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-04-12 14:07:31 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* r+2 Length of Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
vdp_len = tvb_get_guint8(tvb, offset);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* (r+3) to s Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (vdp_len) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, vdp_len, "Voice Domain Preference and UE's Usage Setting");
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += vdp_len;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-05-21 08:21:26 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* s+1 Length of Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
|
|
|
hbr_len = tvb_get_guint8(tvb, offset);
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-21 08:21:26 +00:00
|
|
|
/* s+2 Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (hbr_len) {
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += hbr_len;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-05-21 08:21:26 +00:00
|
|
|
return;
|
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(flag_tree, tvb, offset, -1, "The rest of the IE not dissected yet");
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Type = 106 (decimal)
|
|
|
|
* Figure 8.38-4: UMTS Key and Quintuplets
|
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static void
|
2012-04-11 15:52:14 +00:00
|
|
|
dissect_gtpv2_mm_context_utms_q(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-03 17:22:02 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flag;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
int offset;
|
2012-05-21 08:21:26 +00:00
|
|
|
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
|
|
|
flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 5 */
|
|
|
|
/* Security Mode Spare DRXI KSI */
|
2013-04-19 16:06:55 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN);
|
|
|
|
drxi = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 6 */
|
|
|
|
/* Number of Quintuplets Spare UAMB RI SAMB RI */
|
2012-11-26 16:50:13 +00:00
|
|
|
oct = tvb_get_guint8(tvb, offset);
|
|
|
|
nr_qui = oct >> 5;
|
|
|
|
uamb_ri = (oct & 0x02) >> 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
samb_ri = oct & 0x01;
|
2012-04-11 15:52:14 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN);
|
2012-04-11 15:52:14 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 7 Spare */
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 8 to 23 CK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-11 15:52:14 +00:00
|
|
|
/* Octet 24 to 39 IK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-11 15:52:14 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-04-11 15:52:14 +00:00
|
|
|
* 40 to h Authentication Quintuplet [0..4]
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (nr_qui) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
|
2012-04-11 15:52:14 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-11 15:52:14 +00:00
|
|
|
/*
|
|
|
|
* (h+1) to (h+2) DRX parameter
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-04-11 15:52:14 +00:00
|
|
|
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
2012-04-11 15:52:14 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* r+1 Spare HNNA ENA INA GANA GENA UNA
|
|
|
|
* The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
|
|
|
|
* GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
|
|
|
|
* HNNA(HO-To-Non-3GPPAccess Not Allowed).
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-04-11 15:52:14 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* r+2 Length of Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
vdp_len = tvb_get_guint8(tvb, offset);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* (r+3) to s Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (vdp_len) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, vdp_len, "Voice Domain Preference and UE's Usage Setting");
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += vdp_len;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-05-21 08:21:26 +00:00
|
|
|
|
2012-05-02 07:23:32 +00:00
|
|
|
/* s+1 Length of Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
|
|
|
hbr_len = tvb_get_guint8(tvb, offset);
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-21 08:21:26 +00:00
|
|
|
/* s+2 Higher bitrates than 16 Mbps flag */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (hbr_len) {
|
2012-05-21 08:21:26 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += hbr_len;
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-05-21 08:21:26 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-05-02 07:23:32 +00:00
|
|
|
|
|
|
|
/* (s+3) to (n+4) These octet(s) is/are present only if explicitly specified */
|
|
|
|
proto_tree_add_text(flag_tree, tvb, offset, -1, "The rest of the IE not dissected yet");
|
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
}
|
|
|
|
|
2011-12-01 21:26:22 +00:00
|
|
|
/* 8.38 MM Context
|
2012-04-11 15:52:14 +00:00
|
|
|
* Type = 107 (decimal)
|
|
|
|
* Figure 8.38-5: EPS Security Context and Quadruplets
|
2011-12-01 21:26:22 +00:00
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
static void
|
2011-12-01 21:26:22 +00:00
|
|
|
dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-03 17:22:02 +00:00
|
|
|
{
|
2012-11-29 10:57:33 +00:00
|
|
|
proto_item *flag_item, *qua_item, *qui_item;
|
|
|
|
proto_tree *flag_tree, *qua_tree, *qui_tree;
|
2012-05-07 22:11:34 +00:00
|
|
|
gint offset;
|
|
|
|
guint8 tmp, nhi, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_len;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-12-01 21:26:22 +00:00
|
|
|
flag_item = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag_item, ett_gtpv2_mm_context_flag);
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 5
|
|
|
|
* Bits
|
|
|
|
* 8 7 6 5 4 3 2 1
|
|
|
|
* Security Mode | NHI | DRXI | KSIASME
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nhi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
/* If NHI (Next Hop Indicator), bit 5 of octet 5, is set to "1",
|
|
|
|
* then the optional parameters NH (Next Hop) and NCC (Next
|
|
|
|
* Hop Chaining Count) are both present, otherwise their octets are not present.
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
tmp = tvb_get_guint8(tvb, offset);
|
|
|
|
nhi = (tmp & 0x10) >> 4;
|
|
|
|
drxi = (tmp & 0x08) >> 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
/* Octet 6
|
|
|
|
* Bits
|
|
|
|
* 8 7 6 5 4 3 2 1
|
|
|
|
* Number of | Number of | UAMB | OSCI
|
|
|
|
* Quintuplets | Quadruplet | RI |
|
|
|
|
*/
|
2012-05-07 22:11:34 +00:00
|
|
|
tmp = tvb_get_guint8(tvb, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
nr_qui = (tmp & 0xe0) >> 5;
|
2012-04-12 14:07:31 +00:00
|
|
|
nr_qua = tmp & 0x1c;
|
2011-12-14 00:06:16 +00:00
|
|
|
nr_qua >>= 2;
|
2012-11-26 16:50:13 +00:00
|
|
|
uamb_ri = (tmp & 0x2) >> 1;
|
2011-12-01 21:26:22 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-12-14 00:06:16 +00:00
|
|
|
/* UAMB RI */
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
/* OSCI */
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_osci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-12-01 21:26:22 +00:00
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 7 SAMB RI Used NAS integrity protection algorithm Used NAS Cipher*/
|
2011-12-01 21:26:22 +00:00
|
|
|
/* SAMB RI */
|
2012-05-07 22:11:34 +00:00
|
|
|
samb_ri = tvb_get_guint8(tvb, offset) >> 7;
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, offset << 3, 1, ENC_BIG_ENDIAN);
|
2011-12-14 00:06:16 +00:00
|
|
|
/* Used NAS integrity protection algorithm */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unipa, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Used NAS Cipher */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 8-10 NAS Downlink Count*/
|
2012-09-12 10:21:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_dl_cnt, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 3;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 11-13 NAS Uplink Count */
|
2012-09-12 10:21:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_ul_cnt, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 3;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-12-14 00:06:16 +00:00
|
|
|
/* Octet 14-45 */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_BIG_ENDIAN);
|
|
|
|
offset += 32;
|
|
|
|
|
2012-11-29 10:57:33 +00:00
|
|
|
qua_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quadruplets %u", nr_qua);
|
|
|
|
if ( nr_qua ){
|
|
|
|
qua_tree = proto_item_add_subtree(qua_item, ett_gtpv2_qua);
|
|
|
|
offset = dissect_gtpv2_authentication_quadruplets(tvb, qua_tree, offset, nr_qua);
|
|
|
|
}else {
|
|
|
|
PROTO_ITEM_SET_GENERATED(qua_item);
|
2011-12-14 00:06:16 +00:00
|
|
|
}
|
|
|
|
|
2012-11-29 10:57:33 +00:00
|
|
|
qui_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quintuplets %u", nr_qui);
|
2012-11-26 16:50:13 +00:00
|
|
|
if (nr_qui) {
|
2012-11-29 10:57:33 +00:00
|
|
|
qui_tree = proto_item_add_subtree(qui_item, ett_gtpv2_qui);
|
2012-11-29 12:04:11 +00:00
|
|
|
offset = dissect_gtpv2_authentication_quintuplets(tvb, qui_tree, offset, nr_qui);
|
2012-11-29 10:57:33 +00:00
|
|
|
}else{
|
|
|
|
PROTO_ITEM_SET_GENERATED(qui_item);
|
2011-12-14 00:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* (h+1) to (h+2) DRX parameter */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2011-12-14 00:06:16 +00:00
|
|
|
|
|
|
|
/* Octet p to p+31 & Octet p+32 */
|
|
|
|
if ( nhi )
|
|
|
|
{
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 32, "NH (Next Hop): %s",
|
2013-12-19 15:49:09 +00:00
|
|
|
tvb_bytes_to_ep_str(tvb, offset, 32));
|
2011-12-14 00:06:16 +00:00
|
|
|
offset += 32;
|
|
|
|
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 1, "NCC (Next Hop Chaining Count): %d",
|
|
|
|
(tvb_get_guint8(tvb, offset) & 0x0f));
|
|
|
|
offset += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
2011-12-14 00:06:16 +00:00
|
|
|
|
|
|
|
/* r+1 Spare HNNA ENA INA GANA GENA UNA */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset < (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2011-12-14 00:06:16 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (offset == (gint)length) {
|
2012-05-07 22:11:34 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* r+2 Length of Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
vdp_len = tvb_get_guint8(tvb, offset);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* (r+3) to s Voice Domain Preference and UE's Usage Setting */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (vdp_len) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, vdp_len, "Voice Domain Preference and UE's Usage Setting");
|
2012-11-26 16:50:13 +00:00
|
|
|
/*offset += vdp_len;*/
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/*
|
|
|
|
* Type = 108 (decimal)
|
|
|
|
* Figure 8.38-6: UMTS Key, Quadruplets and Quintuplets
|
|
|
|
*/
|
2011-01-12 16:43:59 +00:00
|
|
|
static void
|
2011-01-12 17:05:58 +00:00
|
|
|
dissect_gtpv2_mm_context_utms_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-12 16:43:59 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *flag;
|
|
|
|
proto_tree *flag_tree;
|
|
|
|
guint32 offset;
|
2013-04-22 19:03:12 +00:00
|
|
|
guint8 tmp, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_length;
|
2011-01-12 16:43:59 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
|
|
|
flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
|
|
|
|
flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
|
2011-01-12 16:43:59 +00:00
|
|
|
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 5
|
|
|
|
* Security Mode Spare DRXI KSIASME
|
|
|
|
*/
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2013-04-19 16:06:55 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
drxi = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
/* Octet 6
|
|
|
|
* Bits
|
|
|
|
* 8 7 6 5 4 3 2 1
|
|
|
|
* Number of | Number of | UAMB | SAMB
|
|
|
|
* Quintuplets | Quadruplet | RI | RI
|
|
|
|
*/
|
2012-05-07 22:11:34 +00:00
|
|
|
tmp = tvb_get_guint8(tvb, offset);
|
2012-11-26 16:50:13 +00:00
|
|
|
nr_qui = (tmp & 0xe0) >> 5;
|
2012-04-12 14:07:31 +00:00
|
|
|
nr_qua = tmp & 0x1c;
|
|
|
|
nr_qua >>= 2;
|
2012-11-26 16:50:13 +00:00
|
|
|
uamb_ri = (tmp & 0x2) >> 1;
|
2012-05-07 22:11:34 +00:00
|
|
|
samb_ri = tmp & 0x01;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN);
|
2012-04-12 14:07:31 +00:00
|
|
|
offset += 1;
|
|
|
|
/* Octet 7 Spare */
|
|
|
|
proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 8 to 23 CK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-12 14:07:31 +00:00
|
|
|
/* Octet 24 to 39 IK */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 16;
|
2012-04-12 14:07:31 +00:00
|
|
|
|
|
|
|
if ( nr_qua )
|
|
|
|
{
|
|
|
|
offset = dissect_gtpv2_authentication_quadruplets(tvb, tree, offset, nr_qui);
|
|
|
|
}
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (nr_qui) {
|
2012-05-07 22:11:34 +00:00
|
|
|
offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
|
2012-04-12 14:07:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* (h+1) to (h+2) DRX parameter */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (drxi) {
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Dissect octet j to r */
|
|
|
|
offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
if (offset >= (guint32)length) {
|
|
|
|
return;
|
|
|
|
}
|
2012-04-12 14:07:31 +00:00
|
|
|
/* r+1 Spare HNNA ENA INA GANA GENA UNA */
|
2013-04-22 19:03:12 +00:00
|
|
|
offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
|
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
if (offset >= (guint32)length) {
|
|
|
|
return;
|
|
|
|
}
|
2013-04-22 19:03:12 +00:00
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
/* The Voice Domain Preference and UE's Usage Setting coding is specified in clause 10.5.5.28 of 3GPP TS 24.008 [5]. If
|
2013-04-22 19:03:12 +00:00
|
|
|
* Length of Voice Domain Preference and UE's Usage Setting is zero, then the Voice Domain Preference and UE's Usage
|
|
|
|
* Setting parameter shall not be present.
|
|
|
|
*/
|
2013-06-14 02:44:15 +00:00
|
|
|
vdp_length = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_vdp_length, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset++;
|
2013-04-22 19:03:12 +00:00
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
if(vdp_length !=0){
|
|
|
|
offset += de_gmm_voice_domain_pref(tvb, tree, pinfo, offset, vdp_length, NULL, 0);
|
|
|
|
}
|
2012-04-12 14:07:31 +00:00
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
if (offset < (guint32)length) {
|
|
|
|
proto_tree_add_text(tree, tvb, offset, -1, "The rest of the IE not dissected yet");
|
|
|
|
}
|
2011-01-12 16:43:59 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.39 PDN Connection (grouped IE)
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_PDN_conn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-06-28 15:31:41 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2010-06-28 15:31:41 +00:00
|
|
|
proto_tree *grouped_tree;
|
2012-05-07 22:11:34 +00:00
|
|
|
tvbuff_t *new_tvb;
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
proto_item_append_text(item, "[Grouped IE]");
|
|
|
|
grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
|
2011-01-03 17:22:02 +00:00
|
|
|
new_tvb = tvb_new_subset(tvb, offset, length, length );
|
|
|
|
|
2011-05-20 20:10:41 +00:00
|
|
|
dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type);
|
2010-06-28 15:31:41 +00:00
|
|
|
}
|
|
|
|
/*
|
2010-05-10 15:54:57 +00:00
|
|
|
* 8.40 PDU Numbers
|
2011-01-07 15:21:23 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_pdn_numbers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item *nsapi_ti;
|
|
|
|
proto_tree *nsapi_tree;
|
|
|
|
guint8 nsapi;
|
|
|
|
guint16 dlgtpu_seq, ulgtpu_seq, send_npdu_nr, rec_npdu_nr;
|
|
|
|
int offset = 0;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
nsapi = (tvb_get_guint8(tvb, offset) & 0x08);
|
|
|
|
nsapi_ti = proto_tree_add_text(tree, tvb, offset, 1, "NSAPI: %d", nsapi);
|
|
|
|
nsapi_tree = proto_item_add_subtree(nsapi_ti, ett_gtpv2_pdn_numbers_nsapi);
|
2012-12-11 09:39:15 +00:00
|
|
|
proto_tree_add_bits_item(nsapi_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(nsapi_tree, hf_gtpv2_pdn_numbers_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 20:31:51 +00:00
|
|
|
proto_item_append_text(item, "NSAPI: %u", nsapi);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
dlgtpu_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "DL GTP-U Sequence Number: %d", dlgtpu_seq);
|
|
|
|
offset += 2;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
ulgtpu_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "UL GTP-U Sequence Number: %d", ulgtpu_seq);
|
|
|
|
offset += 2;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
send_npdu_nr = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "Send N-PDU Number: %d", send_npdu_nr);
|
|
|
|
offset += 2;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
rec_npdu_nr = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "Receive N-PDU Number: %d", rec_npdu_nr);
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-07 15:21:23 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.41 Packet TMSI (P-TMSI)
|
2011-01-07 15:21:23 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_p_tmsi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
int offset = 0;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* The TMSI consists of 4 octets. It can be coded using a full hexadecimal representation. */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_p_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_item_append_text(item, "%s", tvb_bytes_to_ep_str(tvb, offset, 4));
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-07 15:21:23 +00:00
|
|
|
/*
|
2009-06-11 16:25:35 +00:00
|
|
|
* 8.42 P-TMSI Signature
|
2011-01-07 15:21:23 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_p_tmsi_sig(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
int offset = 0;
|
2011-01-07 19:01:17 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* The P-TMSI Signature consists of 3 octets and may be allocated by the SGSN. */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_p_tmsi_sig, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_item_append_text(item, "%s", tvb_bytes_to_ep_str(tvb, offset, 3));
|
2011-01-07 15:21:23 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-07 15:21:23 +00:00
|
|
|
/*
|
2009-06-11 16:25:35 +00:00
|
|
|
* 8.43 Hop Counter
|
2009-07-30 21:11:26 +00:00
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_hop_counter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-08-03 21:14:04 +00:00
|
|
|
guint8 hop_counter;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
hop_counter = tvb_get_guint8(tvb, offset);
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 1, "Hop Counter: %d", hop_counter);
|
2011-08-03 20:31:51 +00:00
|
|
|
proto_item_append_text(item, "%d", hop_counter);
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.44 UE Time Zone
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static const value_string gtpv2_ue_time_zone_dst_vals[] = {
|
|
|
|
{0, "No Adjustments for Daylight Saving Time"},
|
|
|
|
{1, "+1 Hour Adjustments for Daylight Saving Time"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{2, "+2 Hour Adjustments for Daylight Saving Time"},
|
2009-07-30 21:11:26 +00:00
|
|
|
{3, "Spare"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
int offset = 0;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/*
|
|
|
|
* UE Time Zone is used to indicate the offset between universal time and local time in steps of 15 minutes of where the
|
|
|
|
* UE currently resides. The "Time Zone" field uses the same format as the "Time Zone" IE in 3GPP TS 24.008 [5].
|
|
|
|
* (packet-gsm_a_dtap.c)
|
|
|
|
*/
|
|
|
|
de_time_zone(tvb, tree, pinfo, offset, 1, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(item, hf_gtpv2_ue_time_zone_dst, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
/*
|
|
|
|
* 8.45 Trace Reference
|
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_trace_reference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint32 trace_id;
|
|
|
|
gchar *mcc_mnc_str;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2013-09-21 11:08:35 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, TRUE);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 3;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
trace_id = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 3, "Trace ID: %d", trace_id);
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s,Trace ID %u", mcc_mnc_str, trace_id);
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2010-12-30 14:09:09 +00:00
|
|
|
/*
|
2010-06-28 15:31:41 +00:00
|
|
|
* 8.46 Complete Request Message
|
2010-12-30 14:09:09 +00:00
|
|
|
*/
|
|
|
|
static const value_string gtpv2_complete_req_msg_type_vals[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{0, "Complete Attach Request Message" },
|
|
|
|
{1, "Complete TAU Request Message" },
|
|
|
|
{0, NULL }
|
2010-12-30 14:09:09 +00:00
|
|
|
};
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_complete_request_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2010-12-30 14:09:09 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
tvbuff_t *new_tvb;
|
|
|
|
int offset;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_complete_req_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Add the Complete Request Message */
|
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
2010-12-30 14:09:09 +00:00
|
|
|
call_dissector(nas_eps_handle, new_tvb, pinfo, tree);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.47 GUTI
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
2010-12-30 14:09:09 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_guti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2010-12-30 14:09:09 +00:00
|
|
|
{
|
|
|
|
int offset = 0;
|
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
offset = 0;
|
2011-01-04 18:41:25 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, TRUE);
|
|
|
|
offset += 3;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mme_grp_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
offset += 2;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mme_code, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-12-30 14:09:09 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_m_tmsi, tvb, offset, 4, ENC_NA);
|
2010-12-30 14:09:09 +00:00
|
|
|
}
|
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.48 Fully Qualified Container (F-Container)
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static const value_string gtpv2_container_type_vals[] = {
|
|
|
|
{1, "UTRAN transparent container"},
|
|
|
|
{2, "BSS container"},
|
|
|
|
{3, "E-UTRAN transparent container"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_F_container(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type, guint8 instance _U_)
|
2010-06-28 15:31:41 +00:00
|
|
|
{
|
2012-11-26 16:50:13 +00:00
|
|
|
tvbuff_t *new_tvb;
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_item *bss_item;
|
|
|
|
proto_tree *sub_tree;
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 container_type;
|
|
|
|
guint8 container_flags, xid_len;
|
2010-06-28 15:31:41 +00:00
|
|
|
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Octets 8 7 6 5 4 3 2 1
|
|
|
|
* 5 Spare | Container Type
|
2011-04-21 18:09:13 +00:00
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_container_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
container_type = tvb_get_guint8(tvb, offset);
|
|
|
|
offset += 1;
|
|
|
|
if ( (message_type == GTPV2_FORWARD_RELOCATION_REQ)
|
|
|
|
|| (message_type == GTPV2_CONTEXT_RESPONSE)
|
|
|
|
|| (message_type == GTPV2_RAN_INFORMATION_RELAY)) {
|
|
|
|
switch (container_type) {
|
2011-11-06 08:18:26 +00:00
|
|
|
case 2:
|
|
|
|
/* BSS container */
|
|
|
|
bss_item = proto_tree_add_text(tree, tvb, offset, length, "BSS container");
|
2011-12-01 21:26:22 +00:00
|
|
|
sub_tree = proto_item_add_subtree(bss_item, ett_gtpv2_bss_con);
|
2011-11-06 08:18:26 +00:00
|
|
|
/* The flags PFI, RP, SAPI and PHX in octet 6 indicate the corresponding type of paratemer */
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_container_phx, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
container_flags = tvb_get_guint8(tvb, offset);
|
|
|
|
offset += 1;
|
|
|
|
if ((container_flags & 0x01) == 1) {
|
2011-11-06 08:18:26 +00:00
|
|
|
/* Packet Flow ID present */
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-11-06 08:18:26 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (((container_flags & 0x04) == 4) || ((container_flags & 0x02) == 2)) {
|
|
|
|
if ((container_flags & 0x04) == 4) {
|
2011-11-06 08:18:26 +00:00
|
|
|
/* SAPI present */
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-11-06 08:18:26 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((container_flags & 0x02) == 2) {
|
2011-11-06 08:18:26 +00:00
|
|
|
/* Radio Priority present */
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-11-06 08:18:26 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-11-06 08:18:26 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((container_flags & 0x08) == 8) {
|
2011-11-06 08:18:26 +00:00
|
|
|
/* XiD parameters length is present in Octet c.
|
|
|
|
* XiD parameters are present in Octet d to n.
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
xid_len = tvb_get_guint8(tvb, offset);
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid, tvb, offset, xid_len, ENC_BIG_ENDIAN);
|
2011-11-06 08:18:26 +00:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
if (message_type == GTPV2_FORWARD_CTX_NOTIFICATION) {
|
|
|
|
switch (container_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 3:
|
|
|
|
/* E-UTRAN transparent container */
|
2012-11-26 16:50:13 +00:00
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
|
|
|
dissect_s1ap_ENB_StatusTransfer_TransparentContainer_PDU(new_tvb, pinfo, tree, NULL);
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 7.3.2 Forward Relocation Response
|
|
|
|
* E-UTRAN Transparent Container
|
|
|
|
* This IE is conditionally included only during a handover to
|
|
|
|
* E-UTRAN and contains the radio-related and core network
|
|
|
|
* information. If the Cause IE contains the value "Request
|
|
|
|
* accepted", this IE shall be included.
|
|
|
|
*/
|
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.49 Fully Qualified Cause (F-Cause)
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static const value_string gtpv2_cause_type_vals[] = {
|
|
|
|
{0, "Radio Network Layer"},
|
|
|
|
{1, "Transport Layer"},
|
|
|
|
{2, "NAS"},
|
|
|
|
{3, "Protocol"},
|
|
|
|
{4, "Miscellaneous"},
|
|
|
|
{5, "<spare>"},
|
|
|
|
{6, "<spare>"},
|
|
|
|
{7, "<spare>"},
|
|
|
|
{8, "<spare>"},
|
|
|
|
{9, "<spare>"},
|
|
|
|
{10, "<spare>"},
|
|
|
|
{11, "<spare>"},
|
|
|
|
{12, "<spare>"},
|
|
|
|
{13, "<spare>"},
|
|
|
|
{14, "<spare>"},
|
|
|
|
{15, "<spare>"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2010-07-21 12:29:32 +00:00
|
|
|
static value_string_ext gtpv2_cause_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_cause_type_vals);
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_F_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-06-28 15:31:41 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-04-21 18:09:13 +00:00
|
|
|
guint8 cause_type;
|
|
|
|
|
|
|
|
/* The value of Instance field of the F-Cause IE in a GTPv2 message shall indicate
|
|
|
|
* whether the F-Cause field contains RANAP Cause, BSSGP Cause or RAN Cause.
|
|
|
|
* If the F-Cause field contains RAN Cause, the Cause Type field shall contain
|
|
|
|
* the RAN cause subcategory as specified in 3GPP TS 36.413 [10] and it shall be
|
|
|
|
* encoded as in Table 8.49-1.
|
|
|
|
* If the F-Cause field contains BSSGP Cause or RANAP Cause,
|
|
|
|
* the Cause Type field shall be ignored by the receiver.
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (message_type == GTPV2_FORWARD_RELOCATION_REQ) {
|
|
|
|
switch (instance) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 0:
|
|
|
|
proto_item_append_text(item, "[RAN Cause]");
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
cause_type = tvb_get_guint8(tvb, offset);
|
|
|
|
offset += 1;
|
|
|
|
switch (cause_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 0:
|
|
|
|
/* CauseRadioNetwork */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_CauseRadioNetwork, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
/* CauseTransport */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_CauseTransport, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
/* CauseNas */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_CauseNas, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
/* CauseProtocol */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_CauseProtocol, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
/* CauseMisc */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_CauseMisc, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
proto_item_append_text(item, "[RANAP Cause]");
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
proto_item_append_text(item, "[BSSGP Cause]");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.50 Selected PLMN ID
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* The Selected PLMN ID IE contains the core network operator selected for tne UE
|
|
|
|
* in a shared network. Octets 5-7 shall be encoded as the content part of the
|
|
|
|
* "Selected PLMN Identity" parameter in 3GPP TS 36.413 [10].
|
2011-01-07 15:21:23 +00:00
|
|
|
* -The Selected PLMN identity consists of 3 digits from MCC followed by
|
|
|
|
* either -a filler digit plus 2 digits from MNC (in case of 2 digit MNC) or
|
|
|
|
* -3 digits from MNC (in case of a 3 digit MNC).
|
2013-01-24 09:56:28 +00:00
|
|
|
*
|
|
|
|
* 8 7 6 5 4 3 2 1
|
|
|
|
* +--+--+--+--+--+--+--+--+
|
|
|
|
* Octet 5 |MCC digit 2|MCC digit 1|
|
|
|
|
* +--+--+--+--+--+--+--+--+
|
|
|
|
* Octet 6 |MNC digit 1|MCC digit 3|
|
|
|
|
* +--+--+--+--+--+--+--+--+
|
|
|
|
* Octet 7 |MNC digit 3|MNC digit 2|
|
|
|
|
* +--+--+--+--+--+--+--+--+
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2011-01-07 15:21:23 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_sel_plmn_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 15:21:23 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
gchar *mcc_mnc_str;
|
2011-01-07 15:21:23 +00:00
|
|
|
|
2013-09-21 11:08:35 +00:00
|
|
|
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, FALSE);
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s", mcc_mnc_str);
|
2011-01-07 15:21:23 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.51 Target Identification
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
static const value_string gtpv2_target_type_vals[] = {
|
|
|
|
{0, "RNC ID"},
|
|
|
|
{1, "Macro eNodeB ID"},
|
|
|
|
{2, "Cell Identifier"},
|
|
|
|
{3, "Home eNodeB ID"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2010-07-21 12:29:32 +00:00
|
|
|
static value_string_ext gtpv2_target_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_target_type_vals);
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_target_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-06-28 15:31:41 +00:00
|
|
|
{
|
2012-11-26 16:50:13 +00:00
|
|
|
tvbuff_t *new_tvb;
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 target_type;
|
2010-06-28 15:31:41 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_target_type, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
target_type = tvb_get_guint8(tvb, offset);
|
|
|
|
offset += 1;
|
|
|
|
switch (target_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 0:
|
2012-12-09 18:17:47 +00:00
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
|
|
|
dissect_e212_mcc_mnc(new_tvb, pinfo, tree, 0, TRUE);
|
|
|
|
offset += 3;
|
|
|
|
/* LAC */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
|
|
|
offset+=2;
|
|
|
|
|
|
|
|
/* RAC (see NOTE 3) */
|
2012-12-09 18:22:09 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_rac, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-12-09 18:17:47 +00:00
|
|
|
offset++;
|
2011-08-03 21:14:04 +00:00
|
|
|
/* RNC ID
|
|
|
|
* In this case the Target ID field shall be encoded as the Target
|
|
|
|
* RNC-ID part of the "Target ID" parameter in 3GPP TS 25.413 [33]. Therefore, the "Choice Target ID" that indicates
|
|
|
|
* "Target RNC-ID" (numerical value of 0x20) shall not be included (value in octet 5 specifies the target type).
|
|
|
|
*/
|
2012-12-07 14:41:05 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-12-09 18:17:47 +00:00
|
|
|
/* If the optional Extended RNC-ID is not included, then the length variable 'n' = 8 and the overall length of the IE is 11
|
|
|
|
* octets. Otherwise, 'n' = 10 and the overall length of the IE is 13 octets
|
|
|
|
*/
|
|
|
|
if(length == 11){
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ext_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
|
|
|
}
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
|
|
|
case 1:
|
|
|
|
/* Macro eNodeB ID*/
|
2012-11-26 16:50:13 +00:00
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
|
|
|
dissect_e212_mcc_mnc(new_tvb, pinfo, tree, 0, TRUE);
|
|
|
|
offset += 3;
|
2011-08-03 21:14:04 +00:00
|
|
|
/* The Macro eNodeB ID consists of 20 bits.
|
|
|
|
* Bit 4 of Octet 4 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_macro_enodeb_id, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Tracking Area Code (TAC) */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_uli_tai_tac, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
/* Cell Identifier */
|
|
|
|
/* Target ID field shall be same as the Octets 3 to 10 of the Cell Identifier IEI
|
|
|
|
* in 3GPP TS 48.018 [34].
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
|
|
|
de_bssgp_cell_id(new_tvb, tree, pinfo, 0, 0/* not used */, NULL, 0);
|
2011-11-09 02:48:51 +00:00
|
|
|
return;
|
2011-08-03 21:14:04 +00:00
|
|
|
case 3:
|
|
|
|
/* Home eNodeB ID */
|
2012-11-26 16:50:13 +00:00
|
|
|
new_tvb = tvb_new_subset_remaining(tvb, offset);
|
|
|
|
dissect_e212_mcc_mnc(new_tvb, pinfo, tree, 0, TRUE);
|
|
|
|
offset += 3;
|
2011-11-09 02:48:51 +00:00
|
|
|
/* Octet 10 to 12 Home eNodeB ID
|
|
|
|
* The Home eNodeB ID consists of 28 bits. See 3GPP TS 36.413 [10].
|
|
|
|
* Bit 4 of Octet 9 is the most significant bit and bit 1 of Octet 12 is the least significant bit.
|
|
|
|
* The coding of the Home eNodeB ID is the responsibility of each administration.
|
|
|
|
* Coding using full hexadecimal representation shall be used.
|
|
|
|
*/
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_home_enodeb_id, tvb, offset, 4 , ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2011-08-03 21:14:04 +00:00
|
|
|
/* Octet 13 to 14 Tracking Area Code (TAC) */
|
2011-11-09 02:48:51 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2 , ENC_BIG_ENDIAN);
|
|
|
|
return;
|
2011-08-03 21:14:04 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 8.52 Void
|
2011-01-08 20:09:29 +00:00
|
|
|
*/
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.53 Packet Flow ID
|
2011-01-08 20:09:29 +00:00
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_pkt_flow_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-08 20:09:29 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
int offset = 0;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 5 Spare EBI */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Packet Flow ID */
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length, "Packet Flow ID: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2011-01-08 20:09:29 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.54 RAB Context
|
2011-01-08 20:09:29 +00:00
|
|
|
*/
|
2011-01-08 20:26:35 +00:00
|
|
|
static void
|
2011-01-08 20:09:29 +00:00
|
|
|
dissect_gtpv2_rab_context(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint16 dlgtpu_seq, ulgtpu_seq, dl_pdcp_seq, ul_pdcp_seq;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 5 Spare NSAPI */
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-12-11 09:39:15 +00:00
|
|
|
offset++;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 6 to 7 DL GTP-U Sequence Number */
|
|
|
|
dlgtpu_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "DL GTP-U Sequence Number: %d", dlgtpu_seq);
|
|
|
|
offset += 2;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 8 to 9 UL GTP-U Sequence Number */
|
|
|
|
ulgtpu_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "UL GTP-U Sequence Number: %d", ulgtpu_seq);
|
|
|
|
offset += 2;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 10 to 11 DL PDCP Sequence Number */
|
|
|
|
dl_pdcp_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "DL PDCP Sequence Number: %d", dl_pdcp_seq);
|
|
|
|
offset += 2;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* 12 to 13 UL PDCP Sequence Number */
|
|
|
|
ul_pdcp_seq = tvb_get_ntohs(tvb, offset);
|
|
|
|
proto_tree_add_text(tree, tvb, offset, 2, "UL PDCP Sequence Number: %d", ul_pdcp_seq);
|
2011-01-08 20:09:29 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-08 20:09:29 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.55 Source RNC PDCP context info
|
2009-02-13 06:10:57 +00:00
|
|
|
*/
|
2011-01-08 20:09:29 +00:00
|
|
|
static void
|
|
|
|
dissect_gtpv2_s_rnc_pdcp_ctx_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, 0, length, "RRC Container");
|
2011-01-08 20:09:29 +00:00
|
|
|
}
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-01-08 20:09:29 +00:00
|
|
|
/*
|
|
|
|
* 8.56 UDP Source Port Number
|
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_udp_s_port_nr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-08 20:09:29 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, 0, 2, "UPD Source Port Number: %u", tvb_get_ntohs(tvb, 0));
|
2011-08-03 20:31:51 +00:00
|
|
|
proto_item_append_text(item, "%u", tvb_get_ntohs(tvb, 0));
|
2011-01-08 20:09:29 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.57 APN Restriction
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_apn_rest(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
guint8 type_value;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
type_value = tvb_get_guint8(tvb, 0);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_apn_rest, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2011-01-03 17:22:02 +00:00
|
|
|
proto_item_append_text(item, "value %u", type_value);
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.58 Selection Mode
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static const value_string gtpv2_selec_mode_vals[] = {
|
|
|
|
{0, "MS or network provided APN, subscribed verified"},
|
|
|
|
{1, "MS provided APN, subscription not verified"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{2, "Network provided APN, subscription not verified"},
|
2009-07-30 21:11:26 +00:00
|
|
|
{3, "Network provided APN, subscription not verified (Basically for Future use"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
2012-10-29 16:02:51 +00:00
|
|
|
void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_selec_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 ss_mode;
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
ss_mode = tvb_get_guint8(tvb, offset) & 0x03;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_selec_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item_append_text(item, "%s", val_to_str_const(ss_mode, gtpv2_selec_mode_vals, "Unknown"));
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.59 Source Identification
|
|
|
|
*/
|
2013-10-23 06:29:11 +00:00
|
|
|
#if 0
|
2011-01-04 07:14:11 +00:00
|
|
|
static const value_string gtpv2_source_ident_types[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{0, "Cell ID"},
|
|
|
|
{1, "RNC ID"},
|
|
|
|
{2, "eNodeB ID(Reserved, used in erlier v of proto.)"},
|
|
|
|
{0, NULL}
|
2011-01-04 07:14:11 +00:00
|
|
|
};
|
2013-10-23 06:29:11 +00:00
|
|
|
#endif
|
2011-01-04 07:14:11 +00:00
|
|
|
static void
|
2011-04-04 14:37:25 +00:00
|
|
|
dissect_gtpv2_source_ident(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-04 07:14:11 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 source_type;
|
2011-01-04 07:14:11 +00:00
|
|
|
|
|
|
|
/* Octet 5 to 12 Target Cell ID */
|
2011-04-21 18:09:13 +00:00
|
|
|
de_cell_id(tvb, tree, pinfo, offset, 8, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 8;
|
2011-01-04 07:14:11 +00:00
|
|
|
/* Octet 13 Source Type */
|
2011-04-21 18:09:13 +00:00
|
|
|
source_type = tvb_get_guint8(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_source_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-01-04 07:14:11 +00:00
|
|
|
/* Octet 14 to (n+4) Source ID */
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (source_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 0:
|
|
|
|
/* The Source Type is Cell ID for PS handover from GERAN A/Gb mode. In this case the coding of the Source ID field
|
|
|
|
* shall be same as the Octets 3 to 10 of the Cell Identifier IEI in 3GPP TS 48.018 [34].
|
|
|
|
*/
|
2012-04-13 20:22:31 +00:00
|
|
|
de_cell_id(tvb, tree, pinfo, offset, 8, NULL, 0);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
/* The Source Type is RNC ID for PS handover from GERAN Iu mode or for inter-RAT handover from UTRAN. In this
|
|
|
|
* case the Source ID field shall be encoded as as the Source RNC-ID part of the "Source ID" parameter in 3GPP TS
|
|
|
|
* 25.413 [33].
|
|
|
|
*/
|
|
|
|
/* RNC-ID M INTEGER (0..4095) */
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
break;
|
|
|
|
default:
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_source_type_unknown, tvb, offset-1, 1);
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-03 17:22:02 +00:00
|
|
|
|
2011-01-04 07:14:11 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2011-01-03 17:22:02 +00:00
|
|
|
* 8.60 Bearer Control Mode
|
|
|
|
*/
|
2011-04-21 18:09:13 +00:00
|
|
|
static const value_string gtpv2_bearer_control_mode_vals[] = {
|
2009-07-30 21:11:26 +00:00
|
|
|
{0, "Selected Bearer Control Mode-'MS_only'"},
|
|
|
|
{1, "Selected Bearer Control Mode-'Network_only'"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{2, "Selected Bearer Control Mode-'MS/NW'"},
|
2009-07-30 21:11:26 +00:00
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-11-26 16:50:13 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
static const value_string gtpv2_bearer_control_mode_short_vals[] = {
|
2011-01-04 07:14:11 +00:00
|
|
|
{0, "MS_only"},
|
|
|
|
{1, "Network_only"},
|
|
|
|
{2, "MS/NW"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2009-07-30 21:11:26 +00:00
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_bearer_control_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
guint8 bcm;
|
2011-01-04 07:14:11 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_bearer_control_mode, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2011-01-04 07:14:11 +00:00
|
|
|
/* Add Bearer Control Mode to tree */
|
|
|
|
bcm = tvb_get_guint8(tvb, 0);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item_append_text(item, "%s", val_to_str_const(bcm, gtpv2_bearer_control_mode_short_vals, "Unknown"));
|
2011-01-04 07:14:11 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
2009-02-13 06:10:57 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.61 Change Reporting Action
|
2009-02-13 06:10:57 +00:00
|
|
|
*/
|
|
|
|
static const value_string gtpv2_cng_rep_act_vals[] = {
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, "Stop Reporting"},
|
|
|
|
{1, "Start Reporting CGI/SAI"},
|
|
|
|
{2, "Start Reporting RAI"},
|
2011-01-03 17:22:02 +00:00
|
|
|
{3, "Start Reporting TAI"},
|
|
|
|
{4, "Start Reporting ECGI"},
|
|
|
|
{5, "Start Reporting CGI/SAI and RAI"},
|
|
|
|
{6, "Start Reporting TAI and ECGI"},
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, NULL}
|
2009-02-13 06:10:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_cng_rep_act(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-02-13 06:10:57 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
guint8 action;
|
2011-01-03 17:22:02 +00:00
|
|
|
|
|
|
|
/* Add Action to tree */
|
|
|
|
action = tvb_get_guint8(tvb, 0);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cng_rep_act, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2009-02-13 06:10:57 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item_append_text(item, "%s", val_to_str_const(action, gtpv2_cng_rep_act_vals, "Unknown"));
|
2009-02-13 06:10:57 +00:00
|
|
|
}
|
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID)
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2013-10-23 06:29:11 +00:00
|
|
|
#if 0
|
2011-01-08 20:09:29 +00:00
|
|
|
static const value_string gtpv2_fq_csid_type_vals[] = {
|
|
|
|
{0, "Global unicast IPv4 address"},
|
|
|
|
{1, "Global unicast IPv6 address"},
|
|
|
|
{2, "4 octets long field"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2013-10-23 06:29:11 +00:00
|
|
|
#endif
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2012-10-29 16:02:51 +00:00
|
|
|
void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-08 20:09:29 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-11-26 16:50:13 +00:00
|
|
|
guint8 octet, node_id_type, csids;
|
2012-05-07 22:11:34 +00:00
|
|
|
guint32 node_id, node_id_mcc_mnc;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Octet 5 Node-ID Type Number of CSIDs= m */
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
octet = tvb_get_guint8(tvb, offset);
|
|
|
|
node_id_type = octet >> 4;
|
|
|
|
csids = octet & 0x0f;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_fq_csid_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_fq_csid_nr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (node_id_type) {
|
2011-08-03 21:14:04 +00:00
|
|
|
case 0:
|
|
|
|
/* Indicates that Node-ID is a global unicast IPv4 address and p = 9 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
offset += 4;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
/* Indicates that Node-ID is a global unicast IPv6 address and p = 21 */
|
2011-10-10 00:39:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv6, tvb, offset, 16, ENC_NA);
|
2011-08-03 21:14:04 +00:00
|
|
|
offset += 16;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
/* Node-ID is a 4 octets long field with a 32 bit value stored in network order, and p= 9. The coding
|
|
|
|
* of the field is specified below:
|
|
|
|
* - Most significant 20 bits are the binary encoded value of (MCC * 1000 + MNC).
|
|
|
|
* - Least significant 12 bits is a 12 bit integer assigned by an operator to an MME, SGW or PGW. Other values of
|
|
|
|
* Node-ID Type are reserved.
|
|
|
|
*/
|
|
|
|
node_id = tvb_get_ntohl(tvb, offset);
|
|
|
|
node_id_mcc_mnc = node_id >> 12;
|
|
|
|
node_id = node_id & 0xfff;
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, 4, "Node-ID: MCC+MNC %u, Id: %u", node_id_mcc_mnc, node_id);
|
|
|
|
offset += 4;
|
2011-08-03 21:14:04 +00:00
|
|
|
break;
|
|
|
|
default:
|
2013-07-03 23:43:26 +00:00
|
|
|
proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_fq_csid_type_bad, tvb, offset-1, 1,
|
|
|
|
"Wrong Node-ID Type %u, should be 0-2(Or tis is a newer spec)", node_id_type);
|
2011-08-03 21:14:04 +00:00
|
|
|
return;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-08 20:09:29 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* First PDN Connection Set Identifier (CSID)
|
|
|
|
* Second PDN Connection Set Identifier (CSID)
|
|
|
|
* :
|
|
|
|
* m-th PDN Connection Set Identifier (CSID)
|
|
|
|
*/
|
|
|
|
while ( csids-- ) {
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_fq_csid_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2011-08-03 21:14:04 +00:00
|
|
|
offset += 2;
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2011-01-08 20:09:29 +00:00
|
|
|
|
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.63 Channel needed
|
2011-01-03 17:22:02 +00:00
|
|
|
*/
|
2011-01-07 16:12:01 +00:00
|
|
|
static void
|
2011-04-04 14:37:25 +00:00
|
|
|
dissect_gtpv2_channel_needed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-07 16:12:01 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
/* The Channel needed shall be coded as depicted in Figure 8.63-1. Channel needed is coded as the IEI part and the value
|
|
|
|
* part of the Channel Needed IE defined in 3GPP TS 44.018[28]
|
|
|
|
*/
|
|
|
|
de_rr_chnl_needed(tvb, tree, pinfo, 0, length, NULL, 0);
|
2011-01-07 16:12:01 +00:00
|
|
|
}
|
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.64 eMLPP Priority
|
2011-01-08 20:09:29 +00:00
|
|
|
* The eMLPP-Priority shall be coded as depicted in Figure 8.64-1. The eMLPP Priority is coded as the value part of the
|
|
|
|
* eMLPP-Priority IE defined in 3GPP TS 48.008 [29] (not including 3GPP TS 48.008 IEI and 3GPP TS 48.008 [29]
|
|
|
|
* length indicator).
|
2009-07-30 21:11:26 +00:00
|
|
|
*/
|
2011-01-08 20:09:29 +00:00
|
|
|
static void
|
2011-04-04 14:37:25 +00:00
|
|
|
dissect_gtpv2_emlpp_pri(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2011-01-08 20:09:29 +00:00
|
|
|
{
|
2011-04-21 18:09:13 +00:00
|
|
|
be_emlpp_prio(tvb, tree, pinfo, 0, length, NULL, 0);
|
2009-07-30 21:11:26 +00:00
|
|
|
|
2011-01-08 20:09:29 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2011-01-03 17:22:02 +00:00
|
|
|
/*
|
|
|
|
* 8.65 Node Type
|
|
|
|
*/
|
2009-07-30 21:11:26 +00:00
|
|
|
static const value_string gtpv2_node_type_vals[] = {
|
2010-05-10 15:54:57 +00:00
|
|
|
{0, "MME"},
|
|
|
|
{1, "SGSN"},
|
|
|
|
{0, NULL}
|
2009-07-30 21:11:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_node_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2009-07-30 21:11:26 +00:00
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
guint8 node_type;
|
2011-01-04 07:14:11 +00:00
|
|
|
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_node_type, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2011-04-21 18:09:13 +00:00
|
|
|
/* Append Node Type to tree */
|
2011-01-04 07:14:11 +00:00
|
|
|
node_type = tvb_get_guint8(tvb, 0);
|
2012-05-07 22:11:34 +00:00
|
|
|
proto_item_append_text(item, "%s", val_to_str_const(node_type, gtpv2_node_type_vals, "Unknown"));
|
2011-01-04 07:14:11 +00:00
|
|
|
|
2009-07-30 21:11:26 +00:00
|
|
|
}
|
|
|
|
|
2011-01-04 18:41:25 +00:00
|
|
|
/*
|
2010-06-01 22:22:09 +00:00
|
|
|
* 8.66 Fully Qualified Domain Name (FQDN)
|
|
|
|
*/
|
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2010-06-01 22:22:09 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0, name_len, tmp;
|
|
|
|
guint8 *fqdn = NULL;
|
2011-04-21 18:09:13 +00:00
|
|
|
|
|
|
|
/* The FQDN field encoding shall be identical to the encoding of
|
|
|
|
* a FQDN within a DNS message of section 3.1 of IETF
|
|
|
|
* RFC 1035 [31] but excluding the trailing zero byte.
|
|
|
|
*/
|
|
|
|
if (length > 0) {
|
2011-08-03 21:14:04 +00:00
|
|
|
name_len = tvb_get_guint8(tvb, offset);
|
|
|
|
|
|
|
|
if (name_len < 0x20) {
|
2013-09-22 15:50:55 +00:00
|
|
|
fqdn = tvb_get_string(wmem_packet_scope(), tvb, offset + 1, length - 1);
|
2011-08-03 21:14:04 +00:00
|
|
|
for (;;) {
|
|
|
|
if (name_len >= length - 1)
|
|
|
|
break;
|
|
|
|
tmp = name_len;
|
|
|
|
name_len = name_len + fqdn[tmp] + 1;
|
|
|
|
fqdn[tmp] = '.';
|
|
|
|
}
|
|
|
|
} else {
|
2013-09-22 15:50:55 +00:00
|
|
|
fqdn = tvb_get_string(wmem_packet_scope(), tvb, offset, length);
|
2011-08-03 21:14:04 +00:00
|
|
|
}
|
|
|
|
proto_tree_add_string(tree, hf_gtpv2_fqdn, tvb, offset, length, fqdn);
|
|
|
|
proto_item_append_text(item, "%s", fqdn);
|
2011-04-21 18:09:13 +00:00
|
|
|
}
|
2010-06-01 22:22:09 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2010-06-01 22:22:09 +00:00
|
|
|
/*
|
2009-04-28 19:40:37 +00:00
|
|
|
* 8.67 Private Extension
|
2009-02-13 06:10:57 +00:00
|
|
|
*/
|
2010-06-01 22:22:09 +00:00
|
|
|
static void
|
2013-01-24 09:56:28 +00:00
|
|
|
dissect_gtpv2_private_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance)
|
2010-06-01 22:22:09 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2011-12-14 00:06:16 +00:00
|
|
|
tvbuff_t *next_tvb;
|
2012-05-07 22:11:34 +00:00
|
|
|
guint16 ext_id;
|
2010-06-01 22:22:09 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
/* oct 5 -7 Enterprise ID */
|
2011-12-14 00:06:16 +00:00
|
|
|
ext_id = tvb_get_ntohs(tvb, offset);
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2011-12-07 19:04:13 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(ext_id, &sminmpec_values_ext, "Unknown"), ext_id);
|
2012-09-18 07:39:14 +00:00
|
|
|
|
|
|
|
next_tvb = tvb_new_subset(tvb, offset, length-2, length-2);
|
2013-10-29 00:25:57 +00:00
|
|
|
if (dissector_try_uint_new(gtpv2_priv_ext_dissector_table, ext_id, next_tvb, pinfo, tree, FALSE, GUINT_TO_POINTER((guint32)instance))){
|
2011-12-14 00:06:16 +00:00
|
|
|
return;
|
2013-01-24 10:36:51 +00:00
|
|
|
}
|
2011-12-07 19:04:13 +00:00
|
|
|
|
2011-04-21 18:09:13 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-2, "Proprietary value");
|
2010-06-01 22:22:09 +00:00
|
|
|
}
|
2011-04-21 18:09:13 +00:00
|
|
|
|
2010-06-28 15:31:41 +00:00
|
|
|
/*
|
2011-08-03 21:14:04 +00:00
|
|
|
* 8.68 Transaction Identifier (TI)
|
2010-06-28 15:31:41 +00:00
|
|
|
*/
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_ti(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
/* 5 to (n+4) Transaction Identifier */
|
2011-10-04 22:44:31 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ti, tvb, 0, length, ENC_NA);
|
2010-06-28 15:31:41 +00:00
|
|
|
|
|
|
|
}
|
2010-06-01 22:22:09 +00:00
|
|
|
|
2012-02-02 20:56:20 +00:00
|
|
|
/*
|
|
|
|
* 8.69 MBMS Session Duration
|
|
|
|
*/
|
2012-04-25 08:39:49 +00:00
|
|
|
void
|
2012-02-04 09:41:21 +00:00
|
|
|
dissect_gtpv2_mbms_session_duration(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
int bit_offset = 0;
|
2012-02-02 20:56:20 +00:00
|
|
|
guint32 days;
|
|
|
|
guint32 hours;
|
2012-04-27 10:48:03 +00:00
|
|
|
guint32 minutes;
|
2012-02-02 20:56:20 +00:00
|
|
|
guint32 seconds;
|
2012-05-07 22:11:34 +00:00
|
|
|
|
2012-02-02 20:56:20 +00:00
|
|
|
/* From 3GPP TS 29.061 17.7.7 MBMS-Session-Duration AVP */
|
2012-04-25 08:39:49 +00:00
|
|
|
/* Bits: ssss ssss ssss ssss sddd dddd where s bits = seconds, d bits = days */
|
2012-02-02 20:56:20 +00:00
|
|
|
seconds = tvb_get_bits32(tvb, bit_offset, 17, ENC_BIG_ENDIAN);
|
|
|
|
bit_offset += 17;
|
|
|
|
|
|
|
|
days = tvb_get_bits32(tvb, bit_offset, 7, ENC_BIG_ENDIAN);
|
|
|
|
|
2012-02-06 17:29:29 +00:00
|
|
|
/* Maximum allowed value for days: 18.
|
|
|
|
* Maximum allowed value for seconds: 86,400 */
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((days > 18) || (seconds > 86400)) {
|
|
|
|
proto_tree_add_text(tree, tvb, offset, offset + 3, "Days or Seconds out or allowed range");
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-06 17:29:29 +00:00
|
|
|
/* The lowest value of this AVP (i.e. all 0:s) is reserved to indicate an indefinite value to denote sessions that are expected to be always-on. */
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((seconds == 0) && (days == 0)) {
|
2012-04-25 08:39:49 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2012-02-02 20:56:20 +00:00
|
|
|
proto_item_append_text(item, "Indefinite (always-on)");
|
2012-02-04 09:41:21 +00:00
|
|
|
} else {
|
2012-04-27 10:48:03 +00:00
|
|
|
hours = seconds / 3600;
|
|
|
|
minutes = (seconds % 3600) / 60;
|
|
|
|
seconds = (seconds % 3600) % 60;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-04-25 08:39:49 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2012-04-27 10:48:03 +00:00
|
|
|
proto_item_append_text(item, "%d days %02d:%02d:%02d (DD days HH:MM:SS)", days, hours, minutes, seconds);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
2012-02-04 09:41:21 +00:00
|
|
|
|
|
|
|
offset += 3;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 3)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-3, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-3));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 8.70 MBMS Service Area
|
|
|
|
*/
|
2012-04-25 08:39:49 +00:00
|
|
|
void
|
2012-09-14 08:24:35 +00:00
|
|
|
dissect_gtpv2_mbms_service_area(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-02-06 17:29:29 +00:00
|
|
|
proto_item *sai_item;
|
2012-05-07 22:11:34 +00:00
|
|
|
guint8 binary_nr;
|
|
|
|
guint16 real_nr;
|
|
|
|
guint16 sai;
|
2012-04-25 08:39:49 +00:00
|
|
|
|
|
|
|
binary_nr = tvb_get_guint8(tvb, offset);
|
|
|
|
real_nr = (guint16)binary_nr + 1;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
|
|
|
/* 3GPP TS 29.061 17.7.6 MBMS-Service-Area AVP */
|
2013-09-30 15:21:09 +00:00
|
|
|
proto_tree_add_uint(tree, hf_gtpv2_mbms_service_area_nr, tvb, offset, 1, real_nr);
|
2012-02-02 20:56:20 +00:00
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
/* A consecutive list of MBMS Service Area Identities follow, each with a length of two octets. */
|
2012-11-26 16:50:13 +00:00
|
|
|
while (offset < length) {
|
2012-02-06 17:29:29 +00:00
|
|
|
/* 3GPP TS 23.003 15.3 Structure of MBMS SAI */
|
2012-04-25 08:39:49 +00:00
|
|
|
sai = tvb_get_ntohs(tvb, offset);
|
2012-02-06 17:29:29 +00:00
|
|
|
sai_item = proto_tree_add_item(tree, hf_gtpv2_mbms_service_area_id, tvb, offset, 2, ENC_BIG_ENDIAN);
|
|
|
|
/* The value 0 denotes the whole of PLMN as the MBMS Service Area */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (sai == 0) {
|
2012-04-25 08:39:49 +00:00
|
|
|
proto_item_append_text(sai_item, " Entire PLMN");
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
2012-11-26 16:50:13 +00:00
|
|
|
proto_item_append_text(item, " %u", sai);
|
2012-02-02 20:56:20 +00:00
|
|
|
offset += 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 8.71 MBMS Session Identifier
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_mbms_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, _U_ guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-02-04 09:41:21 +00:00
|
|
|
int offset = 0;
|
|
|
|
/* One octet OctetString. */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_session_id, tvb, offset, 1, ENC_NA);
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-02-02 20:56:20 +00:00
|
|
|
* 8.72 MBMS Flow Identifier
|
|
|
|
*/
|
|
|
|
static void
|
2012-09-14 08:24:35 +00:00
|
|
|
dissect_gtpv2_mbms_flow_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2012-02-04 09:41:21 +00:00
|
|
|
int offset = 0;
|
|
|
|
/* Two octets OctetString. */
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_flow_id, tvb, offset, 2, ENC_NA);
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_item_append_text(item, " %s", tvb_bytes_to_ep_str(tvb, offset, 2));
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 2;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 2)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-2, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-2));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-02-02 20:56:20 +00:00
|
|
|
* 8.73 MBMS IP Multicast Distribution
|
|
|
|
*/
|
2012-02-04 09:41:21 +00:00
|
|
|
static const value_string gtpv2_mbms_hc_indicator_vals[] = {
|
|
|
|
{0, "Uncompressed header"},
|
|
|
|
{1, "Compressed header"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
|
|
|
|
2012-02-02 20:56:20 +00:00
|
|
|
static void
|
2012-09-14 08:24:35 +00:00
|
|
|
dissect_gtpv2_mbms_ip_mc_dist(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2012-02-04 09:41:21 +00:00
|
|
|
int offset = 0;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-06 17:29:29 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_cteid, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 4;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
/* IP Multicast Distribution Address */
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((tvb_get_guint8(tvb, offset) & 0x3f) == 4) {
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-09-14 08:24:35 +00:00
|
|
|
proto_item_append_text(item, " IPv4 Dist %s", tvb_ip_to_str(tvb, offset));
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 4;
|
2012-11-26 16:50:13 +00:00
|
|
|
} else if ((tvb_get_guint8(tvb, offset) & 0x3f) == 16) {
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv6, tvb, offset, 16, ENC_NA);
|
2012-09-14 08:24:35 +00:00
|
|
|
proto_item_append_text(item, " IPv6 Dist %s", tvb_ip6_to_str(tvb, offset));
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 16;
|
|
|
|
}
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
/* IP Multicast Source Address */
|
2012-11-26 16:50:13 +00:00
|
|
|
if ((tvb_get_guint8(tvb, offset) & 0x3f) == 4) {
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-09-14 08:24:35 +00:00
|
|
|
proto_item_append_text(item, " IPv4 Src %s", tvb_ip_to_str(tvb, offset));
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 4;
|
2012-11-26 16:50:13 +00:00
|
|
|
} else if ((tvb_get_guint8(tvb, offset) & 0x3f) == 16) {
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv6, tvb, offset, 16, ENC_NA);
|
2012-09-14 08:24:35 +00:00
|
|
|
proto_item_append_text(item, " IPv6 Src %s", tvb_ip6_to_str(tvb, offset));
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 16;
|
|
|
|
}
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_hc_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
|
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > offset)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-offset));
|
2012-02-04 09:41:21 +00:00
|
|
|
|
|
|
|
}
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-05-07 22:11:34 +00:00
|
|
|
/*
|
2012-02-04 09:41:21 +00:00
|
|
|
* 8.74 MBMS Distribution Acknowledge
|
|
|
|
*/
|
|
|
|
static const value_string gtpv2_mbms_dist_indication_vals[] = {
|
|
|
|
{0, "No RNCs have accepted IP multicast distribution"},
|
|
|
|
{1, "All RNCs have accepted IP multicast distribution"},
|
|
|
|
{2, "Some RNCs have accepted IP multicast distribution"},
|
|
|
|
{3, "Spare. For future use."},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-02-02 20:56:20 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_mbms_dist_ack(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-02-04 09:41:21 +00:00
|
|
|
int offset = 0;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_dist_indication, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-04 09:41:21 +00:00
|
|
|
}
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
/*
|
|
|
|
* 8.75 User CSG Information (UCI)
|
|
|
|
*/
|
2012-02-02 20:56:20 +00:00
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_uci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.76 CSG Information Reporting Action */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_csg_info_rep_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.77 RFSP Index */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_rfsp_index(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-11-29 10:57:33 +00:00
|
|
|
int offset = 0;
|
|
|
|
|
2013-11-08 05:58:13 +00:00
|
|
|
if(instance == 0){
|
2013-12-12 20:16:30 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_subscriber_rfsp, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2013-11-08 05:58:13 +00:00
|
|
|
}else if(instance == 1){
|
2013-12-12 20:16:30 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_rfsp_inuse, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2013-11-08 05:58:13 +00:00
|
|
|
}
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.78 CSG ID */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_csg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.79 CSG Membership Indication (CMI) */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_cmi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.80 Service indicator */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_service_indicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.81 Detach Type */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_detach_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.82 Local Distinguished Name (LDN) */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_ldn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.83 Node Features */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_node_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2013-06-14 02:44:15 +00:00
|
|
|
int offset = 0;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_node_features_prn, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_node_features_mabr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_node_features_ntsr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset+=1;
|
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
2012-02-06 17:29:29 +00:00
|
|
|
/* 8.84
|
|
|
|
* MBMS Time to Data Transfer
|
|
|
|
*/
|
2012-04-25 08:39:49 +00:00
|
|
|
void
|
2012-09-14 08:24:35 +00:00
|
|
|
dissect_gtpv2_mbms_time_to_data_xfer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
|
|
|
guint8 binary_secs;
|
2012-02-04 09:41:21 +00:00
|
|
|
guint16 real_secs;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
binary_secs = tvb_get_guint8(tvb, offset);
|
|
|
|
real_secs = (guint16)binary_secs + 1;
|
2012-04-25 08:39:49 +00:00
|
|
|
|
2013-09-30 15:21:09 +00:00
|
|
|
proto_tree_add_string_format_value(tree, hf_gtpv2_time_to_data_xfer, tvb, offset, 1, "", "%d second(s)", real_secs);
|
2012-09-14 08:24:35 +00:00
|
|
|
proto_item_append_text(item, " %u second(s)", real_secs);
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.85 Throttling */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_throttling(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.86 Allocation/Retention Priority (ARP) */
|
2012-04-27 10:48:03 +00:00
|
|
|
void
|
2012-02-02 20:56:20 +00:00
|
|
|
dissect_gtpv2_arp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-04-27 10:48:03 +00:00
|
|
|
int offset = 0;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-04-27 10:48:03 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_arp_pvi, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_arp_pl, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_arp_pci, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
|
|
|
|
offset += 1;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.87 EPC Timer */
|
2012-10-29 16:02:51 +00:00
|
|
|
static const value_string gtpv2_timer_unit_vals[] = {
|
|
|
|
{0, "value is incremented in multiples of 2 seconds"},
|
|
|
|
{1, "value is incremented in multiples of 1 minute"},
|
|
|
|
{2, "value is incremented in multiples of 10 minutes"},
|
|
|
|
{3, "value is incremented in multiples of 1 hour"},
|
|
|
|
{4, "value is incremented in multiples of 1 hour"},
|
|
|
|
{5, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
|
|
|
|
{6, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
|
|
|
|
{7, "value indicates that the timer is infinite"},
|
|
|
|
{0, NULL}
|
|
|
|
};
|
2012-11-26 16:50:13 +00:00
|
|
|
|
2012-10-29 16:02:51 +00:00
|
|
|
void
|
2012-02-02 20:56:20 +00:00
|
|
|
dissect_gtpv2_epc_timer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-10-29 16:02:51 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_timer_unit, tvb, 0, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_timer_value, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2012-02-02 20:56:20 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.88 Signalling Priority Indication */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_sig_prio_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-10-29 16:02:51 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_lapi, tvb, 0, 1, ENC_BIG_ENDIAN);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.89 Temporary Mobile Group Identity (TMGI) */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_tmgi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-05-07 07:43:03 +00:00
|
|
|
guint64 tmgi;
|
|
|
|
|
|
|
|
tmgi = tvb_get_ntoh48(tvb, offset);
|
|
|
|
|
|
|
|
proto_item_append_text(item, "%012" G_GINT64_MODIFIER "x", tmgi);
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-04-25 08:39:49 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_mbms_service_id, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2012-02-06 17:29:29 +00:00
|
|
|
offset += 3;
|
|
|
|
|
|
|
|
dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, TRUE);
|
|
|
|
offset += 3;
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > offset)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-offset));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
2012-02-04 09:41:21 +00:00
|
|
|
/*
|
|
|
|
* 8.90 Additional MM context for SRVCC
|
|
|
|
* 3GPP TS 29.274 Figure 8.90-1
|
|
|
|
*/
|
2012-02-02 20:56:20 +00:00
|
|
|
static void
|
|
|
|
dissect_gtpv2_add_mm_cont_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-02-06 17:29:29 +00:00
|
|
|
proto_item *ms_cm_item;
|
|
|
|
proto_tree *ms_cm_tree;
|
2012-05-07 22:11:34 +00:00
|
|
|
guint8 elm_len;
|
2012-02-06 17:29:29 +00:00
|
|
|
|
|
|
|
/* Length of Mobile Station Classmark 2 */
|
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark 2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2012-02-06 17:29:29 +00:00
|
|
|
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
|
|
|
|
/* Mobile Station Classmark 2 */
|
|
|
|
de_ms_cm_2(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2012-02-06 17:29:29 +00:00
|
|
|
|
|
|
|
/* Length of Mobile Station Classmark 3 */
|
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-02-04 09:41:21 +00:00
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2012-02-06 17:29:29 +00:00
|
|
|
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
|
|
|
|
/* Mobile Station Classmark 3 */
|
|
|
|
de_ms_cm_3(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2012-02-06 17:29:29 +00:00
|
|
|
|
|
|
|
/* Length of Supported Codec List */
|
|
|
|
elm_len = tvb_get_guint8(tvb, offset);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
2013-12-19 15:49:09 +00:00
|
|
|
ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
|
2012-02-06 17:29:29 +00:00
|
|
|
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_supp_codec_list);
|
|
|
|
/* Supported Codec List */
|
|
|
|
de_sup_codec_list(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += elm_len;
|
2012-02-06 17:29:29 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > offset)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-offset));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.91 Additional flags for SRVCC */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_add_flags_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-02-06 17:29:29 +00:00
|
|
|
int offset = 0;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-02-06 17:29:29 +00:00
|
|
|
proto_tree_add_item(tree, hf_gtpv2_add_flags_for_srvcc_ics, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_vsrvcc_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.92 Max MBR/APN-AMBR (MMBR) */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_mmbr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-05-02 07:23:32 +00:00
|
|
|
guint32 max_ul;
|
|
|
|
guint32 max_dl;
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2012-05-02 07:23:32 +00:00
|
|
|
max_ul = tvb_get_ntohl(tvb, offset);
|
2013-09-16 10:39:06 +00:00
|
|
|
proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_ul, tvb, offset, 4, max_ul, "%u %s",
|
2012-05-02 07:23:32 +00:00
|
|
|
(max_ul) > 1000 ? max_ul/1000 : max_ul,
|
|
|
|
(max_ul) > 1000 ? "Mbps" : "kbps");
|
|
|
|
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
max_dl = tvb_get_ntohl(tvb, offset);
|
2013-09-16 10:39:06 +00:00
|
|
|
proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_dl, tvb, offset, 4, max_dl, "%u %s",
|
2012-05-02 07:23:32 +00:00
|
|
|
(max_dl) > 1000 ? max_dl/1000 : max_dl,
|
|
|
|
(max_dl) > 1000 ? "Mbps" : "kbps");
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.93 MDT Configuration */
|
|
|
|
static void
|
2013-07-03 02:59:31 +00:00
|
|
|
dissect_gtpv2_mdt_config(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
|
2012-02-02 20:56:20 +00:00
|
|
|
{
|
2013-07-03 02:59:31 +00:00
|
|
|
proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.94 Additional Protocol Configuration Options (APCO) */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_apco(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-11-26 16:50:13 +00:00
|
|
|
switch (message_type) {
|
2012-10-29 16:02:51 +00:00
|
|
|
case GTPV2_CREATE_SESSION_REQUEST:
|
|
|
|
/* PCO options as MS to network direction */
|
|
|
|
pinfo->link_dir = P2P_DIR_UL;
|
|
|
|
break;
|
|
|
|
case GTPV2_CREATE_SESSION_RESPONSE:
|
|
|
|
/* PCO options as Network to MS direction: */
|
|
|
|
pinfo->link_dir = P2P_DIR_DL;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
de_sm_pco(tvb, tree, pinfo, 0, length, NULL, 0);
|
2012-02-02 20:56:20 +00:00
|
|
|
}
|
|
|
|
|
2012-04-25 08:39:49 +00:00
|
|
|
/* 8.95 Absolute Time of MBMS Data Transfer */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_abs_mbms_data_tf_time(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
2012-05-07 22:11:34 +00:00
|
|
|
int offset = 0;
|
2012-04-25 08:39:49 +00:00
|
|
|
const gchar *time_str;
|
|
|
|
|
|
|
|
time_str = tvb_ntp_fmt_ts(tvb, offset);
|
|
|
|
proto_tree_add_string(tree, hf_gtpv2_abs_time_mbms_data, tvb, offset, 8, time_str);
|
|
|
|
proto_item_append_text(item, "%s", time_str);
|
|
|
|
|
|
|
|
offset += 8;
|
2012-11-26 16:50:13 +00:00
|
|
|
if (length > offset)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-offset));
|
2012-04-25 08:39:49 +00:00
|
|
|
}
|
|
|
|
|
2013-03-14 19:00:40 +00:00
|
|
|
/* 8.96 H(e)NB Information Reporting */
|
|
|
|
static const true_false_string gtpv2_henb_info_report_fti_vals = {
|
|
|
|
"Start reporting H(e)NB local IP address and UDP port number information change",
|
|
|
|
"Stop reporting H(e)NB local IP address and UDP port number information change",
|
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_henb_info_report(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
|
|
|
int offset = 0;
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_henb_info_report_fti, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2013-03-14 19:00:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.97 IPv4 Configuration Parameters (IP4CP) */
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_ip4cp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
|
|
|
int offset = 0;
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip4cp_subnet_prefix_len, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_ip4cp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
if (length > offset)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-offset, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-offset));
|
2013-03-14 19:00:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.98 Change to Report Flags */
|
2013-06-14 02:44:15 +00:00
|
|
|
static void
|
2013-03-14 19:00:40 +00:00
|
|
|
dissect_gtpv2_change_report_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
|
|
|
int offset = 0;
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_change_report_flags_sncr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_change_report_flags_tzcr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2013-03-14 19:00:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* 8.99 Action Indication */
|
|
|
|
static const value_string gtpv2_action_indication_vals[] = {
|
|
|
|
{ 0, "No Action"},
|
|
|
|
{ 1, "Deactivation Indication"},
|
|
|
|
{ 2, "Paging Indication"},
|
|
|
|
{ 3, "Spare"},
|
|
|
|
{ 4, "Spare"},
|
|
|
|
{ 5, "Spare"},
|
|
|
|
{ 6, "Spare"},
|
|
|
|
{ 7, "Spare"},
|
|
|
|
{ 0, NULL}
|
|
|
|
};
|
|
|
|
static value_string_ext gtpv2_action_indication_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_action_indication_vals);
|
|
|
|
|
|
|
|
static void
|
|
|
|
dissect_gtpv2_action_indication(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
|
|
|
|
{
|
|
|
|
int offset = 0;
|
|
|
|
|
|
|
|
proto_tree_add_item(tree, hf_gtpv2_action_indication_val, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
offset += 1;
|
|
|
|
|
|
|
|
if (length > 1)
|
2013-12-19 15:49:09 +00:00
|
|
|
proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_ep_str(tvb, offset, length-1));
|
2013-03-14 19:00:40 +00:00
|
|
|
}
|
2012-02-02 20:56:20 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
typedef struct _gtpv2_ie {
|
|
|
|
int ie_type;
|
2010-06-28 15:31:41 +00:00
|
|
|
void (*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, guint16, guint8, guint8);
|
2009-02-11 19:48:21 +00:00
|
|
|
} gtpv2_ie_t;
|
|
|
|
|
|
|
|
static const gtpv2_ie_t gtpv2_ies[] = {
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_IMSI, dissect_gtpv2_imsi}, /* 1, Internal Mobile Subscriber Identity (IMSI) */
|
|
|
|
{GTPV2_IE_CAUSE, dissect_gtpv2_cause}, /* 2, Cause (without embedded offending IE) 8.4 */
|
|
|
|
{GTPV2_REC_REST_CNT, dissect_gtpv2_recovery}, /* 3, Recovery (Restart Counter) 8.5 */
|
|
|
|
/* 4-50 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
|
|
|
|
/*Start SRVCC Messages 3GPP TS 29.280 */
|
2012-11-23 12:00:21 +00:00
|
|
|
{GTPV2_IE_STN_SR, dissect_gtpv2_stn_sr}, /* 51 STN-SR */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_SRC_TGT_TRANS_CON, dissect_gtpv2_src_tgt_trans_con}, /* 52 Source to Target Transparent Container */
|
|
|
|
{GTPV2_IE_TGT_SRC_TRANS_CON , dissect_gtpv2_tgt_src_trans_con}, /* 53 Target to Source Transparent Container */
|
|
|
|
{GTPV2_IE_MM_CON_EUTRAN_SRVCC, dissect_gtpv2_mm_con_eutran_srvcc}, /* 54 MM Context for E-UTRAN SRVCC */
|
|
|
|
{GTPV2_IE_MM_CON_UTRAN_SRVCC, dissect_gtpv2_mm_con_utran_srvcc}, /* 55 MM Context for UTRAN SRVCC */
|
|
|
|
{GTPV2_IE_SRVCC_CAUSE, dissect_gtpv2_srvcc_cause}, /* 56 SRVCC Cause */
|
|
|
|
{GTPV2_IE_TGT_RNC_ID, dissect_gtpv2_tgt_rnc_id}, /* 57 Target RNC ID */
|
|
|
|
{GTPV2_IE_TGT_GLOGAL_CELL_ID, dissect_gtpv2_tgt_global_cell_id}, /* 58 Target Global Cell ID */
|
|
|
|
{GTPV2_IE_TEID_C, dissect_gtpv2_teid_c}, /* 59 TEID-C */
|
|
|
|
{GTPV2_IE_SV_FLAGS, dissect_gtpv2_sv_flags}, /* 60 Sv Flags */
|
|
|
|
{GTPV2_IE_SAI, dissect_gtpv2_sai}, /* 61 Service Area Identifie */
|
|
|
|
/* 61-70 Reserved for Sv interface Extendable / See 3GPP TS 29.280 [15] */
|
|
|
|
|
|
|
|
{GTPV2_APN, dissect_gtpv2_apn}, /* 71, Access Point Name (APN) 8.6 */
|
|
|
|
{GTPV2_AMBR, dissect_gtpv2_ambr}, /* 72, Aggregate Maximum Bit Rate (AMBR) */
|
|
|
|
{GTPV2_EBI, dissect_gtpv2_ebi}, /* 73, EPS Bearer ID (EBI) 8.8 */
|
|
|
|
{GTPV2_IP_ADDRESS, dissect_gtpv2_ip_address}, /* 74, IP Address */
|
|
|
|
{GTPV2_MEI, dissect_gtpv2_mei}, /* 74, Mobile Equipment Identity */
|
|
|
|
{GTPV2_IE_MSISDN, dissect_gtpv2_msisdn}, /* 76, MSISDN 8.11 */
|
|
|
|
{GTPV2_INDICATION, dissect_gtpv2_ind}, /* 77 Indication 8.12 */
|
|
|
|
{GTPV2_PCO, dissect_gtpv2_pco}, /* 78 Protocol Configuration Options (PCO) 8.13 */
|
|
|
|
{GTPV2_PAA, dissect_gtpv2_paa}, /* 79 PDN Address Allocation (PAA) 8.14 */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_BEARER_QOS, dissect_gtpv2_bearer_qos}, /* 80 Bearer Level Quality of Service (Bearer QoS) 8.15 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_FLOW_QOS, dissect_gtpv2_flow_qos}, /* 81 Flow Quality of Service (Flow QoS) 8.16 */
|
|
|
|
{GTPV2_IE_RAT_TYPE, dissect_gtpv2_rat_type}, /* 82, RAT Type 8.17 */
|
|
|
|
{GTPV2_IE_SERV_NET, dissect_gtpv2_serv_net}, /* 83, Serving Network 8.18 */
|
|
|
|
{GTPV2_IE_BEARER_TFT, dissect_gtpv2_bearer_tft}, /* 84, Bearer TFT 8.19 */
|
|
|
|
{GTPV2_IE_TAD, dissect_gtpv2_tad}, /* 85, Traffic Aggregate Description 8.20 */
|
|
|
|
{GTPV2_IE_ULI, dissect_gtpv2_uli}, /* 86, User Location Info (ULI) 8.22 */
|
|
|
|
{GTPV2_IE_F_TEID, dissect_gtpv2_f_teid}, /* 87, Fully Qualified Tunnel Endpoint Identifier (F-TEID) 8.23 */
|
|
|
|
{GTPV2_IE_TMSI, dissect_gtpv2_tmsi}, /* 88, TMSI 8.23 */
|
|
|
|
{GTPV2_IE_GLOBAL_CNID, dissect_gtpv2_g_cn_id}, /* 89, Global CN-Id 8.25 */
|
|
|
|
{GTPV2_IE_S103PDF, dissect_gtpv2_s103pdf}, /* 90, S103 PDN Data Forwarding Info (S103PDF) 8.25 */
|
|
|
|
{GTPV2_IE_S1UDF, dissect_gtpv2_s1udf}, /* 91, S1-U Data Forwarding (S1UDF) 8.26 */
|
|
|
|
{GTPV2_IE_DEL_VAL, dissect_gtpv2_delay_value}, /* 92, Delay Value 8.29 */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_IE_BEARER_CTX, dissect_gtpv2_bearer_ctx}, /* 93, Bearer Context 8.31 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_CHAR_ID, dissect_gtpv2_charging_id}, /* 94, Charging Id */
|
|
|
|
{GTPV2_IE_CHAR_CHAR, dissect_gtpv2_char_char}, /* 95 Charging Characteristic */
|
|
|
|
{GTPV2_IE_TRA_INFO, dissect_gtpv2_tra_info}, /* 96, Trace Information 8.31 */
|
|
|
|
{GTPV2_BEARER_FLAG, dissect_gtpv2_bearer_flag}, /* 97, Bearer Flag */
|
|
|
|
/* 98, Void 8.33 */
|
|
|
|
{GTPV2_IE_PDN_TYPE, dissect_gtpv2_pdn_type}, /* 99, PDN Type */
|
|
|
|
{GTPV2_IE_PTI, dissect_gtpv2_pti}, /* 100, Procedure Transaction Id */
|
|
|
|
{GTPV2_IE_DRX_PARAM, dissect_gtpv2_drx_param}, /* 101, DRX Parameter 8.36 */
|
|
|
|
{GTPV2_IE_UE_NET_CAPABILITY, dissect_gtpv2_ue_net_capability}, /* 102, UE network capability 8.37 */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_GSM_T, dissect_gtpv2_mm_context_gsm_t}, /* 103, MM Context 8.38 GSM Key and Triplets */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_UTMS_CQ, dissect_gtpv2_mm_context_utms_cq}, /* 104, MM Context 8.38 */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_GSM_CQ, dissect_gtpv2_mm_context_gsm_cq}, /* 105, MM Context 8.38 */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_UTMS_Q, dissect_gtpv2_mm_context_utms_q}, /* 106, MM Context 8.38 */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_EPS_QQ, dissect_gtpv2_mm_context_eps_qq}, /* 107, MM Context 8.38 */
|
|
|
|
{GTPV2_IE_MM_CONTEXT_UTMS_QQ, dissect_gtpv2_mm_context_utms_qq}, /* 108, MM Context 8.38 */
|
|
|
|
{GTPV2_IE_PDN_CONNECTION, dissect_gtpv2_PDN_conn}, /* 109, PDN Connection */
|
|
|
|
{GTPV2_IE_PDN_NUMBERS, dissect_gtpv2_pdn_numbers}, /* 110, PDN Numbers 8.40 */
|
|
|
|
{GTPV2_IE_P_TMSI, dissect_gtpv2_p_tmsi}, /* 111, P-TMSI 8.41 */
|
|
|
|
{GTPV2_IE_P_TMSI_SIG, dissect_gtpv2_p_tmsi_sig}, /* 112, P-TMSI Signature 8.42 */
|
|
|
|
{GTPV2_IE_HOP_COUNTER, dissect_gtpv2_hop_counter}, /* 113, Hop Counter 8.43 */
|
|
|
|
{GTPV2_IE_UE_TIME_ZONE, dissect_gtpv2_ue_time_zone}, /* 114, UE Time Zone */
|
|
|
|
{GTPV2_IE_TRACE_REFERENCE, dissect_gtpv2_trace_reference}, /* 115, Trace Reference 8.45 */
|
|
|
|
{GTPV2_IE_COMPLETE_REQUEST_MSG, dissect_complete_request_msg}, /* 116, Complete Request message 8.46 */
|
|
|
|
{GTPV2_IE_GUTI, dissect_gtpv2_guti}, /* 117, GUTI 8.47 */
|
|
|
|
{GTPV2_IE_F_CONTAINER, dissect_gtpv2_F_container}, /* 118, Fully Qualified Container (F-Container) */
|
|
|
|
{GTPV2_IE_F_CAUSE, dissect_gtpv2_F_cause}, /* 119, Fully Qualified Cause (F-Cause) */
|
|
|
|
{GTPV2_IE_SEL_PLMN_ID, dissect_gtpv2_sel_plmn_id}, /* 120, Selected PLMN ID 8.50 */
|
|
|
|
{GTPV2_IE_TARGET_ID, dissect_gtpv2_target_id}, /* 121, Target Identification */
|
|
|
|
/* 122, Void 8.52 */
|
|
|
|
{GTPV2_IE_PKT_FLOW_ID, dissect_gtpv2_pkt_flow_id}, /* 123, Packet Flow ID 8.53 */
|
|
|
|
{GTPV2_IE_RAB_CONTEXT, dissect_gtpv2_rab_context}, /* 124, RAB Context 8.54 */
|
|
|
|
{GTPV2_IE_S_RNC_PDCP_CTX_INFO, dissect_gtpv2_s_rnc_pdcp_ctx_info}, /* 125, Source RNC PDCP context info 8.55 */
|
|
|
|
{GTPV2_IE_UDP_S_PORT_NR, dissect_udp_s_port_nr}, /* 126, UDP Source Port Number 8.56 */
|
|
|
|
{GTPV2_IE_APN_RESTRICTION, dissect_gtpv2_apn_rest}, /* 127, APN Restriction */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_IE_SEL_MODE, dissect_gtpv2_selec_mode}, /* 128, Selection Mode */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_SOURCE_IDENT, dissect_gtpv2_source_ident}, /* 129, Source Identification 8.59 */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_IE_BEARER_CONTROL_MODE, dissect_gtpv2_bearer_control_mode}, /* 130, Bearer Control Mode */
|
|
|
|
{GTPV2_IE_CNG_REP_ACT , dissect_gtpv2_cng_rep_act}, /* 131, Change Reporting Action 8.61 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_FQ_CSID, dissect_gtpv2_fq_csid}, /* 132, Fully Qualified PDN Connection Set Identifier (FQ-CSID) 8.62 */
|
|
|
|
{GTPV2_IE_CHANNEL_NEEDED, dissect_gtpv2_channel_needed}, /* 133, Channel Needed 8.63 */
|
|
|
|
{GTPV2_IE_EMLPP_PRI, dissect_gtpv2_emlpp_pri}, /* 134, eMLPP Priority 8.64 */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_IE_NODE_TYPE , dissect_gtpv2_node_type}, /* 135, Node Type 8.65 */
|
2012-02-02 20:56:20 +00:00
|
|
|
{GTPV2_IE_FQDN, dissect_gtpv2_fqdn}, /* 136, 8.66 Fully Qualified Domain Name (FQDN) */
|
|
|
|
{GTPV2_IE_TI, dissect_gtpv2_ti}, /* 137, 8.68 Transaction Identifier (TI) */
|
|
|
|
{GTPV2_IE_MBMS_SESSION_DURATION, dissect_gtpv2_mbms_session_duration}, /* 138, 8.69 MBMS Session Duration */
|
|
|
|
{GTPV2_IE_MBMS_SERVICE_AREA, dissect_gtpv2_mbms_service_area}, /* 139, 8.70 MBMS Service Area */
|
|
|
|
{GTPV2_IE_MBMS_SESSION_ID, dissect_gtpv2_mbms_session_id}, /* 140, 8.71 MBMS Session Identifier */
|
|
|
|
{GTPV2_IE_MBMS_FLOW_ID, dissect_gtpv2_mbms_flow_id}, /* 141, 8.72 MBMS Flow Identifier */
|
|
|
|
{GTPV2_IE_MBMS_IP_MC_DIST, dissect_gtpv2_mbms_ip_mc_dist}, /* 142, 8.73 MBMS IP Multicast Distribution */
|
|
|
|
{GTPV2_IE_MBMS_DIST_ACK, dissect_gtpv2_mbms_dist_ack}, /* 143, 8.74 MBMS Distribution Acknowledge */
|
|
|
|
{GTPV2_IE_RFSP_INDEX, dissect_gtpv2_rfsp_index}, /* 144, 8.77 RFSP Index */
|
|
|
|
{GTPV2_IE_UCI, dissect_gtpv2_uci}, /* 145, 8.75 User CSG Information (UCI) */
|
|
|
|
{GTPV2_IE_CSG_INFO_REP_ACTION, dissect_gtpv2_csg_info_rep_action}, /* 146, 8.76 CSG Information Reporting Action */
|
|
|
|
{GTPV2_IE_CSG_ID, dissect_gtpv2_csg_id}, /* 147, 8.78 CSG ID */
|
|
|
|
{GTPV2_IE_CMI, dissect_gtpv2_cmi}, /* 148, 8.79 CSG Membership Indication (CMI) */
|
|
|
|
{GTPV2_IE_SERVICE_INDICATOR, dissect_gtpv2_service_indicator}, /* 149, 8.80 Service indicator */
|
|
|
|
{GTPV2_IE_DETACH_TYPE, dissect_gtpv2_detach_type}, /* 150, 8.81 Detach Type */
|
|
|
|
{GTPV2_IE_LDN, dissect_gtpv2_ldn}, /* 151, 8.82 Local Distinguished Name (LDN) */
|
|
|
|
{GTPV2_IE_NODE_FEATURES, dissect_gtpv2_node_features}, /* 152, 8.83 Node Features */
|
|
|
|
{GTPV2_IE_MBMS_TIME_TO_DATA_XFER, dissect_gtpv2_mbms_time_to_data_xfer}, /* 153, 8.84 MBMS Time to Data Transfer */
|
|
|
|
{GTPV2_IE_THROTTLING, dissect_gtpv2_throttling}, /* 154, 8.85 Throttling */
|
|
|
|
{GTPV2_IE_ARP, dissect_gtpv2_arp}, /* 155, 8.86 Allocation/Retention Priority (ARP) */
|
|
|
|
{GTPV2_IE_EPC_TIMER, dissect_gtpv2_epc_timer}, /* 156, 8.87 EPC Timer */
|
|
|
|
{GTPV2_IE_SIG_PRIO_IND, dissect_gtpv2_sig_prio_ind}, /* 157, 8.88 Signalling Priority Indication */
|
|
|
|
{GTPV2_IE_TMGI, dissect_gtpv2_tmgi}, /* 158, 8.89 Temporary Mobile Group Identity (TMGI) */
|
|
|
|
{GTPV2_IE_ADD_MM_CONT_FOR_SRVCC, dissect_gtpv2_add_mm_cont_for_srvcc}, /* 159, 8.90 Additional MM context for SRVCC */
|
|
|
|
{GTPV2_IE_ADD_FLAGS_FOR_SRVCC, dissect_gtpv2_add_flags_for_srvcc}, /* 160, 8.91 Additional flags for SRVCC */
|
|
|
|
{GTPV2_IE_MMBR, dissect_gtpv2_mmbr}, /* 161, 8.92 Max MBR/APN-AMBR (MMBR) */
|
|
|
|
{GTPV2_IE_MDT_CONFIG, dissect_gtpv2_mdt_config}, /* 162, 8.93 MDT Configuration */
|
|
|
|
{GTPV2_IE_APCO, dissect_gtpv2_apco}, /* 163, 8.94 Additional Protocol Configuration Options (APCO) */
|
2013-03-14 19:00:40 +00:00
|
|
|
{GTPV2_IE_ABS_MBMS_DATA_TF_TIME, dissect_gtpv2_abs_mbms_data_tf_time}, /* 164, 8.95 Absolute Time of MBMS Data Transfer */
|
|
|
|
{GTPV2_IE_HENB_INFO_REPORT, dissect_gtpv2_henb_info_report}, /* 165, 8.96 H(e)NB Information Reporting */
|
|
|
|
{GTPV2_IE_IP4CP, dissect_gtpv2_ip4cp}, /* 166, 8.97 IPv4 Configuration Parameters (IPv4CP) */
|
|
|
|
{GTPV2_IE_CHANGE_TO_REPORT_FLAGS, dissect_gtpv2_change_report_flags}, /* 167, 8.98 Change to Report Flags */
|
|
|
|
{GTPV2_IE_ACTION_INDICATION, dissect_gtpv2_action_indication}, /* 168, 8.99 Action Indication */
|
|
|
|
/* 169-254 Spare. For future use. FFS */
|
2012-11-26 16:50:13 +00:00
|
|
|
{GTPV2_IE_PRIVATE_EXT, dissect_gtpv2_private_ext},
|
2009-02-16 21:21:11 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
{0, dissect_gtpv2_unknown}
|
|
|
|
};
|
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
static void
|
2011-08-03 20:31:51 +00:00
|
|
|
dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint offset, guint8 message_type)
|
2009-02-10 21:57:56 +00:00
|
|
|
{
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_tree *ie_tree;
|
|
|
|
proto_item *ti;
|
2012-05-07 22:11:34 +00:00
|
|
|
tvbuff_t *ie_tvb;
|
|
|
|
guint8 type, instance;
|
|
|
|
guint16 length;
|
|
|
|
int i;
|
2010-05-10 15:54:57 +00:00
|
|
|
/*
|
|
|
|
* Octets 8 7 6 5 4 3 2 1
|
|
|
|
* 1 Type
|
|
|
|
* 2-3 Length = n
|
|
|
|
* 4 CR Spare Instance
|
|
|
|
* 5-(n+4) IE specific data
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
while (offset < (gint)tvb_reported_length(tvb)) {
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Get the type and length */
|
2012-05-07 22:11:34 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
type = tvb_get_guint8(tvb, offset);
|
|
|
|
length = tvb_get_ntohs(tvb, offset + 1);
|
2012-05-07 22:11:34 +00:00
|
|
|
ti = proto_tree_add_text(tree, tvb, offset, 4 + length, "%s : ",
|
2012-11-26 16:50:13 +00:00
|
|
|
val_to_str_ext_const(type, >pv2_element_type_vals_ext, "Unknown"));
|
2010-05-10 15:54:57 +00:00
|
|
|
ie_tree = proto_item_add_subtree(ti, ett_gtpv2_ie);
|
2012-05-07 22:11:34 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Octet 1 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ie_tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
|
|
|
/*Octet 2 - 3 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ie_tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2010-05-10 15:54:57 +00:00
|
|
|
/* CR Spare Instance Octet 4*/
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ie_tree, hf_gtpv2_cr, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
instance = tvb_get_guint8(tvb, offset) & 0x0f;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(ie_tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
|
|
|
/* TODO: call IE dissector here */
|
2012-11-26 16:50:13 +00:00
|
|
|
if (type == GTPV2_IE_RESERVED) {
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Treat IE type zero specal as type zero is used to end the loop in the else branch */
|
|
|
|
proto_tree_add_text(ie_tree, tvb, offset, length, "IE type Zero is Reserved and should not be used");
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2010-05-10 15:54:57 +00:00
|
|
|
i = -1;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Loop over the IE dissector list to se if we find an entry;
|
|
|
|
the last entry will have ie_type=0 breaking the loop */
|
2012-11-26 16:50:13 +00:00
|
|
|
while (gtpv2_ies[++i].ie_type) {
|
2010-05-10 15:54:57 +00:00
|
|
|
if (gtpv2_ies[i].ie_type == type)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
/* Just give the IE dissector the IE */
|
2010-12-30 14:09:09 +00:00
|
|
|
ie_tvb = tvb_new_subset_remaining(tvb, offset);
|
2010-06-28 15:31:41 +00:00
|
|
|
(*gtpv2_ies[i].decode) (ie_tvb, pinfo , ie_tree, ti, length, message_type, instance);
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += length;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2009-02-10 21:57:56 +00:00
|
|
|
}
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
static void
|
|
|
|
dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
|
|
|
|
{
|
|
|
|
proto_tree *gtpv2_tree, *flags_tree;
|
|
|
|
proto_item *ti, *tf;
|
2012-05-07 22:11:34 +00:00
|
|
|
guint8 message_type, t_flag, p_flag;
|
|
|
|
int offset = 0;
|
|
|
|
guint16 msg_length;
|
2012-02-14 20:23:02 +00:00
|
|
|
tvbuff_t *msg_tvb;
|
2009-02-10 21:57:56 +00:00
|
|
|
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Currently we get called from the GTP dissector no need to check the version */
|
2009-08-09 06:26:46 +00:00
|
|
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "GTPv2");
|
2009-08-09 07:36:13 +00:00
|
|
|
col_clear(pinfo->cinfo, COL_INFO);
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
/* message type is in octet 2 */
|
2012-11-26 16:50:13 +00:00
|
|
|
message_type = tvb_get_guint8(tvb, 1);
|
2013-10-29 14:09:20 +00:00
|
|
|
col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(message_type, >pv2_message_type_vals_ext, "Unknown"));
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
p_flag = (tvb_get_guint8(tvb, offset) & 0x10) >> 4;
|
|
|
|
msg_length = tvb_get_ntohs(tvb, offset + 2);
|
|
|
|
proto_tree_add_item(tree, proto_gtpv2, tvb, offset, msg_length + 4, ENC_NA);
|
2009-02-11 19:48:21 +00:00
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
if (tree) {
|
2012-11-26 16:50:13 +00:00
|
|
|
ti = proto_tree_add_text(tree, tvb, offset, msg_length + 4, "%s",
|
|
|
|
val_to_str_ext_const(message_type, >pv2_message_type_vals_ext, "Unknown"));
|
2010-05-10 15:54:57 +00:00
|
|
|
gtpv2_tree = proto_item_add_subtree(ti, ett_gtpv2);
|
|
|
|
|
|
|
|
/* Control Plane GTP uses a variable length header. Control Plane GTP header
|
|
|
|
* length shall be a multiple of 4 octets.
|
|
|
|
* Figure 5.1-1 illustrates the format of the GTPv2-C Header.
|
|
|
|
* Bits 8 7 6 5 4 3 2 1
|
2010-07-21 10:28:46 +00:00
|
|
|
* Octets 1 Version P T Spare Spare Spare
|
2010-05-10 15:54:57 +00:00
|
|
|
* 2 Message Type
|
|
|
|
* 3 Message Length (1st Octet)
|
|
|
|
* 4 Message Length (2nd Octet)
|
|
|
|
* m-k(m+3) If T flag is set to 1, then TEID shall be placed into octets 5-8.
|
|
|
|
* Otherwise, TEID field is not present at all.
|
2010-07-21 10:28:46 +00:00
|
|
|
* n-(n+2) Sequence Number
|
|
|
|
* (n+3) Spare
|
2010-05-10 15:54:57 +00:00
|
|
|
* Figure 5.1-1: General format of GTPv2 Header for Control Plane
|
|
|
|
*/
|
2011-08-26 05:54:00 +00:00
|
|
|
tf = proto_tree_add_item(gtpv2_tree, hf_gtpv2_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2010-05-10 15:54:57 +00:00
|
|
|
flags_tree = proto_item_add_subtree(tf, ett_gtpv2_flags);
|
|
|
|
|
|
|
|
/* Octet 1 */
|
2012-11-26 16:50:13 +00:00
|
|
|
t_flag = (tvb_get_guint8(tvb, offset) & 0x08) >> 3;
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(flags_tree, hf_gtpv2_version, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flags_tree, hf_gtpv2_p, tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
|
proto_tree_add_item(flags_tree, hf_gtpv2_t, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
|
|
|
/* Octet 2 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(gtpv2_tree, hf_gtpv2_message_type, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Octet 3 - 4 */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(gtpv2_tree, hf_gtpv2_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 2;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (t_flag) {
|
2010-05-10 15:54:57 +00:00
|
|
|
/* Tunnel Endpoint Identifier 4 octets */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(gtpv2_tree, hf_gtpv2_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 4;
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2010-07-21 10:28:46 +00:00
|
|
|
/* Sequence Number 3 octets */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(gtpv2_tree, hf_gtpv2_seq, tvb, offset, 3, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 3;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2010-07-21 10:28:46 +00:00
|
|
|
/* Spare 1 octet */
|
2011-08-26 05:54:00 +00:00
|
|
|
proto_tree_add_item(gtpv2_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
|
2012-11-26 16:50:13 +00:00
|
|
|
offset += 1;
|
2010-05-10 15:54:57 +00:00
|
|
|
|
2012-11-26 16:50:13 +00:00
|
|
|
if (p_flag) {
|
|
|
|
msg_tvb = tvb_new_subset(tvb, 0, msg_length + 4, msg_length + 4);
|
2012-02-14 20:23:02 +00:00
|
|
|
dissect_gtpv2_ie_common(msg_tvb, pinfo, gtpv2_tree, offset, message_type);
|
2012-11-26 16:50:13 +00:00
|
|
|
} else {
|
2012-02-14 20:23:02 +00:00
|
|
|
dissect_gtpv2_ie_common(tvb, pinfo, gtpv2_tree, offset, message_type);
|
2012-05-07 22:11:34 +00:00
|
|
|
}
|
2010-05-10 15:54:57 +00:00
|
|
|
}
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Bit 5 represents a "P" flag. If the "P" flag is set to "0",
|
2012-02-13 22:22:29 +00:00
|
|
|
* no piggybacked message shall be present. If the "P" flag is set to "1",
|
2012-05-07 22:11:34 +00:00
|
|
|
* then another GTPv2-C message with its own header and body shall be present
|
2012-02-13 22:22:29 +00:00
|
|
|
* at the end of the current message.
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
if (p_flag) {
|
2012-02-14 20:23:02 +00:00
|
|
|
tvbuff_t *new_p_tvb;
|
2012-05-07 22:11:34 +00:00
|
|
|
/* Octets 3 to 4 represent the Length field. This field shall indicate the
|
|
|
|
* length of the message in octets excluding the
|
2012-02-13 22:22:29 +00:00
|
|
|
* mandatory part of the GTP-C header (the first 4 octets).
|
|
|
|
*/
|
2012-11-26 16:50:13 +00:00
|
|
|
new_p_tvb = tvb_new_subset_remaining(tvb, msg_length + 4);
|
2012-05-16 07:47:15 +00:00
|
|
|
col_append_str(pinfo->cinfo, COL_INFO, " / ");
|
|
|
|
col_set_fence(pinfo->cinfo, COL_INFO);
|
2012-02-14 20:23:02 +00:00
|
|
|
dissect_gtpv2(new_p_tvb, pinfo, tree);
|
2012-02-13 22:22:29 +00:00
|
|
|
}
|
2009-02-10 21:57:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
}
|
2011-08-03 20:31:51 +00:00
|
|
|
|
2009-02-10 21:57:56 +00:00
|
|
|
void proto_register_gtpv2(void)
|
|
|
|
{
|
|
|
|
static hf_register_info hf_gtpv2[] = {
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_reserved,
|
|
|
|
{"Reserved bit(s)", "gtpv2.reserved",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
"Reserved", HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_spare_half_octet,
|
|
|
|
{"Spare half octet", "gtpv2.spare_half_octet",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_spare_bits,
|
|
|
|
{"Spare bit(s)", "gtpv2.spare_bits",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL }
|
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_flags,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Flags", "gtpv2.flags",
|
2012-09-18 07:39:14 +00:00
|
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_version,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Version", "gtpv2.version",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xe0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2010-07-21 10:28:46 +00:00
|
|
|
{&hf_gtpv2_p,
|
2012-02-13 22:22:29 +00:00
|
|
|
{"Piggybacking flag (P)", "gtpv2.p",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"If Piggybacked message is present or not", HFILL}
|
2011-01-04 18:41:25 +00:00
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{ &hf_gtpv2_t,
|
2012-02-13 22:22:29 +00:00
|
|
|
{"TEID flag (T)", "gtpv2.t",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"If TEID field is present or not", HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_message_type,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Message Type", "gtpv2.message_type",
|
2012-11-26 16:50:13 +00:00
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_message_type_vals_ext, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_msg_length,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Message Length", "gtpv2.msg_lengt",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_teid,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Tunnel Endpoint Identifier", "gtpv2.teid",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
"TEID", HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_seq,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Sequence Number", "gtpv2.seq",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
"SEQ", HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_spare,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Spare", "gtpv2.spare",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ie,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IE Type", "gtpv2.ie_type",
|
2012-11-26 16:50:13 +00:00
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_element_type_vals_ext, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ie_len,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IE Length", "gtpv2.ie_len",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
"length of the information element excluding the first four octets", HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_cr,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"CR flag", "gtpv2.cr",
|
2012-11-26 16:50:13 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xf0, /* SRVCC */
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_instance,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Instance", "gtpv2.instance",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0f,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_imsi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IMSI(International Mobile Subscriber Identity number)", "gtpv2.imsi",
|
|
|
|
FT_STRING, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ipv4_addr,
|
|
|
|
{"IPv4 Address", "gtpv2.ipv4_addr",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{ &hf_gtpv2_cause,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Cause", "gtpv2.cause",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_cause_vals_ext, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_cause_cs,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"CS (Cause Source)", "gtpv2.cs",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(>pv2_cause_cs), 0x01,
|
|
|
|
NULL, HFILL}
|
2011-01-03 17:22:02 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_cause_bce,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"BCE (Bearer Context IE Error)", "gtpv2.bce",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
2011-01-03 17:22:02 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_cause_pce,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"PCE (PDN Connection IE Error)", "gtpv2.pce",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x04,
|
|
|
|
NULL, HFILL}
|
2011-01-03 17:22:02 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_cause_off_ie_t,
|
|
|
|
{"Type of the offending IE", "gtpv2.cause_off_ie_t",
|
2012-11-26 16:50:13 +00:00
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_element_type_vals_ext, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_rec,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Restart Counter", "gtpv2.rec",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2011-07-30 14:05:31 +00:00
|
|
|
/*Start SRVCC Messages*/
|
|
|
|
{ &hf_gtpv2_stn_sr,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"STN-SR", "gtpv2.stn_sr",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_len_trans_con,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Length of the Transparent Container", "gtpv2.len_trans_con",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_eksi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"eKSI", "gtpv2.eksi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ck,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"CK", "gtpv2.ck",
|
2012-04-11 15:52:14 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ik,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IK", "gtpv2.ik",
|
2012-04-11 15:52:14 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_len_ms_classmark2,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Length of Mobile Station Classmark2", "gtpv2.len_ms_classmark2",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_len_ms_classmark3,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Length of Mobile Station Classmark3", "gtpv2.len_ms_classmark3",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_len_supp_codec_list,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Length of Supported Codec List", "gtpv2.len_supp_codec_list",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ksi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"KSI'cs", "gtpv2.ksi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0F,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_cksn,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"CKSN'", "gtpv2.cksn",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_srvcc_cause,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"SRVCC Cause", "gtpv2.srvcc_cause",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_srvcc_cause_vals_ext, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
2012-12-09 18:17:47 +00:00
|
|
|
{&hf_gtpv2_rac,
|
|
|
|
{ "Routing Area Code (RAC)", "gtpv2.rac",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0,
|
|
|
|
"Routing Area Code", HFILL}
|
|
|
|
},
|
|
|
|
|
2011-07-30 14:05:31 +00:00
|
|
|
{ &hf_gtpv2_rnc_id,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"RNC ID", "gtpv2.rnc_id",
|
2012-12-07 14:41:05 +00:00
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2012-12-09 18:17:47 +00:00
|
|
|
},
|
2013-01-29 14:31:21 +00:00
|
|
|
{ &hf_gtpv2_ext_rnc_id,
|
2012-12-09 18:17:47 +00:00
|
|
|
{"Extended RNC-ID", "gtpv2.ext_rnc_id",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-08-03 21:14:04 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_lac,
|
2012-11-26 16:50:13 +00:00
|
|
|
{ "Location Area Code (LAC)", "gtpv2.lac",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x00,
|
|
|
|
NULL, HFILL }
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_sac,
|
2012-11-26 16:50:13 +00:00
|
|
|
{ "Service Area Code (SAC)", "gtpv2.sac",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x00,
|
|
|
|
NULL, HFILL }
|
|
|
|
},
|
2011-07-30 14:05:31 +00:00
|
|
|
{ &hf_gtpv2_tgt_g_cell_id,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Cell ID", "gtpv2.tgt_g_cell_id",
|
2012-11-23 12:00:21 +00:00
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_teid_c,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Tunnel Endpoint Identifier for Control Plane(TEID-C)", "gtpv2.teid_c",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_sv_sti,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"STI (Session Transfer Indicator)", "gtpv2.sv_sti",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_sv_ics,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"ICS (IMS Centralized Service)", "gtpv2.sv_ics",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_sv_emind,
|
2012-01-19 21:57:24 +00:00
|
|
|
{"EmInd(Emergency Indicator)", "gtpv2.sv_emind",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}
|
2011-07-30 14:05:31 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
/*End SRVCC Messages*/
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_apn,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"APN (Access Point Name)", "gtpv2.apn",
|
|
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_ambr_up,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"AMBR Uplink (Aggregate Maximum Bit Rate for Uplink)", "gtpv2.ambr_up",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_ambr_down,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"AMBR Downlink(Aggregate Maximum Bit Rate for Downlink)", "gtpv2.ambr_down",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_ebi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"EPS Bearer ID (EBI)", "gtpv2.ebi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0f,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ip_address_ipv4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IP address IPv4", "gtpv2.ip_address_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ip_address_ipv6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IP address IPv6", "gtpv2.ip_address_ipv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_mei,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"MEI(Mobile Equipment Identity)", "gtpv2.mei",
|
|
|
|
FT_STRING, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_pdn_numbers_nsapi,
|
|
|
|
{"NSAPI", "gtpv2.pdn_numbers_nsapi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_p_tmsi,
|
|
|
|
{"Packet TMSI (P-TMSI)", "gtpv2.p_tmsi",
|
|
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_p_tmsi_sig,
|
|
|
|
{"P-TMSI Signature", "gtpv2.p_tmsi_sig",
|
|
|
|
FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_daf,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"DAF (Dual Address Bearer Flag)", "gtpv2.daf",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_dtf,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"DTF (Direct Tunnel Flag)", "gtpv2.dtf",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_hi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"HI (Handover Indication)", "gtpv2.hi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_dfi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"DFI (Direct Forwarding Indication)", "gtpv2.dfi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_oi,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"OI (Operation Indication)", "gtpv2.oi",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_isrsi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"ISRSI (Idle mode Signalling Reduction Supported Indication)", "gtpv2.isrsi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_israi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"ISRAI (Idle mode Signalling Reduction Activation Indication)", "gtpv2.israi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_sgwci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"SGWCI (SGW Change Indication)", "gtpv2.sgwci",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_sqci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"SQCI (Subscribed QoS Change Indication", "gtpv2.sqci",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_uimsi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"UIMSI (Unauthenticated IMSI)", "gtpv2.uimsi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_cfsi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"CFSI (Change F-TEID support indication)", "gtpv2.cfsi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_crsi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"CRSI (Change Reporting support indication):", "gtpv2.crsi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_ps,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PS (Piggybacking Supported).)", "gtpv2.ps",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_pt,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PT (Protocol Type)", "gtpv2.pt",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_si,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"SI (Scope Indication)", "gtpv2.si",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_msv,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"MSV (MS Validated)", "gtpv2.msv",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}
|
2011-02-11 21:21:45 +00:00
|
|
|
},
|
2013-12-12 20:16:30 +00:00
|
|
|
{&hf_gtpv2_spare1,
|
|
|
|
{"Spare", "gtpv2.spare",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_spare2,
|
|
|
|
{"Spare", "gtpv2.spare",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_spare3,
|
|
|
|
{"Spare", "gtpv2.spare",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_s6af,
|
|
|
|
{"S6AF (Static IPv6 Address Flag)", "gtpv2.s6af",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_s4af,
|
|
|
|
{"S4AF (Static IPv4 Address Flag))", "gtpv2.s4af",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_mbmdt,
|
|
|
|
{"MBMDT (Management Based MDT allowed flag)", "gtpv2.mbmdt",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_israu,
|
|
|
|
{"ISRAU (ISR is activated for the UE)", "gtpv2.israu",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_ccrsi,
|
|
|
|
{"CCRSI (CSG Change Reporting support indication)", "gtpv2.ccrsi",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}
|
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{ &hf_gtpv2_pdn_type,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PDN Type", "gtpv2.pdn_type",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_pdn_type_vals), 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2013-02-03 22:29:48 +00:00
|
|
|
#if 0
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_tra_info,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Trace ID", "gtpv2.tra_info",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2013-02-03 22:29:48 +00:00
|
|
|
#endif
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_tra_info_msc_momt_calls,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MO and MT calls", "gtpv2.tra_info_msc_momt_calls",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_msc_momt_sms,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MO and MT SMS", "gtpv2.tra_info_msc_momt_sms",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_msc_lu_imsi_ad,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"LU, IMSI attach, IMSI detach", "gtpv2.tra_info_msc_lu_imsi_ad",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_msc_handovers,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Handovers", "gtpv2.tra_info_msc_handovers",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_msc_ss,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"SS", "gtpv2.tra_info_msc_ss",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_mgw_context,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Context", "gtpv2.tra_info_mgw_context",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_sgsn_pdp_context,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"PDP context", "gtpv2.tra_info_sgsn_pdp_context",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_sgsn_momt_sms,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MO and MT SMS", "gtpv2.tra_info_sgsn_momt_sms",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_sgsn_rau_gprs_ad,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"RAU, GPRS attach, GPRS detach", "gtpv2.tra_info_sgsn_rau_gprs_ad",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_sgsn_mbms,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MBMS Context", "gtpv2.tra_into_sgsn_mbms",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_sgsn_reserved,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Reserved", "gtpv2.",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_ggsn_pdp,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"PDP Cpntext", "gtpv2.tra_info_ggsn_pdp",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"GGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_ggsn_mbms,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MBMS Context", "gtpv2.tra_info_ggsn_mbms",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"GGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_bm_sc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MBMS Multicast service activation", "gtpv2.tra_info_bm_sc",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"BM-SC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_mme_sgw_ss,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Session setup", "gtpv2.tra_info_mme_sgw_ss",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_mme_sgw_sr,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Service Request", "gtpv2.tra_info_mme_sgw_sr",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_mme_sgw_iataud,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Initial Attach, Tracking area update, Detach", "gtpv2.tra_info_mme_sgw_iataud",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_msc_s,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MSC-S", "gtpv2.tra_info_lne_msc_s",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_mgw,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MGW", "gtpv2.tra_info_lne_mgw",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_sgsn,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"SGSN", "gtpv2.tra_info_lne_sgsn",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_ggsn,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"GGSN", "gtpv2.tra_info_lne_ggsn",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_rnc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"RNC", "gtpv2.tra_info_lne_rnc",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_bm_sc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"BM-SC", "gtpv2.tra_info_lne_bm_sc",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x20,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_mme,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MME", "gtpv2.tra_info_lne_mme",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x40,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_sgw,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"SGW", "gtpv2.tra_info_lne_sgw",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x80,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_pdn_gw,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"PDN GW", "gtpv2.tra_info_lne_pdn_gw",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lne_enb,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"eNB", "gtpv2.tra_info_lne_enb",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"List of NE Types", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_tdl,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Trace Depth Length", "gtpv2.tra_info_tdl",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_a,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"A", "gtpv2.tra_info_lmsc_a",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_lu,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iu", "gtpv2.tra_info_lmsc_lu",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_mc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Mc", "gtpv2.tra_info_lmsc_mc",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_g,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-G", "gtpv2.tra_info_lmsc_map_g",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_b,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-B", "gtpv2.tra_info_lmsc_map_b",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_e,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-E", "gtpv2.tra_info_lmsc_map_e",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x20,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_f,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-F", "gtpv2.tra_info_lmsc_map_f",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x40,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_cap,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"CAP", "gtpv2.tra_info_lmsc_cap",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x80,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_d,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-D", "gtpv2.tra_info_lmsc_map_d",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmsc_map_c,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-C", "gtpv2.tra_info_lmsc_map_c",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"MSC Server", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmgw_mc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Mc", "gtpv2.tra_info_lmgw_mc",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmgw_nb_up,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Nb-UP", "gtpv2.tra_info_lmgw_nb_up",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x2,
|
|
|
|
"MGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmgw_lu_up,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iu-UP", "gtpv2.tra_info_lmgw_lu_up",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"MGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_gb,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gb", "gtpv2.tra_info_lsgsn_gb",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_lu,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iu", "gtpv2.tra_info_lsgsn_lu",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_gn,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gn", "gtpv2.tra_info_lsgsn_gn",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_map_gr,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-Gr", "gtpv2.tra_info_lsgsn_map_gr",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_map_gd,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-Gd", "gtpv2.tra_info_lsgsn_map_gd",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_map_gf,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MAP-Gf", "gtpv2.tra_info_lsgsn_map_gf",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x20,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_gs,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gs", "gtpv2.tra_info_lsgsn_gs",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x40,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgsn_ge,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Ge", "gtpv2.tra_info_lsgsn_ge",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x80,
|
|
|
|
"SGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lggsn_gn,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gn", "gtpv2.tra_info_lggsn_gn",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"GGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lggsn_gi,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gi", "gtpv2.tra_info_lggsn_gi",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"GGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lggsn_gmb,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gmb", "gtpv2.tra_info_lggsn_gmb",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"GGSN", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lrnc_lu,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iu", "gtpv2.tra_info_lrnc_lu",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"RNC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lrnc_lur,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iur", "gtpv2.tra_info_lrnc_lur",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"RNC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lrnc_lub,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Iub", "gtpv2.tra_info_lrnc_lub",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"RNC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lrnc_uu,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Uu", "gtpv2.tra_info_lrnc_uu",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"RNC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lbm_sc_gmb,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gmb", "gtpv2.tra_info_lbm_sc_gmb",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"BM-SC", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmme_s1_mme,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S1-MME", "gtpv2.tra_info_lmme_s1_mme",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmme_s3,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S3", "gtpv2.tra_info_lmme_s3",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmme_s6a,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S6a", "gtpv2.tra_info_lmme_s6a",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmme_s10,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S10", "gtpv2.tra_info_lmme_s10",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lmme_s11,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S11", "gtpv2.tra_info_lmme_s11",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"MME", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgw_s4,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S4", "gtpv2.tra_info_lsgw_s4",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"SGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgw_s5,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S5", "gtpv2.tra_info_lsgw_s5",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"SGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgw_s8b,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S8b", "gtpv2.tra_info_lsgw_s8b",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"SGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lsgw_s11,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S11", "gtpv2.tra_info_lsgw_s11",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"SGW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s2a,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S2a", "gtpv2.tra_info_lpdn_gw_s2a",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s2b,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S2b", "gtpv2.tra_info_lpdn_gw_s2b",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s2c,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S2c", "gtpv2.tra_info_lpdn_gw_s2c",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s5,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S5", "gtpv2.tra_info_lpdn_gw_s5",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s6c,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S6c", "gtpv2.tra_info_lpdn_gw_s6c",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x10,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_gx,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Gx", "gtpv2.tra_info_lpdn_gw_gx",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x20,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_s8b,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S8b", "gtpv2.tra_info_lpdn_gw_s8b",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x40,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lpdn_gw_sgi,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"SGi", "gtpv2.tra_info_lpdn_gw_sgi",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x80,
|
|
|
|
"PDN GW", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lenb_s1_mme,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"S1-MME", "gtpv2.tra_info_lenb_s1_mme",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x01,
|
|
|
|
"eNB", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lenb_x2,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"X2", "gtpv2.tra_info_lenb_x2",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x02,
|
|
|
|
"eNB", HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_tra_info_lenb_uu,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Uu", "gtpv2.tra_info_lenb_uu",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x04,
|
|
|
|
"eNB", HFILL}
|
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{ &hf_gtpv2_pdn_ipv4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PDN Address and Prefix(IPv4)", "gtpv2.pdn_addr_and_prefix.ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_pdn_ipv6_len,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"IPv6 Prefix Length", "gtpv2.pdn_ipv6_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_pdn_ipv6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PDN Address and Prefix(IPv6)", "gtpv2.pdn_addr_and_prefix.ipv6",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2012-07-23 17:04:37 +00:00
|
|
|
/* Bit 1 - PVI (Pre-emption Vulnerability): See 3GPP TS 29.212[29],
|
|
|
|
* clause 5.3.47 Pre-emption-Vulnerability AVP.
|
|
|
|
* 5.3.47 Pre-emption-Vulnerability AVP
|
|
|
|
* The following values are defined:
|
|
|
|
* PRE-EMPTION_VULNERABILITY_ENABLED (0)
|
|
|
|
* PRE-EMPTION_VULNERABILITY_DISABLED (1)
|
|
|
|
*/
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_bearer_qos_pvi,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PVI (Pre-emption Vulnerability)", "gtpv2.bearer_qos_pvi",
|
2012-07-23 15:27:52 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x01,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_pl,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PL (Priority Level)", "gtpv2.bearer_qos_pl",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x3c,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2012-07-23 17:04:37 +00:00
|
|
|
/* Bit 7 - PCI (Pre-emption Capability): See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP.
|
|
|
|
* clause 5.3.46 Pre-emption-Capability AVP.
|
|
|
|
* 5.3.46 Pre-emption-Capability AVP
|
|
|
|
* The following values are defined:
|
|
|
|
* PRE-EMPTION_CAPABILITY_ENABLED (0)
|
|
|
|
* PRE-EMPTION_CAPABILITY_DISABLED (1)
|
|
|
|
*/
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_bearer_qos_pci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PCI (Pre-emption Capability)", "gtpv2.bearer_qos_pci",
|
2012-07-23 15:27:52 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x40,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_label_qci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Label (QCI)", "gtpv2.bearer_qos_label_qci",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_mbr_up,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Maximum Bit Rate For Uplink", "gtpv2.bearer_qos_mbr_up",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_mbr_down,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Maximum Bit Rate For Downlink", "gtpv2.bearer_qos_mbr_down",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_gbr_up,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Guaranteed Bit Rate For Uplink", "gtpv2.bearer_qos_gbr_up",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_qos_gbr_down,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Guaranteed Bit Rate For Downlink", "gtpv2.bearer_qos_gbr_down",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_flow_qos_label_qci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Label (QCI)", "gtpv2.flow_qos_label_qci",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_flow_qos_mbr_up,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Maximum Bit Rate For Uplink", "gtpv2.flow_qos_mbr_up",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_flow_qos_mbr_down,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Maximum Bit Rate For Downlink", "gtpv2.flow_qos_mbr_down",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_flow_qos_gbr_up,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Guaranteed Bit Rate For Uplink", "gtpv2.flow_qos_gbr_up",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_flow_qos_gbr_down,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Guaranteed Bit Rate For Downlink", "gtpv2.flow_qos_gbr_down",
|
|
|
|
FT_UINT64, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_rat_type,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"RAT Type", "gtpv2.rat_type",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_rat_type_vals_ext, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_ecgi_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"ECGI Present Flag", "gtpv2.uli_ecgi_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_ECGI_MASK,
|
|
|
|
NULL, HFILL}
|
2011-01-12 16:43:59 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_uli_lai_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"LAI Present Flag", "gtpv2.uli_lai_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_LAI_MASK,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_tai_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"TAI Present Flag", "gtpv2.uli_tai_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_TAI_MASK,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_rai_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"RAI Present Flag", "gtpv2.uli_rai_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_RAI_MASK,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_sai_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"SAI Present Flag", "gtpv2.uli_sai_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_SAI_MASK,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_cgi_flg,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"CGI Present Flag", "gtpv2.uli_cgi_flg",
|
2011-08-03 21:14:04 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, GTPv2_ULI_CGI_MASK,
|
|
|
|
NULL, HFILL}
|
2011-08-26 06:22:20 +00:00
|
|
|
},
|
2011-09-21 18:55:03 +00:00
|
|
|
{ &hf_gtpv2_glt,
|
2011-08-26 06:22:20 +00:00
|
|
|
{"Geographic Location Type", "gtpv2.glt",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(geographic_location_type_vals), 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_cgi_lac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Location Area Code", "gtpv2.uli_cgi_lac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_cgi_ci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Cell Identity", "gtpv2.uli_cgi_ci",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_sai_lac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Location Area Code", "gtpv2.uli_sai_lac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_sai_sac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Service Area Code", "gtpv2.uli_sai_sac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_rai_lac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Location Area Code", "gtpv2.uli_rai_lac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_rai_rac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Routing Area Code", "gtpv2.uli_rai_rac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_uli_tai_tac,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Tracking Area Code", "gtpv2.uli_tai_tac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_uli_ecgi_eci,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"ECI (E-UTRAN Cell Identifier)", "gtpv2.uli_ecgi_eci",
|
2013-01-14 18:29:27 +00:00
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2011-01-12 16:43:59 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{&hf_gtpv2_uli_lai_lac,
|
|
|
|
{"Location Area Code (LAC)", "gtpv2.uli_lai_lac",
|
2013-09-07 13:56:25 +00:00
|
|
|
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-06-08 08:36:22 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_uli_ecgi_eci_spare,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Spare", "gtpv2.uli_ecgi_eci_spare",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-08 20:09:29 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_nsapi,
|
|
|
|
{"NSAPI", "gtpv2.nsapi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0f,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_f_teid_v4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"V4", "gtpv2.f_teid_v4",
|
|
|
|
FT_BOOLEAN, 8, TFS(>pv2_f_teid_v4_vals), 0x80,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_f_teid_v6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"V6", "gtpv2.f_teid_v6",
|
|
|
|
FT_BOOLEAN, 8, TFS(>pv2_f_teid_v6_vals), 0x40,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_f_teid_interface_type,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Interface Type", "gtpv2.f_teid_interface_type",
|
2012-11-14 19:41:35 +00:00
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_f_teid_interface_type_vals_ext, 0x3f,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL , HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_f_teid_gre_key,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"TEID/GRE Key", "gtpv2.f_teid_gre_key",
|
2013-09-05 18:51:46 +00:00
|
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL , HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_f_teid_ipv4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"F-TEID IPv4", "gtpv2.f_teid_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_f_teid_ipv6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"F-TEID IPv6", "gtpv2.f_teid_ipv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-05 16:46:40 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_tmsi,
|
|
|
|
{"TMSI", "gtpv2.tmsi",
|
|
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-12-30 14:09:09 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_hsgw_addr_f_len,
|
|
|
|
{"HSGW Address for forwarding Length", "gtpv2.hsgw_addr_f_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2011-01-07 15:21:23 +00:00
|
|
|
{ &hf_gtpv2_hsgw_addr_ipv4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_hsgw_addr_ipv6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_gre_key,
|
|
|
|
{"GRE Key", "gtpv2.gre_key",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL , HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_sgw_addr_ipv4,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Serving GW Address", "gtpv2.sgw_addr_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_sgw_addr_ipv6,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Serving GW Address", "gtpv2.sgw_addr_ipv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_sgw_s1u_teid,
|
|
|
|
{"Serving GW S1-U TEID", "gtpv2.sgw_s1u_teid",
|
|
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-07 15:21:23 +00:00
|
|
|
},
|
2010-05-10 15:54:57 +00:00
|
|
|
{&hf_gtpv2_delay_value,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Delay Value (In integer multiples of 50 milliseconds or zero)", "gtpv2.delay_value",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_charging_id,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Charging id", "gtpv2.charging_id",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_charging_characteristic,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Charging Characteristic", "gtpv2.charging_characteristic",
|
|
|
|
FT_UINT16, BASE_HEX, NULL, 0xffff,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2011-01-04 07:14:11 +00:00
|
|
|
{&hf_gtpv2_bearer_flag_ppc,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"PPC (Prohibit Payload Compression)", "gtpv2.bearer_flag.ppc",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x01,
|
|
|
|
NULL, HFILL}
|
2011-01-04 07:14:11 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_flag_vb,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"VB (Voice Bearer)", "gtpv2.bearer_flag.vb",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_pti,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Procedure Transaction Id", "gtpv2.pti",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
/* MM Context */
|
|
|
|
{ &hf_gtpv2_mm_context_sm,
|
|
|
|
{"Security Mode", "gtpv2.mm_context_sm",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_security_mode), 0xe0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_nhi,
|
|
|
|
{"NHI(Next Hop Indicator)", "gtpv2.mm_context_nhi",
|
|
|
|
FT_BOOLEAN, 8, TFS(>pv2_nhi_vals), 0x10,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_drxi,
|
|
|
|
{"DRXI", "gtpv2.mm_context_drxi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x08,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_cksn,
|
|
|
|
{"CKSN", "gtpv2.mm_context_cksn",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_cksn_ksi,
|
|
|
|
{"CKSN/KSI", "gtpv2.mm_context_cksn_ksi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_ksi_a,
|
|
|
|
{"KSI_asme", "gtpv2.mm_context_ksi_a",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_nr_tri,
|
|
|
|
{"Number of Triplet", "gtpv2.mm_context_nr_tri",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xe0,
|
|
|
|
NULL, HFILL}
|
2012-04-11 15:52:14 +00:00
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_used_cipher,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"Used Cipher", "gtpv2.mm_context_used_cipher",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_used_cipher_vals), 0x07,
|
|
|
|
NULL, HFILL}
|
2011-08-03 21:14:04 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_unipa,
|
|
|
|
{"Used NAS integrity protection algorithm", "gtpv2.mm_context_unipa",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unipa_vals), 0x70,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
|
|
|
|
{ &hf_gtpv2_mm_context_unc,
|
|
|
|
{"Used NAS Cipher", "gtpv2.mm_context_unc",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unc_vals), 0x0f,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_nas_dl_cnt,
|
|
|
|
{"NAS Downlink Count", "gtpv2.mm_context_nas_dl_cnt",
|
|
|
|
FT_UINT24, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_nas_ul_cnt,
|
|
|
|
{"NAS Uplink Count", "gtpv2.mm_context_nas_ul_cnt",
|
|
|
|
FT_UINT24, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-12-14 00:06:16 +00:00
|
|
|
{ &hf_gtpv2_mm_context_kasme,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Kasme", "gtpv2.mm_context_kasme",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL}
|
2012-04-11 15:52:14 +00:00
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_rand,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"RAND", "gtpv2.mm_context_rand",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2012-04-11 15:52:14 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_xres_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"XRES Length", "gtpv2.mm_context_xres_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_xres,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"XRES", "gtpv2.mm_context_xres",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2012-04-11 15:52:14 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_autn_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"AUTN Length", "gtpv2.mm_context_autn_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_autn,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"AUTN", "gtpv2.mm_context_autn",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2012-04-11 15:52:14 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_drx,
|
|
|
|
{"DRX", "gtpv2.mm_context_drx",
|
|
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2013-04-22 19:03:12 +00:00
|
|
|
{ &hf_gtpv2_vdp_length,
|
|
|
|
{"VDP and UE's Usage Setting length", "gtpv2.vdp_length",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
|
2013-06-14 02:44:15 +00:00
|
|
|
{ &hf_gtpv2_mm_context_ue_net_cap_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"Length of UE Network Capability", "gtpv2.mm_context_ue_net_cap_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_ms_net_cap_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"Length of MS Network Capability", "gtpv2.mm_context_ms_net_cap_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_mei_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"Length of Mobile Equipment Identity (MEI)", "gtpv2.mm_context_mei_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-05-07 22:11:34 +00:00
|
|
|
{ &hf_gtpv2_mm_context_vdp_len,
|
2012-04-11 15:52:14 +00:00
|
|
|
{"Length of Voice Domain Preference and UE's Usage Setting", "gtpv2.mm_context_vdp_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-12-01 21:26:22 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_una,
|
|
|
|
{ "UTRAN", "gtpv2.mm_context.una",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x01,
|
|
|
|
NULL, HFILL }
|
2012-05-07 22:11:34 +00:00
|
|
|
},
|
2011-12-01 21:26:22 +00:00
|
|
|
{ &hf_gtpv2_gena,
|
2012-01-19 21:57:24 +00:00
|
|
|
{ "GERAN", "gtpv2.mm_context.gena",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x02,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL }
|
2011-12-14 00:06:16 +00:00
|
|
|
},
|
2011-12-01 21:26:22 +00:00
|
|
|
{ &hf_gtpv2_gana,
|
|
|
|
{ "GAN", "gtpv2.mm_context.gana",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x04,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL }
|
2011-12-14 00:06:16 +00:00
|
|
|
},
|
2011-12-01 21:26:22 +00:00
|
|
|
{ &hf_gtpv2_ina,
|
|
|
|
{ "I-HSPA-EVOLUTION", "gtpv2.mm_context.ina",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x08,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL }
|
2011-12-14 00:06:16 +00:00
|
|
|
},
|
2011-12-01 21:26:22 +00:00
|
|
|
{ &hf_gtpv2_ena,
|
|
|
|
{ "E-UTRAN", "gtpv2.mm_context.ena",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x10,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL }
|
2011-12-14 00:06:16 +00:00
|
|
|
},
|
2011-12-01 21:26:22 +00:00
|
|
|
{ &hf_gtpv2_hnna,
|
|
|
|
{ "HO-toNone3GPP-Access", "gtpv2.mm_context.hnna",
|
2012-04-12 14:07:31 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed), 0x20,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL }
|
2011-12-14 00:06:16 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_mm_context_ksi,
|
|
|
|
{"KSI", "gtpv2.mm_context_ksi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_nr_qui,
|
|
|
|
{"Number of Quintuplets", "gtpv2.mm_context_nr_qui",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xe0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
|
|
|
|
{ &hf_gtpv2_mm_context_nr_qua,
|
|
|
|
{"Number of Quadruplet", "gtpv2.mm_context_nr_qua",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x1c,
|
|
|
|
NULL, HFILL}
|
2011-12-01 21:26:22 +00:00
|
|
|
},
|
2011-12-14 00:06:16 +00:00
|
|
|
{ &hf_gtpv2_mm_context_uamb_ri,
|
2011-12-01 21:26:22 +00:00
|
|
|
{"UAMB RI", "gtpv2.mm_context_uamb_ri",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-12-14 00:06:16 +00:00
|
|
|
{ &hf_gtpv2_mm_context_osci,
|
2011-12-01 21:26:22 +00:00
|
|
|
{"OSCI", "gtpv2.mm_context_osci",
|
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-12-14 00:06:16 +00:00
|
|
|
{ &hf_gtpv2_mm_context_samb_ri,
|
2011-12-01 21:26:22 +00:00
|
|
|
{"SAMB RI", "gtpv2.mm_context_samb_ri",
|
2012-04-11 15:52:14 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x0,
|
2011-12-01 21:26:22 +00:00
|
|
|
NULL, HFILL}
|
2011-08-03 21:14:04 +00:00
|
|
|
},
|
2012-04-11 15:52:14 +00:00
|
|
|
{ &hf_gtpv2_ue_time_zone_dst,
|
2013-12-12 20:16:30 +00:00
|
|
|
{"Daylight Saving Time", "gtpv2.ue_time_zone_dst",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_ue_time_zone_dst_vals), 0x03,
|
|
|
|
NULL, HFILL}
|
2011-08-03 21:14:04 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_fq_csid_type,
|
|
|
|
{"Node-ID Type", "gtpv2.fq_csid_type",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xf0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_fq_csid_nr,
|
|
|
|
{"Number of CSIDs", "gtpv2.fq_csid_nr",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0f,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_fq_csid_ipv4,
|
|
|
|
{"Node-ID (IPv4)", "gtpv2.fq_csid_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_fq_csid_ipv6,
|
|
|
|
{"Node-ID (IPv6)", "gtpv2.fq_csid_ipv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_fq_csid_id,
|
|
|
|
{"CSID", "gtpv2.fq_csid_id",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_complete_req_msg_type,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Complete Request Message Type", "gtpv2.complete_req_msg_type",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_complete_req_msg_type_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_mme_grp_id,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MME Group ID", "gtpv2.mme_grp_id",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mme_code,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"MME Code", "gtpv2.mme_code",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_m_tmsi,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"M-TMSI", "gtpv2.m_tmsi",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_container_type,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Container Type", "gtpv2.container_type",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_container_type_vals), 0x0f,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_cause_type,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Cause Type", "gtpv2.cause_type",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_cause_type_vals_ext, 0x0f,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_CauseRadioNetwork,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Radio Network Layer Cause", "gtpv2.CauseRadioNetwork",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(s1ap_CauseRadioNetwork_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_CauseTransport,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Transport Layer Cause", "gtpv2.CauseTransport",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(s1ap_CauseTransport_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_CauseNas,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"NAS Cause", "gtpv2.CauseNas",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(s1ap_CauseNas_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_CauseMisc,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Miscellaneous Cause", "gtpv2.CauseMisc",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(s1ap_CauseMisc_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_target_type,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Target Type", "gtpv2.target_type",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_target_type_vals_ext, 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{&hf_gtpv2_macro_enodeb_id,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Macro eNodeB ID", "gtpv2.macro_enodeb_id",
|
|
|
|
FT_UINT24, BASE_HEX, NULL, 0x0fffff,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_CauseProtocol,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Protocol Cause", "gtpv2.CauseProtocol",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(s1ap_CauseProtocol_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_apn_rest,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"APN Restriction", "gtpv2.apn_rest",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_selec_mode,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Selection Mode", "gtpv2.selec_mode",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_selec_mode_vals), 0x03,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2011-01-08 20:09:29 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_source_type,
|
|
|
|
{"Source Type", "gtpv2.source_type",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_bearer_control_mode,
|
2012-11-26 16:50:13 +00:00
|
|
|
{"Bearer Control Mode", "gtpv2.bearer_control_mode",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_bearer_control_mode_vals), 0x0,
|
2011-08-03 21:14:04 +00:00
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_cng_rep_act,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Change Reporting Action", "gtpv2.cng_rep_act",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_cng_rep_act_vals), 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_node_type,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Node Type", "gtpv2.node_type",
|
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_node_type_vals), 0x0,
|
|
|
|
NULL, HFILL}
|
2010-06-01 22:22:09 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{&hf_gtpv2_fqdn,
|
|
|
|
{"FQDN", "gtpv2.fqdn",
|
|
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2011-01-12 16:43:59 +00:00
|
|
|
},
|
2010-06-08 08:36:22 +00:00
|
|
|
{ &hf_gtpv2_enterprise_id,
|
2011-08-03 21:14:04 +00:00
|
|
|
{"Enterprise ID", "gtpv2.enterprise_id",
|
|
|
|
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &sminmpec_values_ext, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_address_digits,
|
2011-08-03 21:14:04 +00:00
|
|
|
{ "Address digits", "gtpv2.address_digits",
|
2010-05-10 15:54:57 +00:00
|
|
|
FT_STRING, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL }
|
2010-06-28 15:31:41 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
{ &hf_gtpv2_ti,
|
|
|
|
{"Transaction Identifier", "gtpv2.ti",
|
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2010-05-10 15:54:57 +00:00
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_container_phx,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"PHX", "gtpv2.bss_cont.phx",
|
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_sapi_flg,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"SAPI", "gtpv2.bss_cont.sapi_flg",
|
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_rp_flg,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"RP", "gtpv2.bss_cont.rp_flg",
|
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_pfi_flg,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"PFI", "gtpv2.bss_cont.pfi_flg",
|
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_pfi,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"Packet Flow ID(PFI)", "gtpv2.bss_cont.pfi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_rp,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"Radio Priority(RP)", "gtpv2.bss_cont.rp",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x07,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_sapi,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"SAPI", "gtpv2.bss_cont.sapi",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xf0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_bss_con_xid_len,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"XiD parameters length", "gtpv2.bss_cont.xid_len",
|
2013-01-29 14:31:21 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_bss_con_xid,
|
|
|
|
{"XiD parameters", "gtpv2.bss_cont.xid",
|
2011-11-06 08:18:26 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_home_enodeb_id,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"Home eNodeB ID", "gtpv2.home_enodeb_id",
|
|
|
|
FT_UINT32, BASE_HEX, NULL, 0x0fffffff,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2011-11-09 02:48:51 +00:00
|
|
|
{ &hf_gtpv2_tac,
|
2011-11-06 08:18:26 +00:00
|
|
|
{"Tracking Area Code (TAC)", "gtpv2.tac",
|
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
2012-02-02 20:56:20 +00:00
|
|
|
{ &hf_gtpv2_mbms_service_area_nr,
|
|
|
|
{"Number of MBMS Service Area codes", "gtpv2.mbms_service_area_nr",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-02 20:56:20 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_service_area_id,
|
2012-02-04 09:41:21 +00:00
|
|
|
{"MBMS Service Area code (Service Area Identity)", "gtpv2.mbms_service_area_id",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-02 20:56:20 +00:00
|
|
|
},
|
2012-02-04 09:41:21 +00:00
|
|
|
{ &hf_gtpv2_mbms_session_id,
|
|
|
|
{"MBMS Session Identifier", "gtpv2.mbms_session_id",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_flow_id,
|
|
|
|
{"MBMS Flow Identifier", "gtpv2.mbms_flow_id",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
2012-02-06 17:29:29 +00:00
|
|
|
{ &hf_gtpv2_cteid,
|
2012-04-25 08:39:49 +00:00
|
|
|
{"Common Tunnel Endpoint Identifier", "gtpv2.cetid",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-06 17:29:29 +00:00
|
|
|
},
|
2012-02-04 09:41:21 +00:00
|
|
|
{ &hf_gtpv2_ip_addr_type,
|
|
|
|
{"IP Address Type", "gtpv2.ip_addr_type",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0xc0,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ip_addr_len,
|
|
|
|
{"IP Address Length", "gtpv2.ip_addr_len",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x3f,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_ip_mc_dist_addrv4,
|
|
|
|
{"MBMS IP Multicast Distribution Address (IPv4)", "gtpv2.mbms_ip_mc_dist_addrv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_ip_mc_dist_addrv6,
|
|
|
|
{"MBMS IP Multicast Distribution Address (IPv6)", "gtpv2.mbms_ip_mc_dist_addrv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_ip_mc_src_addrv4,
|
|
|
|
{"MBMS IP Multicast Source Address (IPv4)", "gtpv2.mbms_ip_mc_src_addrv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_ip_mc_src_addrv6,
|
|
|
|
{"MBMS IP Multicast Source Address (IPv6)", "gtpv2.mbms_ip_mc_src_addrv6",
|
|
|
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_hc_indicator,
|
|
|
|
{"MBMS HC Indicator", "gtpv2.mbms_hc_indicator",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_hc_indicator_vals), 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_dist_indication,
|
|
|
|
{"MBMS Distribution Indication", "gtpv2.mbms_dist_indication",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_dist_indication_vals), 0x03,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
2013-11-08 05:58:13 +00:00
|
|
|
{ &hf_gtpv2_subscriber_rfsp,
|
|
|
|
{"Subscribed RFSP Index", "gtpv2.subscriber_rfsp",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_INT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2013-11-08 05:58:13 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_rfsp_inuse,
|
|
|
|
{"RFSP Index in Use", "gtpv2.rfsp_inuse",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_INT16, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-11-29 10:57:33 +00:00
|
|
|
},
|
2012-02-06 17:29:29 +00:00
|
|
|
{ &hf_gtpv2_mbms_service_id,
|
|
|
|
{"MBMS Service ID", "gtpv2.mbms_service_id",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
2012-02-06 17:29:29 +00:00
|
|
|
{ &hf_gtpv2_add_flags_for_srvcc_ics,
|
|
|
|
{"ICS (IMS Centralized Service)", "gtpv2.add_flags_for_srvcc_ics",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x01,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
2012-02-06 17:29:29 +00:00
|
|
|
{ &hf_gtpv2_vsrvcc_flag,
|
|
|
|
{"VF (vSRVCC Flag)", "gtpv2.vsrvcc_flag",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
2012-02-04 09:41:21 +00:00
|
|
|
},
|
2013-03-14 19:00:40 +00:00
|
|
|
{ &hf_gtpv2_henb_info_report_fti,
|
|
|
|
{"FTI", "gtpv2.henb_info_report_fti",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(>pv2_henb_info_report_fti_vals), 0x01,
|
|
|
|
NULL, HFILL}
|
2013-03-14 19:00:40 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ip4cp_subnet_prefix_len,
|
|
|
|
{"Subnet Prefix Length", "gtpv2.ip4cp_subnet_prefix_len",
|
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_ip4cp_ipv4,
|
|
|
|
{"IPv4 Default Router Address", "gtpv2.ip4cp_ipv4",
|
|
|
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
|
|
|
},
|
|
|
|
{ &hf_gtpv2_change_report_flags_sncr,
|
|
|
|
{"SNCR (Service Network Change to Report)", "gtpv2.change_report_flags_sncr",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x01,
|
|
|
|
NULL, HFILL}
|
2013-03-14 19:00:40 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_change_report_flags_tzcr,
|
|
|
|
{"TZCR (Time Zone Change to Report)", "gtpv2.change_report_flags_tzcr",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x02,
|
|
|
|
NULL, HFILL}
|
2013-03-14 19:00:40 +00:00
|
|
|
},
|
|
|
|
{&hf_gtpv2_action_indication_val,
|
|
|
|
{"Action Indication", "gtpv2.action_indication_val",
|
|
|
|
FT_UINT8, BASE_DEC|BASE_EXT_STRING, >pv2_action_indication_vals_ext, 0x07,
|
|
|
|
NULL , HFILL}
|
|
|
|
},
|
2012-04-25 08:39:49 +00:00
|
|
|
{ &hf_gtpv2_abs_time_mbms_data,
|
|
|
|
{"Absolute Time of MBMS Data Transfer", "gtpv2.abs_time_mbms_data",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_STRING, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL}
|
2012-04-25 08:39:49 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_session_duration_days,
|
|
|
|
{"MBMS Session Duration (days)", "gtpv2.mbms_session_duration_days",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT24, BASE_DEC, NULL, 0x00007F,
|
|
|
|
NULL, HFILL}
|
2012-04-25 08:39:49 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mbms_session_duration_secs,
|
|
|
|
{"MBMS Session Duration (seconds)", "gtpv2.mbms_session_duration_secs",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT24, BASE_DEC, NULL, 0xFFFF80,
|
|
|
|
NULL, HFILL}
|
2012-04-25 08:39:49 +00:00
|
|
|
},
|
2013-06-14 02:44:15 +00:00
|
|
|
{ &hf_gtpv2_node_features_prn,
|
|
|
|
{"PGW Restart Notification (PRN)", "gtpv2.node_features_prn",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
|
|
|
|
NULL, HFILL}
|
2013-06-14 02:44:15 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_node_features_mabr,
|
|
|
|
{"Modify Access Bearers Request (MABR)", "gtpv2.node_features_mabr",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
|
|
|
|
NULL, HFILL}
|
2013-06-14 02:44:15 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_node_features_ntsr,
|
|
|
|
{"Network Triggered Service Restoration (NTSR)", "gtpv2.node_features_ntsr",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
|
|
|
|
NULL, HFILL}
|
2013-06-14 02:44:15 +00:00
|
|
|
},
|
2012-04-25 08:39:49 +00:00
|
|
|
{ &hf_gtpv2_time_to_data_xfer,
|
|
|
|
{"MBMS Time to Data Transfer", "gtpv2.time_to_data_xfer",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_STRING, BASE_NONE, NULL, 0,
|
|
|
|
NULL, HFILL}
|
2012-04-25 08:39:49 +00:00
|
|
|
},
|
2012-04-27 10:48:03 +00:00
|
|
|
{ &hf_gtpv2_arp_pvi,
|
|
|
|
{"Pre-emption Vulnerability (PVI)", "gtpv2.arp_pvi",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x01,
|
|
|
|
NULL, HFILL}
|
2012-04-27 10:48:03 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_arp_pl,
|
|
|
|
{"Priority Level", "gtpv2.arp_pl",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x3c,
|
|
|
|
NULL, HFILL}
|
2012-04-27 10:48:03 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_arp_pci,
|
|
|
|
{"Pre-emption Capability (PCI)", "gtpv2.arp_pci",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x40,
|
|
|
|
NULL, HFILL}
|
2012-04-27 10:48:03 +00:00
|
|
|
},
|
2012-10-29 16:02:51 +00:00
|
|
|
{ &hf_gtpv2_timer_unit,
|
|
|
|
{"Timer unit", "gtpv2.timer_unit",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_timer_unit_vals), 0xe0,
|
|
|
|
NULL, HFILL}
|
2012-10-29 16:02:51 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_timer_value,
|
|
|
|
{"Timer value", "gtpv2.timer_value",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x1f,
|
|
|
|
NULL, HFILL}
|
2012-10-29 16:02:51 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_lapi,
|
|
|
|
{"LAPI (Low Access Priority Indication)", "gtpv2.lapi",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_BOOLEAN, 8, NULL, 0x01,
|
|
|
|
NULL, HFILL}
|
2012-10-29 16:02:51 +00:00
|
|
|
},
|
2012-05-02 07:23:32 +00:00
|
|
|
{ &hf_gtpv2_mm_context_higher_br_16mb_flg_len,
|
|
|
|
{"Length of Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg_len",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-05-02 07:23:32 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mm_context_higher_br_16mb_flg,
|
2013-01-29 14:31:21 +00:00
|
|
|
{"Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg",
|
2013-12-12 20:16:30 +00:00
|
|
|
FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_higher_br_16mb_flg_vals), 0x0,
|
|
|
|
NULL, HFILL}
|
2012-05-02 07:23:32 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mmbr_ul,
|
2013-12-12 20:16:30 +00:00
|
|
|
{"Max MBR/APN-AMBR for uplink", "gtpv2.mmbr_ul",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-05-02 07:23:32 +00:00
|
|
|
},
|
|
|
|
{ &hf_gtpv2_mmbr_dl,
|
2013-12-12 20:16:30 +00:00
|
|
|
{"Max MBR/APN-AMBR for downlink", "gtpv2.mmbr_dl",
|
|
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
|
NULL, HFILL}
|
2012-05-02 07:23:32 +00:00
|
|
|
},
|
2011-08-03 21:14:04 +00:00
|
|
|
};
|
2009-02-10 21:57:56 +00:00
|
|
|
|
|
|
|
static gint *ett_gtpv2_array[] = {
|
2010-05-10 15:54:57 +00:00
|
|
|
&ett_gtpv2,
|
|
|
|
&ett_gtpv2_flags,
|
|
|
|
&ett_gtpv2_ie,
|
2011-07-30 14:05:31 +00:00
|
|
|
&ett_gtpv2_uli_flags,
|
|
|
|
&ett_gtpv2_uli_field,
|
2010-05-10 15:54:57 +00:00
|
|
|
&ett_gtpv2_bearer_ctx,
|
2011-07-30 14:05:31 +00:00
|
|
|
&ett_gtpv2_PDN_conn,
|
|
|
|
&ett_gtpv2_mm_context_flag,
|
2011-01-07 15:21:23 +00:00
|
|
|
&ett_gtpv2_pdn_numbers_nsapi,
|
2011-07-30 14:05:31 +00:00
|
|
|
&ett_gtpv2_tra_info_trigg,
|
2011-01-07 15:21:23 +00:00
|
|
|
&ett_gtpv2_tra_info_trigg_msc_server,
|
|
|
|
&ett_gtpv2_tra_info_trigg_mgw,
|
|
|
|
&ett_gtpv2_tra_info_trigg_sgsn,
|
|
|
|
&ett_gtpv2_tra_info_trigg_ggsn,
|
|
|
|
&ett_gtpv2_tra_info_trigg_bm_sc,
|
2011-07-30 14:05:31 +00:00
|
|
|
&ett_gtpv2_tra_info_trigg_sgw_mme,
|
|
|
|
&ett_gtpv2_tra_info_interfaces,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_imsc_server,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lmgw,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lsgsn,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lggsn,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lrnc,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lbm_sc,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lmme,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lsgw,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lpdn_gw,
|
|
|
|
&ett_gtpv2_tra_info_interfaces_lpdn_lenb,
|
|
|
|
&ett_gtpv2_tra_info_ne_types,
|
|
|
|
&ett_gtpv2_rai,
|
2011-08-03 21:14:04 +00:00
|
|
|
&ett_gtpv2_stn_sr,
|
2011-07-30 14:05:31 +00:00
|
|
|
&ett_gtpv2_ms_mark,
|
|
|
|
&ett_gtpv2_supp_codec_list,
|
2011-12-01 21:26:22 +00:00
|
|
|
&ett_gtpv2_bss_con,
|
2011-12-14 00:06:16 +00:00
|
|
|
&ett_gtpv2_mm_context_auth_qua,
|
2012-05-07 22:11:34 +00:00
|
|
|
&ett_gtpv2_mm_context_auth_qui,
|
|
|
|
&ett_gtpv2_mm_context_auth_tri,
|
2011-12-14 00:06:16 +00:00
|
|
|
&ett_gtpv2_mm_context_net_cap,
|
|
|
|
&ett_gtpv2_ms_network_capability,
|
|
|
|
&ett_gtpv2_vd_pref,
|
|
|
|
&ett_gtpv2_access_rest_data,
|
2013-01-29 14:31:21 +00:00
|
|
|
&ett_gtpv2_qua,
|
2012-11-29 10:57:33 +00:00
|
|
|
&ett_gtpv2_qui,
|
2009-02-10 21:57:56 +00:00
|
|
|
};
|
|
|
|
|
2013-06-09 03:28:05 +00:00
|
|
|
static ei_register_info ei[] = {
|
|
|
|
{ &ei_gtpv2_ie_data_not_dissected, { "gtpv2.ie_data_not_dissected", PI_PROTOCOL, PI_NOTE, "IE data not dissected yet", EXPFILL }},
|
|
|
|
{ &ei_gtpv2_ie_len_invalid, { "gtpv2.ie_len_invalid", PI_PROTOCOL, PI_ERROR, "Wrong length", EXPFILL }},
|
|
|
|
{ &ei_gtpv2_source_type_unknown, { "gtpv2.source_type.unknown", PI_PROTOCOL, PI_ERROR, "Unknown source type", EXPFILL }},
|
|
|
|
{ &ei_gtpv2_fq_csid_type_bad, { "gtpv2.fq_csid_type.unknown", PI_PROTOCOL, PI_ERROR, "Wrong Node-ID Type", EXPFILL }},
|
|
|
|
};
|
|
|
|
|
|
|
|
expert_module_t* expert_gtpv2;
|
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
proto_gtpv2 = proto_register_protocol("GPRS Tunneling Protocol V2", "GTPv2", "gtpv2");
|
2009-02-10 21:57:56 +00:00
|
|
|
proto_register_field_array(proto_gtpv2, hf_gtpv2, array_length(hf_gtpv2));
|
|
|
|
proto_register_subtree_array(ett_gtpv2_array, array_length(ett_gtpv2_array));
|
2013-06-09 03:28:05 +00:00
|
|
|
expert_gtpv2 = expert_register_protocol(proto_gtpv2);
|
|
|
|
expert_register_field_array(expert_gtpv2, ei, array_length(ei));
|
|
|
|
|
2010-06-08 08:36:22 +00:00
|
|
|
/* AVP Code: 22 3GPP-User-Location-Info */
|
2010-12-20 05:35:29 +00:00
|
|
|
dissector_add_uint("diameter.3gpp", 22, new_create_dissector_handle(dissect_diameter_3gpp_uli, proto_gtpv2));
|
2009-02-10 21:57:56 +00:00
|
|
|
|
2010-05-10 15:54:57 +00:00
|
|
|
register_dissector("gtpv2", dissect_gtpv2, proto_gtpv2);
|
2011-12-14 00:06:16 +00:00
|
|
|
/* Dissector table for private extensions */
|
|
|
|
gtpv2_priv_ext_dissector_table = register_dissector_table("gtpv2.priv_ext", "GTPv2 PRIVATE EXT", FT_UINT16, BASE_DEC);
|
2009-02-10 21:57:56 +00:00
|
|
|
}
|
|
|
|
|
2010-12-30 14:09:09 +00:00
|
|
|
void
|
|
|
|
proto_reg_handoff_gtpv2(void)
|
|
|
|
{
|
2011-08-03 21:14:04 +00:00
|
|
|
nas_eps_handle = find_dissector("nas-eps");
|
2010-12-30 14:09:09 +00:00
|
|
|
}
|
2011-08-03 21:14:04 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Editor modelines
|
|
|
|
*
|
|
|
|
* Local Variables:
|
|
|
|
* c-basic-offset: 4
|
|
|
|
* tab-width: 8
|
|
|
|
* indent-tabs-mode: nil
|
|
|
|
* End:
|
|
|
|
*
|
2011-09-21 17:49:11 +00:00
|
|
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
2011-08-03 21:14:04 +00:00
|
|
|
* :indentSize=4:tabSize=8:noTabs=true:
|
|
|
|
*/
|