Bug Summary

File:epan/dissectors/packet-gtpv2.c
Warning:line 9759, column 66
Access to field 'conv_index' results in a dereference of a null pointer (loaded from variable 'conversation')

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-gtpv2.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-21/lib/clang/21 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-21/lib/clang/21/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-truncation -Wno-format-nonliteral -Wno-pointer-sign -std=gnu11 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /builds/wireshark/wireshark/sbout/2025-10-27-100323-3623-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-gtpv2.c
1/* packet-gtpv2.c
2 *
3 * Routines for GTPv2 dissection
4 * Copyright 2009 - 2021, Anders Broman <anders.broman [at] ericsson.com>
5 *
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <[email protected]>
8 * Copyright 1998 Gerald Combs
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 *
12 * Ref: 3GPP TS 29.274 V18.7.0 (2024-06-26)
13 */
14
15#include "config.h"
16
17#include <math.h>
18
19#include <epan/packet.h>
20#include <epan/conversation.h>
21#include <epan/to_str.h>
22#include <epan/asn1.h>
23#include <epan/expert.h>
24#include <epan/sminmpec.h>
25#include <epan/addr_resolv.h>
26#include <epan/tap.h>
27#include <epan/srt_table.h>
28#include <epan/tfs.h>
29#include <proto.h>
30#include <unit_strings.h>
31
32#include "packet-gsm_a_common.h"
33#include "packet-gsm_map.h"
34#include "packet-e164.h"
35#include "packet-e212.h"
36#include "packet-s1ap.h"
37#include "packet-ranap.h"
38#include "packet-bssgp.h"
39#include "packet-ngap.h"
40#include "packet-gtpv2.h"
41#include "packet-radius.h"
42#include "packet-diameter.h"
43#include "packet-diameter_3gpp.h"
44#include "packet-ip.h"
45#include "packet-http2.h"
46
47void proto_register_gtpv2(void);
48void proto_reg_handoff_gtpv2(void);
49
50static dissector_handle_t nas_eps_handle;
51static dissector_table_t gtpv2_priv_ext_dissector_table;
52
53
54/*GTPv2 Message->GTP Header(SB)*/
55static int proto_gtpv2;
56
57static int hf_gtpv2_response_in;
58static int hf_gtpv2_response_to;
59static int hf_gtpv2_response_time;
60static int hf_gtpv2_spare_half_octet;
61//static int hf_gtpv2_spare_b7_b1;
62static int hf_gtpv2_spare_b7_b2;
63static int hf_gtpv2_spare_b7_b3;
64static int hf_gtpv2_spare_b7_b4;
65static int hf_gtpv2_spare_b7_b5;
66
67static int hf_gtpv2_spare_bits;
68static int hf_gtpv2_flags;
69static int hf_gtpv2_version;
70static int hf_gtpv2_p;
71static int hf_gtpv2_t;
72static int hf_gtpv2_mp;
73static int hf_gtpv2_message_type;
74static int hf_gtpv2_msg_length;
75static int hf_gtpv2_teid;
76static int hf_gtpv2_seq;
77static int hf_gtpv2_msg_prio;
78static int hf_gtpv2_spare;
79static int hf_gtpv2_spare_w0;
80
81static int hf_gtpv2_ie;
82static int hf_gtpv2_ie_len;
83static int hf_gtpv2_cr;
84static int hf_gtpv2_instance;
85static int hf_gtpv2_cause;
86static int hf_gtpv2_cause_cs;
87static int hf_gtpv2_cause_bce;
88static int hf_gtpv2_cause_pce;
89static int hf_gtpv2_cause_off_ie_t;
90static int hf_gtpv2_rec;
91/*Start SRVCC Messages*/
92static int hf_gtpv2_stn_sr;
93static int hf_gtpv2_len_trans_con;
94static int hf_gtpv2_eksi;
95static int hf_gtpv2_ck;
96static int hf_gtpv2_ik;
97static int hf_gtpv2_len_ms_classmark2;
98static int hf_gtpv2_len_ms_classmark3;
99static int hf_gtpv2_len_supp_codec_list;
100static int hf_gtpv2_ksi;
101/*static int hf_gtpv2_kc; */
102static int hf_gtpv2_cksn;
103static int hf_gtpv2_srvcc_cause;
104static int hf_gtpv2_rac;
105static int hf_gtpv2_rnc_id;
106static int hf_gtpv2_ext_rnc_id;
107static int hf_gtpv2_lac;
108static int hf_gtpv2_sac;
109static int hf_gtpv2_tgt_g_cell_id;
110static int hf_gtpv2_teid_c;
111static int hf_gtpv2_sv_sti;
112static int hf_gtpv2_sv_ics;
113static int hf_gtpv2_sv_emind;
114/*End SRVCC Messages*/
115static int hf_gtpv2_apn;
116static int hf_gtpv2_ebi;
117static int hf_gtpv2_daf;
118static int hf_gtpv2_dtf;
119static int hf_gtpv2_hi;
120static int hf_gtpv2_dfi;
121static int hf_gtpv2_oi;
122static int hf_gtpv2_isrsi;
123static int hf_gtpv2_israi;
124static int hf_gtpv2_sgwci;
125static int hf_gtpv2_sqci;
126static int hf_gtpv2_uimsi;
127static int hf_gtpv2_cfsi;
128static int hf_gtpv2_crsi;
129static int hf_gtpv2_pt;
130static int hf_gtpv2_ps;
131static int hf_gtpv2_si;
132static int hf_gtpv2_msv;
133static int hf_gtpv2_retloc;
134static int hf_gtpv2_pbic;
135static int hf_gtpv2_srni;
136static int hf_gtpv2_s6af;
137static int hf_gtpv2_s4af;
138static int hf_gtpv2_mbmdt;
139static int hf_gtpv2_israu;
140static int hf_gtpv2_ccrsi;
141static int hf_gtpv2_cprai;
142static int hf_gtpv2_arrl;
143static int hf_gtpv2_ppof;
144static int hf_gtpv2_ppon_ppei;
145static int hf_gtpv2_ppsi;
146static int hf_gtpv2_csfbi;
147static int hf_gtpv2_clii;
148static int hf_gtpv2_cpsr;
149static int hf_gtpv2_nsi;
150static int hf_gtpv2_uasi;
151static int hf_gtpv2_dtci;
152static int hf_gtpv2_bdwi;
153static int hf_gtpv2_psci;
154static int hf_gtpv2_pcri;
155static int hf_gtpv2_aosi;
156static int hf_gtpv2_aopi;
157static int hf_gtpv2_roaai;
158static int hf_gtpv2_epcosi;
159static int hf_gtpv2_cpopci;
160static int hf_gtpv2_pmtsmi;
161static int hf_gtpv2_s11tf;
162static int hf_gtpv2_pnsi;
163static int hf_gtpv2_unaccsi;
164static int hf_gtpv2_wpmsi;
165
166static int hf_gtpv2_5gsnn26;
167static int hf_gtpv2_reprefi;
168static int hf_gtpv2_5gsiwk;
169static int hf_gtpv2_eevrsi;
170static int hf_gtpv2_ltemui;
171static int hf_gtpv2_ltempi;
172static int hf_gtpv2_enbcrsi;
173static int hf_gtpv2_tspcmi;
174static int hf_gtpv2_ethpdn;
175
176static int hf_gtpv2_csrmfi;
177static int hf_gtpv2_mtedtn;
178static int hf_gtpv2_mtedta;
179static int hf_gtpv2_n5gnmi;
180static int hf_gtpv2_5gcnrs;
181static int hf_gtpv2_5gcnri;
182static int hf_gtpv2_5srhoi;
183
184static int hf_gtpv2_nspusi;
185static int hf_gtpv2_pgwrnsi;
186static int hf_gtpv2_rppcsi;
187static int hf_gtpv2_pgwchi;
188static int hf_gtpv2_sissme;
189static int hf_gtpv2_nsenbi;
190static int hf_gtpv2_idfupf;
191static int hf_gtpv2_emci;
192
193static int hf_gtpv2_lapcosi;
194static int hf_gtpv2_ltemsai;
195static int hf_gtpv2_srtpi;
196static int hf_gtpv2_upipsi;
197
198static int hf_gtpv2_pdn_type;
199static int hf_gtpv2_pdn_ipv4;
200static int hf_gtpv2_pdn_ipv6_len;
201static int hf_gtpv2_pdn_ipv6;
202static int hf_gtpv2_pdn_numbers_nsapi;
203static int hf_gtpv2_p_tmsi;
204static int hf_gtpv2_p_tmsi_sig;
205static int hf_gtpv2_mmbr_ul;
206static int hf_gtpv2_mmbr_dl;
207
208static int hf_gtpv2_rat_type;
209static int hf_gtpv2_uli_ext_macro_enb_id_flg;
210static int hf_gtpv2_uli_macro_enb_id_flg;
211static int hf_gtpv2_uli_lai_flg;
212static int hf_gtpv2_uli_ecgi_flg;
213static int hf_gtpv2_uli_tai_flg;
214static int hf_gtpv2_uli_rai_flg;
215static int hf_gtpv2_uli_sai_flg;
216static int hf_gtpv2_uli_cgi_flg;
217static int hf_gtpv2_glt;
218static int hf_gtpv2_cng_rep_act;
219
220static int hf_gtpv2_selec_mode;
221static int hf_gtpv2_source_type;
222static int hf_gtpv2_f_teid_v4;
223static int hf_gtpv2_f_teid_v6;
224static int hf_gtpv2_f_teid_interface_type;
225static int hf_gtpv2_f_teid_gre_key;
226static int hf_gtpv2_f_teid_ipv4;
227static int hf_gtpv2_f_teid_ipv6;
228static int hf_gtpv2_tmsi;
229static int hf_gtpv2_hsgw_addr_f_len;
230static int hf_gtpv2_hsgw_addr_ipv4;
231static int hf_gtpv2_hsgw_addr_ipv6;
232static int hf_gtpv2_gre_key;
233static int hf_gtpv2_sgw_addr_ipv4;
234static int hf_gtpv2_sgw_addr_ipv6;
235static int hf_gtpv2_sgw_s1u_teid;
236static int hf_gtpv2_ipv4_addr;
237
238
239static int hf_gtpv2_ambr_up;
240static int hf_gtpv2_ambr_down;
241static int hf_gtpv2_ip_address_ipv4;
242static int hf_gtpv2_ip_address_ipv6;
243static int hf_gtpv2_mei;
244
245/* Trace Information */
246/* static int hf_gtpv2_tra_info; */
247static int hf_gtpv2_tra_info_msc_momt_calls;
248static int hf_gtpv2_tra_info_msc_momt_sms;
249static int hf_gtpv2_tra_info_msc_lu_imsi_ad;
250static int hf_gtpv2_tra_info_msc_handovers;
251static int hf_gtpv2_tra_info_msc_ss;
252static int hf_gtpv2_tra_info_mgw_context;
253static int hf_gtpv2_tra_info_sgsn_pdp_context;
254static int hf_gtpv2_tra_info_sgsn_momt_sms;
255static int hf_gtpv2_tra_info_sgsn_rau_gprs_ad;
256static int hf_gtpv2_tra_info_sgsn_mbms;
257static int hf_gtpv2_tra_info_sgsn_reserved;
258static int hf_gtpv2_tra_info_ggsn_pdp;
259static int hf_gtpv2_tra_info_ggsn_mbms;
260static int hf_gtpv2_tra_info_bm_sc;
261static int hf_gtpv2_tra_info_mme_sgw_ss;
262static int hf_gtpv2_tra_info_mme_sgw_sr;
263static int hf_gtpv2_tra_info_mme_sgw_iataud;
264static int hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc;
265static int hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del;
266static int hf_gtpv2_tra_info_mme_sgw_ho;
267static int hf_gtpv2_tra_info_sgw_pdn_con_creat;
268static int hf_gtpv2_tra_info_sgw_pdn_con_term;
269static int hf_gtpv2_tra_info_sgw_bearer_act_mod_del;
270static int hf_gtpv2_tra_info_pgw_pdn_con_creat;
271static int hf_gtpv2_tra_info_pgw_pdn_con_term;
272static int hf_gtpv2_tra_info_pgw_bearer_act_mod_del;
273static int hf_gtpv2_tra_info_lne_msc_s;
274static int hf_gtpv2_tra_info_lne_mgw;
275static int hf_gtpv2_tra_info_lne_sgsn;
276static int hf_gtpv2_tra_info_lne_ggsn;
277static int hf_gtpv2_tra_info_lne_rnc;
278static int hf_gtpv2_tra_info_lne_bm_sc;
279static int hf_gtpv2_tra_info_lne_mme;
280static int hf_gtpv2_tra_info_lne_sgw;
281static int hf_gtpv2_tra_info_lne_pdn_gw;
282static int hf_gtpv2_tra_info_lne_enb;
283static int hf_gtpv2_tra_info_lne_amf;
284static int hf_gtpv2_tra_info_lne_smf;
285static int hf_gtpv2_tra_info_lne_pcf;
286static int hf_gtpv2_tra_info_lne_upf;
287static int hf_gtpv2_tra_info_tra_info_ng_ran_node;
288static int hf_gtpv2_tra_info_tdl;
289static int hf_gtpv2_tra_info_lmsc_a;
290static int hf_gtpv2_tra_info_lmsc_lu;
291static int hf_gtpv2_tra_info_lmsc_mc;
292static int hf_gtpv2_tra_info_lmsc_map_g;
293static int hf_gtpv2_tra_info_lmsc_map_b;
294static int hf_gtpv2_tra_info_lmsc_map_e;
295static int hf_gtpv2_tra_info_lmsc_map_f;
296static int hf_gtpv2_tra_info_lmsc_cap;
297static int hf_gtpv2_tra_info_lmsc_map_d;
298static int hf_gtpv2_tra_info_lmsc_map_c;
299static int hf_gtpv2_tra_info_lmgw_mc;
300static int hf_gtpv2_tra_info_lmgw_nb_up;
301static int hf_gtpv2_tra_info_lmgw_lu_up;
302static int hf_gtpv2_tra_info_lsgsn_gb;
303static int hf_gtpv2_tra_info_lsgsn_lu;
304static int hf_gtpv2_tra_info_lsgsn_gn;
305static int hf_gtpv2_tra_info_lsgsn_map_gr;
306static int hf_gtpv2_tra_info_lsgsn_map_gd;
307static int hf_gtpv2_tra_info_lsgsn_map_gf;
308static int hf_gtpv2_tra_info_lsgsn_gs;
309static int hf_gtpv2_tra_info_lsgsn_ge;
310static int hf_gtpv2_tra_info_lggsn_gn;
311static int hf_gtpv2_tra_info_lggsn_gi;
312static int hf_gtpv2_tra_info_lggsn_gmb;
313static int hf_gtpv2_tra_info_lrnc_lu;
314static int hf_gtpv2_tra_info_lrnc_lur;
315static int hf_gtpv2_tra_info_lrnc_lub;
316static int hf_gtpv2_tra_info_lrnc_uu;
317static int hf_gtpv2_tra_info_lbm_sc_gmb;
318static int hf_gtpv2_tra_info_lmme_s1_mme;
319static int hf_gtpv2_tra_info_lmme_s3;
320static int hf_gtpv2_tra_info_lmme_s6a;
321static int hf_gtpv2_tra_info_lmme_s10;
322static int hf_gtpv2_tra_info_lmme_s11;
323static int hf_gtpv2_tra_info_lsgw_s4;
324static int hf_gtpv2_tra_info_lsgw_s5;
325static int hf_gtpv2_tra_info_lsgw_s8b;
326static int hf_gtpv2_tra_info_lsgw_s11;
327static int hf_gtpv2_tra_info_lpdn_gw_s2a;
328static int hf_gtpv2_tra_info_lpdn_gw_s2b;
329static int hf_gtpv2_tra_info_lpdn_gw_s2c;
330static int hf_gtpv2_tra_info_lpdn_gw_s5;
331static int hf_gtpv2_tra_info_lpdn_gw_s6c;
332static int hf_gtpv2_tra_info_lpdn_gw_gx;
333static int hf_gtpv2_tra_info_lpdn_gw_s8b;
334static int hf_gtpv2_tra_info_lpdn_gw_sgi;
335static int hf_gtpv2_tra_info_lenb_s1_mme;
336static int hf_gtpv2_tra_info_lenb_x2;
337static int hf_gtpv2_tra_info_lenb_uu;
338
339static int hf_gtpv2_ti;
340
341static int hf_gtpv2_bearer_qos_pci;
342static int hf_gtpv2_bearer_qos_pl;
343static int hf_gtpv2_bearer_qos_pvi;
344static int hf_gtpv2_bearer_qos_label_qci;
345static int hf_gtpv2_bearer_qos_mbr_up;
346static int hf_gtpv2_bearer_qos_mbr_down;
347static int hf_gtpv2_bearer_qos_gbr_up;
348static int hf_gtpv2_bearer_qos_gbr_down;
349static int hf_gtpv2_flow_qos_label_qci;
350static int hf_gtpv2_flow_qos_mbr_up;
351static int hf_gtpv2_flow_qos_mbr_down;
352static int hf_gtpv2_flow_qos_gbr_up;
353static int hf_gtpv2_flow_qos_gbr_down;
354
355static int hf_gtpv2_delay_value;
356static int hf_gtpv2_charging_id;
357static int hf_gtpv2_charging_characteristic;
358static int hf_gtpv2_bearer_flag_ppc;
359static int hf_gtpv2_bearer_flag_vb;
360static int hf_gtpv2_ue_time_zone_dst;
361static int hf_gtpv2_fq_csid_type;
362static int hf_gtpv2_fq_csid_nr;
363static int hf_gtpv2_fq_csid_ipv4;
364static int hf_gtpv2_fq_csid_ipv6;
365static int hf_gtpv2_fq_csid_id;
366static int hf_gtpv2_complete_req_msg_type;
367static int hf_gtpv2_mme_grp_id;
368static int hf_gtpv2_mme_code;
369static int hf_gtpv2_m_tmsi;
370static int hf_gtpv2_container_type;
371static int hf_gtpv2_cause_type;
372static int hf_gtpv2_CauseRadioNetwork;
373static int hf_gtpv2_CauseTransport;
374static int hf_gtpv2_CauseNas;
375static int hf_gtpv2_CauseProtocol;
376static int hf_gtpv2_CauseMisc;
377static int hf_gtpv2_target_type;
378static int hf_gtpv2_macro_enodeb_id;
379static int hf_gtpv2_smenb;
380static int hf_gtpv2_ext_macro_enodeb_id;
381static int hf_gtpv2_ext_macro_ng_enodeb_id;
382static int hf_gtpv2_enodebid;
383static int hf_gtpv2_cellid;
384
385static int hf_gtpv2_node_type;
386static int hf_gtpv2_fqdn;
387static int hf_gtpv2_enterprise_id;
388static int hf_gtpv2_apn_rest;
389static int hf_gtpv2_pti;
390static int hf_gtpv2_mm_context_sm;
391static int hf_gtpv2_mm_context_nhi;
392static int hf_gtpv2_mm_context_drxi;
393static int hf_gtpv2_mm_context_cksn;
394static int hf_gtpv2_mm_context_cksn_ksi;
395static int hf_gtpv2_mm_context_kasme;
396static int hf_gtpv2_mm_context_rand;
397static int hf_gtpv2_mm_context_xres_len;
398static int hf_gtpv2_mm_context_xres;
399static int hf_gtpv2_mm_context_autn_len;
400static int hf_gtpv2_mm_context_autn;
401static int hf_gtpv2_mm_context_drx;
402static int hf_gtpv2_mm_context_ue_net_cap_len;
403static int hf_gtpv2_mm_context_ms_net_cap_len;
404static int hf_gtpv2_mm_context_mei_len;
405static int hf_gtpv2_mm_context_vdp_len;
406static int hf_gtpv2_mm_contex_nhi_old;
407static int hf_gtpv2_mm_context_old_ksiasme;
408static int hf_gtpv2_mm_context_old_ncc;
409static int hf_gtpv2_mm_context_old_kasme;
410static int hf_gtpv2_mm_context_old_nh;
411static int hf_gtpv2_mm_context_higher_br_16mb_flg_len;
412static int hf_gtpv2_mm_context_higher_br_16mb_flg;
413static int hf_gtpv2_vdp_length;
414static int hf_gtpv2_mm_context_paging_len;
415static int hf_gtpv2_mm_context_ex_access_res_data_len;
416static int hf_gtpv2_mm_context_ue_add_sec_cap_len;
417static int hf_gtpv2_mm_context_ue_nr_sec_cap_len;
418static int hf_gtpv2_mm_context_apn_rte_ctrl_sts_len;
419static int hf_gtpv2_mm_context_cnr_len;
420static int hf_gtpv2_mm_context_ue_radio_cap_len;
421static int hf_gtpv2_uci_csg_id;
422static int hf_gtpv2_uci_csg_id_spare;
423static int hf_gtpv2_uci_access_mode;
424static int hf_gtpv2_uci_lcsg;
425static int hf_gtpv2_uci_csg_membership;
426
427static int hf_gtpv2_una;
428static int hf_gtpv2_gena;
429static int hf_gtpv2_gana;
430static int hf_gtpv2_ina;
431static int hf_gtpv2_ena;
432static int hf_gtpv2_hnna;
433static int hf_gtpv2_hbna;
434static int hf_gtpv2_mm_context_ksi_a;
435static int hf_gtpv2_mm_context_ksi;
436static int hf_gtpv2_mm_context_nr_tri;
437static int hf_gtpv2_mm_context_used_cipher;
438static int hf_gtpv2_mm_context_nr_qui;
439static int hf_gtpv2_mm_context_nr_qua;
440static int hf_gtpv2_mm_context_uamb_ri;
441static int hf_gtpv2_mm_context_osci;
442static int hf_gtpv2_mm_context_nruna;
443static int hf_gtpv2_mm_context_nrusrna;
444static int hf_gtpv2_mm_context_nrna;
445static int hf_gtpv2_mm_context_ussrna;
446static int hf_gtpv2_mm_context_nrsrna;
447static int hf_gtpv2_mm_context_ensct;
448
449static int hf_gtpv2_mm_context_samb_ri;
450static int hf_gtpv2_mm_context_unipa;
451static int hf_gtpv2_mm_context_unc;
452static int hf_gtpv2_mm_context_nas_dl_cnt;
453static int hf_gtpv2_mm_context_nas_ul_cnt;
454
455static int hf_gtpv2_uli_cgi_lac;
456static int hf_gtpv2_uli_cgi_ci;
457static int hf_gtpv2_sai_lac;
458static int hf_gtpv2_sai_sac;
459static int hf_gtpv2_rai_lac;
460static int hf_gtpv2_rai_rac;
461static int hf_gtpv2_tai_tac;
462static int hf_gtpv2_5gs_tai_tac;
463static int hf_gtpv2_ecgi_eci;
464static int hf_gtpv2_ncgi_nrci;
465static int hf_gtpv2_uli_lai_lac;
466static int hf_gtpv2_ecgi_eci_spare;
467static int hf_gtpv2_nsapi;
468static int hf_gtpv2_bearer_control_mode;
469
470static int hf_gtpv2_bss_container_phx;
471static int hf_gtpv2_bss_con_sapi_flg;
472static int hf_gtpv2_bss_con_rp_flg;
473static int hf_gtpv2_bss_con_pfi_flg;
474static int hf_gtpv2_bss_con_pfi;
475static int hf_gtpv2_bss_con_rp;
476static int hf_gtpv2_bss_con_sapi;
477static int hf_gtpv2_bss_con_xid_len;
478static int hf_gtpv2_bss_con_xid;
479static int hf_gtpv2_home_enodeb_id;
480static int hf_gtpv2_tac;
481
482/* MBMS */
483static int hf_gtpv2_mbms_service_area_nr;
484static int hf_gtpv2_mbms_service_area_id;
485static int hf_gtpv2_mbms_session_id;
486static int hf_gtpv2_mbms_flow_id;
487static int hf_gtpv2_cteid;
488static int hf_gtpv2_ip_addr_type;
489static int hf_gtpv2_ip_addr_len;
490static int hf_gtpv2_mbms_ip_mc_dist_addrv4;
491static int hf_gtpv2_mbms_ip_mc_dist_addrv6;
492static int hf_gtpv2_mbms_ip_mc_src_addrv4;
493static int hf_gtpv2_mbms_ip_mc_src_addrv6;
494static int hf_gtpv2_mbms_hc_indicator;
495static int hf_gtpv2_mbms_dist_indication;
496static int hf_gtpv2_subscriber_rfsp;
497static int hf_gtpv2_rfsp_inuse;
498static int hf_gtpv2_mbms_service_id;
499static int hf_gtpv2_add_flags_for_srvcc_ics;
500static int hf_gtpv2_vsrvcc_flag;
501static int hf_gtpv2_abs_time_mbms_data;
502static int hf_gtpv2_henb_info_report_fti;
503static int hf_gtpv2_ip4cp_subnet_prefix_len;
504static int hf_gtpv2_ip4cp_ipv4;
505static int hf_gtpv2_change_report_flags_sncr;
506static int hf_gtpv2_change_report_flags_tzcr;
507static int hf_gtpv2_action_indication_val;
508static int hf_gtpv2_uli_timestamp;
509static int hf_gtpv2_mbms_session_duration_days;
510static int hf_gtpv2_mbms_session_duration_secs;
511static int hf_gtpv2_csg_id;
512static int hf_gtpv2_cmi;
513static int hf_gtpv2_service_indicator;
514static int hf_gtpv2_detach_type;
515static int hf_gtpv2_ldn;
516static int hf_gtpv2_node_features_prn;
517static int hf_gtpv2_node_features_mabr;
518static int hf_gtpv2_node_features_ntsr;
519static int hf_gtpv2_node_features_ciot;
520static int hf_gtpv2_node_features_s1un;
521static int hf_gtpv2_node_features_eth;
522static int hf_gtpv2_node_features_mtedt;
523static int hf_gtpv2_node_features_psset;
524static int hf_gtpv2_time_to_data_xfer;
525static int hf_gtpv2_arp_pvi;
526static int hf_gtpv2_arp_pl;
527static int hf_gtpv2_arp_pci;
528static int hf_gtpv2_timer_unit;
529static int hf_gtpv2_throttling_delay_unit;
530static int hf_gtpv2_throttling_delay_value;
531static int hf_gtpv2_timer_value;
532static int hf_gtpv2_lapi;
533
534static int hf_gtpv2_pres_rep_area_act_inapra;
535static int hf_gtpv2_pres_rep_area_action;
536static int hf_gtpv2_pres_rep_area_id;
537static int hf_gtpv2_pres_rep_area_act_no_tai;
538static int hf_gtpv2_pres_rep_area_act_no_rai;
539static int hf_gtpv2_pres_rep_area_act_no_m_enodeb;
540static int hf_gtpv2_pres_rep_area_act_no_h_enodeb;
541static int hf_gtpv2_pres_rep_area_act_no_ecgi;
542static int hf_gtpv2_pres_rep_area_act_no_sai;
543static int hf_gtpv2_pres_rep_area_act_no_cgi;
544static int hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb;
545static int hf_gtpv2_ksi_ps;
546static int hf_gtpv2_ck_ps;
547static int hf_gtpv2_ik_ps;
548static int hf_gtpv2_kc_ps;
549static int hf_gtpv2_cksn_ps;
550
551static int hf_gtpv2_pres_rep_area_info_id;
552static int hf_gtpv2_pres_rep_area_info_additional_id;
553static int hf_gtpv2_pres_rep_area_info_flags;
554static int hf_gtpv2_pres_rep_area_info_flags_no_inapra;
555static int hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare;
556static int hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare;
557static int hf_gtpv2_pres_rep_area_info_flags_b3_inapra;
558static int hf_gtpv2_pres_rep_area_info_flags_b2_apra;
559static int hf_gtpv2_pres_rep_area_info_flags_b1_opra;
560static int hf_gtpv2_pres_rep_area_info_flags_b0_ipra;
561
562/* Generated from convert_proto_tree_add_text.pl */
563static int hf_gtpv2_downlink_subscribed_ue_ambr;
564static int hf_gtpv2_mm_context_sres;
565static int hf_gtpv2_iksrvcc;
566static int hf_gtpv2_nsapi08;
567static int hf_gtpv2_voice_domain_and_ue_usage_setting;
568static int hf_gtpv2_ue_radio_capability_for_paging_information;
569static int hf_gtpv2_port_number;
570static int hf_gtpv2_uplink_used_ue_ambr;
571static int hf_gtpv2_tmsi_bytes;
572static int hf_gtpv2_dl_gtp_u_sequence_number;
573static int hf_gtpv2_mm_context_nh;
574static int hf_gtpv2_teid_c_spare;
575static int hf_gtpv2_uplink_subscribed_ue_ambr;
576static int hf_gtpv2_transparent_container;
577static int hf_gtpv2_packet_flow_id;
578static int hf_gtpv2_utran_srvcc_ik_cs;
579static int hf_gtpv2_downlink_used_ue_ambr;
580static int hf_gtpv2_hop_counter;
581static int hf_gtpv2_ul_gtp_u_sequence_number;
582static int hf_gtpv2_authentication_quadruplets;
583static int hf_gtpv2_utran_srvcc_kc;
584static int hf_gtpv2_spare_bytes;
585static int hf_gtpv2_metric;
586static int hf_gtpv2_throttling_factor;
587static int hf_gtpv2_relative_capacity;
588static int hf_gtpv2_apn_length;
589static int hf_gtpv2_sequence_number;
590static int hf_gtpv2_receive_n_pdu_number;
591static int hf_gtpv2_trace_id;
592static int hf_gtpv2_drx_parameter;
593static int hf_gtpv2_charging_characteristic_remaining_octets;
594static int hf_gtpv2_mm_context_ncc;
595static int hf_gtpv2_proprietary_value;
596static int hf_gtpv2_mobile_station_classmark2;
597static int hf_gtpv2_rrc_container;
598static int hf_gtpv2_send_n_pdu_number;
599static int hf_gtpv2_mobile_station_classmark3;
600static int hf_gtpv2_eps_bearer_id_number;
601static int hf_gtpv2_geographic_location;
602static int hf_gtpv2_cn_id;
603static int hf_gtpv2_utran_srvcc_ck_cs;
604static int hf_gtpv2_authentication_quintuplets;
605static int hf_gtpv2_serving_gw_address_length;
606static int hf_gtpv2_supported_codec_list;
607static int hf_gtpv2_cksrvcc;
608static int hf_gtpv2_mm_context_kc;
609static int hf_gtpv2_dl_pdcp_sequence_number;
610static int hf_gtpv2_ul_pdcp_sequence_number;
611static int hf_gtpv2_fq_csid_node_id;
612static int hf_gtpv2_fq_csid_mcc_mnc;
613static int hf_gtpv2_ppi_value;
614static int hf_gtpv2_ppi_flag;
615static int hf_gtpv2_session;
616static int hf_gtpv2_twan_id_ts;
617static int hf_gtpv2_twan_flags;
618static int hf_gtpv2_twan_bssidi;
619static int hf_gtpv2_twan_civai;
620static int hf_gtpv2_twan_plmni;
621static int hf_gtpv2_twan_opnai;
622static int hf_gtpv2_twan_laii;
623static int hf_gtpv2_twan_ssid_len;
624static int hf_gtpv2_twan_ssid;
625static int hf_gtpv2_twan_bssid;
626static int hf_gtpv2_twan_civa_len;
627static int hf_gtpv2_twan_civa;
628static int hf_gtpv2_twan_plmnid;
629static int hf_gtpv2_twan_op_name_len;
630static int hf_gtpv2_twan_op_name;
631static int hf_gtpv2_twan_relay_id_type;
632static int hf_gtpv2_twan_relay_id_len;
633static int hf_gtpv2_twan_relay_id;
634static int hf_gtpv2_twan_relay_id_ipv4;
635static int hf_gtpv2_twan_relay_id_ipv6;
636static int hf_gtpv2_twan_circuit_id_len;
637static int hf_gtpv2_twan_circuit_id;
638static int hf_gtpv2_integer_number_val;
639static int hf_gtpv2_maximum_wait_time;
640static int hf_gtpv2_dl_buf_sug_pkt_cnt;
641static int hf_gtpv2_ue_usage_type;
642static int hf_gtpv2_rem_run_serv_gap_t;
643static int hf_gtpv2_ran_nas_protocol_type;
644static int hf_gtpv2_ran_nas_cause_type;
645static int hf_gtpv2_ran_nas_cause_value;
646static int hf_gtpv2_emm_cause;
647static int hf_gtpv2_esm_cause;
648static int hf_gtpv2_diameter_cause;
649static int hf_gtpv2_ikev2_cause;
650
651static int hf_gtpv2_ciot_support_ind;
652static int hf_gtpv2_ciot_support_ind_spare_bits;
653static int hf_gtpv2_ciot_support_ind_bit4;
654static int hf_gtpv2_ciot_support_ind_bit3;
655static int hf_gtpv2_ciot_support_ind_bit2;
656static int hf_gtpv2_ciot_support_ind_bit1;
657
658static int hf_gtpv2_length_of_node_name;
659static int hf_gtpv2_node_name;
660static int hf_gtpv2_length_of_node_realm;
661static int hf_gtpv2_node_realm;
662static int hf_gtpv2_ms_ts;
663static int hf_gtpv2_origination_ts;
664static int hf_gtpv2_mon_event_inf_nsur;
665static int hf_gtpv2_mon_event_inf_nsui;
666static int hf_gtpv2_mon_event_inf_nscf;
667static int hf_gtpv2_mon_event_inf_srie;
668static int hf_gtpv2_mon_event_inf_scef_reference_id;
669static int hf_gtpv2_mon_event_inf_scef_reference_id_ext;
670static int hf_gtpv2_mon_event_inf_scef_id_length;
671static int hf_gtpv2_mon_event_inf_scef_id;
672static int hf_gtpv2_mon_event_inf_remaining_number_of_reports;
673static int hf_gtpv2_mon_event_ext_inf_lrtp;
674static int hf_gtpv2_mon_event_ext_inf_srie;
675static int hf_gtpv2_mon_event_ext_inf_scef_reference_id;
676static int hf_gtpv2_mon_event_ext_inf_scef_id_length;
677static int hf_gtpv2_mon_event_ext_inf_scef_id;
678static int hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type;
679static int hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext;
680static int hf_gtpv2_rohc_profiles_bit0;
681static int hf_gtpv2_rohc_profiles_bit1;
682static int hf_gtpv2_rohc_profiles_bit2;
683static int hf_gtpv2_rohc_profiles_bit3;
684static int hf_gtpv2_rohc_profiles_bit4;
685static int hf_gtpv2_rohc_profiles_bit5;
686static int hf_gtpv2_rohc_profiles_bit6;
687static int hf_gtpv2_rohc_profiles_bit7;
688static int hf_gtpv2_max_cid;
689static int hf_gtpv2_uplink_rate_limit;
690static int hf_gtpv2_downlink_rate_limit;
691static int hf_gtpv2_timestamp_value;
692static int hf_gtpv2_counter_value;
693static int hf_gtpv2_mapped_ue_usage_type;
694static int hf_gtpv2_uli_flags;
695static int hf_gtpv2_rohc_profile_flags;
696static int hf_gtpv2_dcnr;
697
698static int hf_gtpv2_secondary_rat_usage_data_report;
699static int hf_gtpv2_secondary_rat_usage_data_report_spare_bits;
700static int hf_gtpv2_secondary_rat_usage_data_report_bit3;
701static int hf_gtpv2_secondary_rat_usage_data_report_bit2;
702static int hf_gtpv2_secondary_rat_usage_data_report_bit1;
703static int hf_gtpv2_secondary_rat_usage_data_report_rat_type;
704static int hf_gtpv2_secondary_rat_usage_data_report_start_timestamp;
705static int hf_gtpv2_secondary_rat_usage_data_report_end_timestamp;
706static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl;
707static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul;
708static int hf_gtpv2_secondary_rat_usage_data_report_srudn_length;
709static int hf_gtpv2_secondary_rat_usage_data_report_srudn_value;
710static int hf_gtpv2_csg_info_rep_action_b0;
711static int hf_gtpv2_csg_info_rep_action_b1;
712static int hf_gtpv2_csg_info_rep_action_b2;
713static int hf_gtpv2_gnodeb_id_len;
714static int hf_gtpv2_gnodeb_id;
715static int hf_gtpv2_macro_ng_enodeb_id;
716static int hf_gtpv2_5gs_tac;
717static int hf_gtpv2_en_gnb_id_len;
718static int hf_gtpv2_5tac;
719static int hf_gtpv2_etac;
720static int hf_gtpv2_en_gnb_id;
721static int hf_gtpv2_trig_event_len;
722static int hf_gtpv2_ne_list_len;
723static int hf_gtpv2_ses_trs_depth;
724static int hf_gtpv2_list_of_if_len;
725static int hf_gtpv2_trs_coll_ip_addr_len;
726static int hf_gtpv2_trs_coll_ipv4_addr;
727static int hf_gtpv2_trs_coll_ipv6_addr;
728
729static int hf_gtpv2_ext_tra_info_loi_mscs_cap;
730static int hf_gtpv2_ext_tra_info_loi_mscs_map_f;
731static int hf_gtpv2_ext_tra_info_loi_mscs_map_e;
732static int hf_gtpv2_ext_tra_info_loi_mscs_map_b;
733static int hf_gtpv2_ext_tra_info_loi_mscs_map_g;
734static int hf_gtpv2_ext_tra_info_loi_mscs_mc;
735static int hf_gtpv2_ext_tra_info_loi_mscs_iu;
736static int hf_gtpv2_ext_tra_info_loi_mscs_a;
737static int hf_gtpv2_ext_tra_info_loi_mscs_map_c;
738static int hf_gtpv2_ext_tra_info_loi_mscs_map_d;
739static int hf_gtpv2_ext_tra_info_loi_mgw_iuup;
740static int hf_gtpv2_ext_tra_info_loi_mgw_nbup;
741static int hf_gtpv2_ext_tra_info_loi_mgw_mc;
742static int hf_gtpv2_ext_tra_info_loi_sgsn_ge;
743static int hf_gtpv2_ext_tra_info_loi_sgsn_gs;
744static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gf;
745static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gd;
746static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gr;
747static int hf_gtpv2_ext_tra_info_loi_sgsn_gn;
748static int hf_gtpv2_ext_tra_info_loi_sgsn_iu;
749static int hf_gtpv2_ext_tra_info_loi_sgsn_gb;
750static int hf_gtpv2_ext_tra_info_loi_sgsn_s13;
751static int hf_gtpv2_ext_tra_info_loi_sgsn_s3;
752static int hf_gtpv2_ext_tra_info_loi_sgsn_s4;
753static int hf_gtpv2_ext_tra_info_loi_sgsn_s6d;
754static int hf_gtpv2_ext_tra_info_loi_ggsn_gmb;
755static int hf_gtpv2_ext_tra_info_loi_ggsn_gi;
756static int hf_gtpv2_ext_tra_info_loi_ggsn_gn;
757static int hf_gtpv2_ext_tra_info_loi_rnc_uu;
758static int hf_gtpv2_ext_tra_info_loi_rnc_iub;
759static int hf_gtpv2_ext_tra_info_loi_rnc_iur;
760static int hf_gtpv2_ext_tra_info_loi_rnc_iu;
761static int hf_gtpv2_ext_tra_info_loi_bm_sc_gmb;
762static int hf_gtpv2_ext_tra_info_loi_mme_s13;
763static int hf_gtpv2_ext_tra_info_loi_mme_s11;
764static int hf_gtpv2_ext_tra_info_loi_mme_s10;
765static int hf_gtpv2_ext_tra_info_loi_mme_s6a;
766static int hf_gtpv2_ext_tra_info_loi_mme_s3;
767static int hf_gtpv2_ext_tra_info_loi_mme_s1_mme;
768static int hf_gtpv2_ext_tra_info_loi_sgw_gxc;
769static int hf_gtpv2_ext_tra_info_loi_sgw_s11;
770static int hf_gtpv2_ext_tra_info_loi_sgw_s8b;
771static int hf_gtpv2_ext_tra_info_loi_sgw_s5;
772static int hf_gtpv2_ext_tra_info_loi_sgw_s4;
773static int hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi;
774static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b;
775static int hf_gtpv2_ext_tra_info_loi_pdn_gw_gx;
776static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b;
777static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s5;
778static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c;
779static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b;
780static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a;
781static int hf_gtpv2_ext_tra_info_loi_enb_uu;
782static int hf_gtpv2_ext_tra_info_loi_enb_x2;
783static int hf_gtpv2_ext_tra_info_loi_enb_s1_mme;
784static int hf_gtpv2_ext_tra_info_loi_hss_sh;
785static int hf_gtpv2_ext_tra_info_loi_hss_s6a;
786static int hf_gtpv2_ext_tra_info_loi_hss_s6d;
787static int hf_gtpv2_ext_tra_info_loi_hss_cx;
788static int hf_gtpv2_ext_tra_info_loi_hss_map_gr;
789static int hf_gtpv2_ext_tra_info_loi_hss_map_gc;
790static int hf_gtpv2_ext_tra_info_loi_hss_map_d;
791static int hf_gtpv2_ext_tra_info_loi_hss_map_c;
792static int hf_gtpv2_ext_tra_info_loi_eir_map_gf;
793static int hf_gtpv2_ext_tra_info_loi_eir_s13p;
794static int hf_gtpv2_ext_tra_info_loi_eir_s13;
795static int hf_gtpv2_ext_tra_info_loi_eir_map_f;
796static int hf_gtpv2_ext_tra_info_loi_amf_n20;
797static int hf_gtpv2_ext_tra_info_loi_amf_n15;
798static int hf_gtpv2_ext_tra_info_loi_amf_n14;
799static int hf_gtpv2_ext_tra_info_loi_amf_n12;
800static int hf_gtpv2_ext_tra_info_loi_amf_n11;
801static int hf_gtpv2_ext_tra_info_loi_amf_n8;
802static int hf_gtpv2_ext_tra_info_loi_amf_n2;
803static int hf_gtpv2_ext_tra_info_loi_amf_n1;
804static int hf_gtpv2_ext_tra_info_loi_amf_n22;
805static int hf_gtpv2_ext_tra_info_loi_amf_n26;
806static int hf_gtpv2_ext_tra_info_loi_pcf_n15;
807static int hf_gtpv2_ext_tra_info_loi_pcf_n7;
808static int hf_gtpv2_ext_tra_info_loi_pcf_n5;
809static int hf_gtpv2_ext_tra_info_loi_smf_s5_c;
810static int hf_gtpv2_ext_tra_info_loi_smf_n11;
811static int hf_gtpv2_ext_tra_info_loi_smf_n10;
812static int hf_gtpv2_ext_tra_info_loi_smf_n7;
813static int hf_gtpv2_ext_tra_info_loi_smf_n4;
814static int hf_gtpv2_ext_tra_info_loi_upf_n4;
815static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c;
816static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c;
817static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu;
818static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c;
819static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c;
820
821static int hf_gtpv2_nr_dl_pkts_all;
822static int hf_gtpv2_nr_ul_pkts_all;
823static int hf_gtpv2_nr_add_exception_rpts;
824static int hf_apn_rte_cntrl_status_val_time;
825static int hf_gtpv2_max_pkt_loss_rte_ul_flg;
826static int hf_gtpv2_max_pkt_loss_rte_dl_flg;
827static int hf_gtpv2_max_pkt_loss_rte_ul;
828static int hf_gtpv2_max_pkt_loss_rte_dl;
829
830static int hf_gtpv2_mm_context_iov_updates_counter;
831static int hf_gtpv2_mm_context_ear_len;
832static int hf_gtpv2_node_number_len;
833static int hf_gtpv2_additional_rrm_policy_index;
834
835static int hf_gtpv2_group_id;
836
837static int hf_gtpv2_ie_pscell_id_spare;
838static int hf_gtpv2_ie_pscell_id_nr_cgi;
839static int hf_gtpv2_ie_up_security_policy_up_ip_policy;
840static int hf_gtpv2_ie_up_security_policy_spare;
841static int hf_gtpv2_nf_instance_id_nf_instance_id;
842static int hf_gtpv2_nf_timer_in_seconds_timer_value;
843
844
845static int ett_gtpv2;
846static int ett_gtpv2_flags;
847static int ett_gtpv2_uli_flags;
848static int ett_gtpv2_uli_field;
849static int ett_gtpv2_bearer_ctx;
850static int ett_gtpv2_PDN_conn;
851static int ett_gtpv2_overload_control_information;
852static int ett_gtpv2_mm_context_flag;
853static int ett_gtpv2_pdn_numbers_nsapi;
854static int ett_gtpv2_tra_info_trigg;
855static int ett_gtpv2_tra_info_trigg_msc_server;
856static int ett_gtpv2_tra_info_trigg_mgw;
857static int ett_gtpv2_tra_info_trigg_sgsn;
858static int ett_gtpv2_tra_info_trigg_ggsn;
859static int ett_gtpv2_tra_info_trigg_bm_sc;
860static int ett_gtpv2_tra_info_trigg_sgw_mme;
861static int ett_gtpv2_tra_info_trigg_sgw;
862static int ett_gtpv2_tra_info_trigg_pgw;
863static int ett_gtpv2_tra_info_interfaces;
864static int ett_gtpv2_tra_info_interfaces_imsc_server;
865static int ett_gtpv2_tra_info_interfaces_lmgw;
866static int ett_gtpv2_tra_info_interfaces_lsgsn;
867static int ett_gtpv2_tra_info_interfaces_lggsn;
868static int ett_gtpv2_tra_info_interfaces_lrnc;
869static int ett_gtpv2_tra_info_interfaces_lbm_sc;
870static int ett_gtpv2_tra_info_interfaces_lmme;
871static int ett_gtpv2_tra_info_interfaces_lsgw;
872static int ett_gtpv2_tra_info_interfaces_lpdn_gw;
873static int ett_gtpv2_tra_info_interfaces_lpdn_lenb;
874static int ett_gtpv2_tra_info_ne_types;
875static int ett_gtpv2_rai;
876static int ett_gtpv2_ms_mark;
877static int ett_gtpv2_stn_sr;
878static int ett_gtpv2_supp_codec_list;
879static int ett_gtpv2_bss_con;
880static int ett_gtpv2_utran_con;
881static int ett_gtpv2_eutran_con;
882static int ett_gtpv2_son_con;
883static int ett_gtpv2_endc_son_con;
884static int ett_gtpv2_intersys_son_con;
885static int ett_gtpv2_mm_context_auth_qua;
886static int ett_gtpv2_mm_context_auth_qui;
887static int ett_gtpv2_mm_context_auth_tri;
888static int ett_gtpv2_mm_context_net_cap;
889static int ett_gtpv2_ms_network_capability;
890static int ett_gtpv2_mm_context_sc;
891static int ett_gtpv2_vd_pref;
892static int ett_gtpv2_access_rest_data;
893static int ett_gtpv2_qua;
894static int ett_gtpv2_qui;
895static int ett_gtpv2_preaa_tais;
896static int ett_gtpv2_preaa_menbs;
897static int ett_gtpv2_preaa_henbs;
898static int ett_gtpv2_preaa_ecgis;
899static int ett_gtpv2_preaa_rais;
900static int ett_gtpv2_preaa_sais;
901static int ett_gtpv2_preaa_cgis;
902static int ett_gtpv2_load_control_inf;
903static int ett_gtpv2_eci;
904static int ett_gtpv2_twan_flags;
905static int ett_gtpv2_ciot_support_ind;
906static int ett_gtpv2_rohc_profile_flags;
907static int ett_gtpv2_secondary_rat_usage_data_report;
908static int ett_gtpv2_pres_rep_area_info;
909static int ett_gtpv2_preaa_ext_menbs;
910static int ett_gtpv2_ue_nr_sec_cap_len;
911static int ett_gtpv2_apn_rte_ctrl_sts_len;
912static int ett_gtpv2_if_mgcs;
913static int ett_gtpv2_if_mgw;
914static int ett_gtpv2_if_sgsn;
915static int ett_gtpv2_if_ggsn;
916static int ett_gtpv2_if_rnc;
917static int ett_gtpv2_if_bm_sc;
918static int ett_gtpv2_if_mme;
919static int ett_gtpv2_if_sgw;
920static int ett_gtpv2_if_pdn_gw;
921static int ett_gtpv2_if_enb;
922static int ett_gtpv2_if_hss;
923static int ett_gtpv2_if_eir;
924static int ett_gtpv2_if_amf;
925static int ett_gtpv2_if_pcf;
926static int ett_gtpv2_if_smf;
927static int ett_gtpv2_if_upf;
928static int ett_gtpv2_if_ng_ran_node;
929static int ett_gtpv2_PGW_change_info;
930
931
932static expert_field ei_gtpv2_ie_data_not_dissected;
933static expert_field ei_gtpv2_ie_len_invalid;
934static expert_field ei_gtpv2_source_type_unknown;
935static expert_field ei_gtpv2_fq_csid_type_bad;
936static expert_field ei_gtpv2_mbms_session_duration_days;
937static expert_field ei_gtpv2_mbms_session_duration_secs;
938static expert_field ei_gtpv2_ie;
939static expert_field ei_gtpv2_int_size_not_handled;
940static expert_field ei_gtpv2_apn_too_long;
941
942static int gtpv2_tap;
943
944/* Definition of User Location Info (AVP 22) masks */
945#define GTPv2_ULI_CGI_MASK0x01 0x01
946#define GTPv2_ULI_SAI_MASK0x02 0x02
947#define GTPv2_ULI_RAI_MASK0x04 0x04
948#define GTPv2_ULI_TAI_MASK0x08 0x08
949#define GTPv2_ULI_ECGI_MASK0x10 0x10
950#define GTPv2_ULI_LAI_MASK0x20 0x20
951#define GTPv2_ULI_MACRO_eNB_ID_MASK0x40 0x40
952#define GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80 0x80
953
954#define GTPV2_PPI_VAL_MASK0x3F 0x3F
955
956#define GTPV2_SRVCC_PS_TO_CS_REQUEST25 25
957#define GTPV2_SRVCC_PS_TO_CS_RESPONSE26 26
958#define GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27 27
959#define GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28 28
960#define GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29 29
961#define GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30 30
962#define GTPV2_CREATE_SESSION_REQUEST32 32
963#define GTPV2_CREATE_SESSION_RESPONSE33 33
964#define GTPV2_MODIFY_BEARER_REQUEST34 34
965#define GTPV2_MODIFY_BEARER_RESPONSE35 35
966#define GTPV2_DELETE_SESSION_REQUEST36 36
967#define GTPV2_DELETE_SESSION_RESPONSE37 37
968#define GTPV2_REMOTE_UE_REPORT_NOTIFICATION40 40
969#define GTPV2_REMOTE_UE_REPORT_ACKNOWLEDGE41 41
970#define GTPV2_MODIFY_BEARER_COMMAND64 64
971#define GTPV2_MODIFY_BEARER_FAILURE_INDICATION65 65
972#define GTPV2_DELETE_BEARER_COMMAND66 66
973#define GTPV2_DELETE_BEARER_FAILURE_INDICATION67 67
974#define GTPV2_BEARER_RESOURCE_COMMAND68 68
975#define GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69 69
976#define GTPV2_CREATE_BEARER_REQUEST95 95
977#define GTPV2_CREATE_BEARER_RESPONSE96 96
978#define GTPV2_UPDATE_BEARER_REQUEST97 97
979#define GTPV2_UPDATE_BEARER_RESPONSE98 98
980#define GTPV2_DELETE_BEARER_REQUEST99 99
981#define GTPV2_DELETE_BEARER_RESPONSE100 100
982#define GTPV2_IDENTIFICATION_RESPONSE129 129
983#define GTPV2_CONTEXT_REQUEST130 130
984#define GTPV2_CONTEXT_RESPONSE131 131
985#define GTPV2_CONTEXT_ACKNOWLEDGE132 132
986#define GTPV2_FORWARD_RELOCATION_REQ133 133
987#define GTPV2_FORWARD_RELOCATION_RESP134 134
988#define GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135 135
989#define GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136 136
990#define GTPV2_FORWARD_CTX_NOTIFICATION137 137
991#define GTPV2_FORWARD_CTX_ACKNOWLEDGE138 138
992#define GTPV2_RELOCATION_CANCEL_REQUEST139 139
993#define GTPV2_RELOCATION_CANCEL_RESPONSE140 140
994#define GTPV2_CONFIGURATION_TRANSFER_TUNNEL141 141
995#define GTPV2_RAN_INFORMATION_RELAY152 152
996#define GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170 170
997#define GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171 171
998#define GTPV2_DL_DATA_NOTIF176 176
999#define GTPV2_DL_DATA_NOTIF_ACK177 177
1000#define GTPV2_MODIFY_ACESSS_BEARER_REQUEST211 211
1001#define GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212 212
1002
1003/* Table 6.1-1: Message types for GTPv2 */
1004static const value_string gtpv2_message_type_vals[] = {
1005 { 0, "Reserved"},
1006 { 1, "Echo Request"},
1007 { 2, "Echo Response"},
1008 { 3, "Version Not Supported Indication"},
1009 /* 4-24 Reserved for S101 interface TS 29.276 */
1010 { 4, "Node Alive Request"},
1011 { 5, "Node Alive Response"},
1012 { 6, "Redirection Request"},
1013 { 7, "Redirection Response"},
1014 /* 25-31 Reserved for Sv interface TS 29.280 */
1015/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 5.2.1*/
1016 { 25, "SRVCC PS to CS Request"},
1017 { 26, "SRVCC PS to CS Response"},
1018 { 27, "SRVCC PS to CS Complete Notification"},
1019 { 28, "SRVCC PS to CS Complete Acknowledge"},
1020 { 29, "SRVCC PS to CS Cancel Notification"},
1021 { 30, "SRVCC PS to CS Cancel Acknowledge"},
1022 { 31, "SRVCC CS to PS Request"},
1023/*End SRVCC Messages*/
1024 /* SGSN/MME to PGW (S4/S11, S5/S8) */
1025 { 32, "Create Session Request"},
1026 { 33, "Create Session Response"},
1027 { 34, "Modify Bearer Request"},
1028 { 35, "Modify Bearer Response"},
1029 { 36, "Delete Session Request"},
1030 { 37, "Delete Session Response"},
1031 /* SGSN/MME to PGW (S4/S11, S5/S8) */
1032 { 38, "Change Notification Request"},
1033 { 39, "Change Notification Response"},
1034 /* MME to PGW (S11, S5/S8) */
1035 { 40, "Remote UE Report Notification" },
1036 { 41, "Remote UE Report Acknowledge" },
1037 /* 42-63 For future use */
1038 /* Messages without explicit response */
1039 { 64, "Modify Bearer Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
1040 { 65, "Modify Bearer Failure Indication"}, /*(PGW to MME/SGSN -S5/S8, S11/S4) */
1041 { 66, "Delete Bearer Command"}, /* (MME to PGW -S11, S5/S8) */
1042 { 67, "Delete Bearer Failure Indication"}, /* (PGW to MME -S5/S8, S11) */
1043 { 68, "Bearer Resource Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
1044 { 69, "Bearer Resource Failure Indication"}, /* (PGW to MME/SGSN -S5/S8, S11/S4) */
1045 { 70, "Downlink Data Notification Failure Indication"}, /*(SGSN/MME to SGW -S4/S11) */
1046 { 71, "Trace Session Activation"},
1047 { 72, "Trace Session Deactivation"},
1048 { 73, "Stop Paging Indication"},
1049 /* 74-94 For future use */
1050 /* PGW to SGSN/MME/ TWAN/ePDG (S5/S8, S4/S11, S2a, S2b) */
1051 { 95, "Create Bearer Request"},
1052 { 96, "Create Bearer Response"},
1053 { 97, "Update Bearer Request"},
1054 { 98, "Update Bearer Response"},
1055 { 99, "Delete Bearer Request"},
1056 {100, "Delete Bearer Response"},
1057 /* PGW to MME, MME to PGW, SGW to PGW, SGW to MME (S5/S8, S11) */
1058 {101, "Delete PDN Connection Set Request"},
1059 {102, "Delete PDN Connection Set Response"},
1060 /* PGW to SGSN/MME(S5, S4/S11) */
1061 {103, "PGW Downlink Triggering Notification" },
1062 {104, "PGW Downlink Triggering Acknowledge" },
1063 /* 105-127 For future use */
1064 /* MME to MME, SGSN to MME, MME to SGSN, SGSN to SGSN (S3/10/S16) */
1065 {128, "Identification Request"},
1066 {129, "Identification Response"},
1067 {130, "Context Request"},
1068 {131, "Context Response"},
1069 {132, "Context Acknowledge"},
1070 {133, "Forward Relocation Request"},
1071 {134, "Forward Relocation Response"},
1072 {135, "Forward Relocation Complete Notification"},
1073 {136, "Forward Relocation Complete Acknowledge"},
1074 {137, "Forward Access Context Notification"},
1075 {138, "Forward Access Context Acknowledge"},
1076 {139, "Relocation Cancel Request"},
1077 {140, "Relocation Cancel Response"},
1078 {141, "Configuration Transfer Tunnel"},
1079 /* 142-148 For future use */
1080 /* SGSN to MME, MME to SGSN (S3)*/
1081 {149, "Detach Notification"},
1082 {150, "Detach Acknowledge"},
1083 {151, "CS Paging Indication"},
1084 {152, "RAN Information Relay"},
1085 {153, "Alert MME Notification"},
1086 {154, "Alert MME Acknowledge"},
1087 {155, "UE Activity Notification"},
1088 {156, "UE Activity Acknowledge" },
1089 {157, "ISR Status Indication" },
1090 {158, "UE Registration Query Request" },
1091 {159, "UE Registration Query Response" },
1092 /* MME to SGW (S11) */
1093 {160, "Create Forwarding Tunnel Request"},
1094 {161, "Create Forwarding Tunnel Response"},
1095 {162, "Suspend Notification"},
1096 {163, "Suspend Acknowledge"},
1097 {164, "Resume Notification"},
1098 {165, "Resume Acknowledge"},
1099 {166, "Create Indirect Data Forwarding Tunnel Request"},
1100 {167, "Create Indirect Data Forwarding Tunnel Response"},
1101 {168, "Delete Indirect Data Forwarding Tunnel Request"},
1102 {169, "Delete Indirect Data Forwarding Tunnel Response"},
1103 {170, "Release Access Bearers Request"},
1104 {171, "Release Access Bearers Response"},
1105 /* 172-175 For future use */
1106 /* SGW to SGSN/MME (S4/S11) */
1107 {176, "Downlink Data Notification"},
1108 {177, "Downlink Data Notification Acknowledgement"},
1109 {178, "Reserved. Allocated in earlier version of the specification."},
1110 {179, "PGW Restart Notification"},
1111 {180, "PGW Restart Notification Acknowledge"},
1112 /* 181-199 For future use */
1113 /* SGW to PGW, PGW to SGW (S5/S8) */
1114 {200, "Update PDN Connection Set Request"},
1115 {201, "Update PDN Connection Set Response"},
1116 /* 202 to 210 For future use */
1117 /* MME to SGW (S11) */
1118 {211, "Modify Access Bearers Request"},
1119 {212, "Modify Access Bearers Response"},
1120 /* 213 to 230 For future use */
1121 /* MBMS GW to MME/SGSN (Sm/Sn) */
1122 {231, "MBMS Session Start Request"},
1123 {232, "MBMS Session Start Response"},
1124 {233, "MBMS Session Update Request"},
1125 {234, "MBMS Session Update Response"},
1126 {235, "MBMS Session Stop Request"},
1127 {236, "MBMS Session Stop Response"},
1128 /* 237 to 239 For future use */
1129 /* Reserved for Sv interface (see also types 25 to 31) TS 29.280 */
1130 {240, "SRVCC CS to PS Response"}, /* 5.2.9 3GPP TS 29.280 V11.5.0 (2013-09) */
1131 {241, "SRVCC CS to PS Complete Notification"}, /* 5.2.10 3GPP TS 29.280 V11.5.0 (2013-09) */
1132 {242, "SRVCC CS to PS Complete Acknowledge"}, /* 5.2.11 3GPP TS 29.280 V11.5.0 (2013-09) */
1133 {243, "SRVCC CS to PS Cancel Notification"}, /* 5.2.12 3GPP TS 29.280 V11.5.0 (2013-09) */
1134 {244, "SRVCC CS to PS Cancel Acknowledge"}, /* 5.2.13 3GPP TS 29.280 V11.5.0 (2013-09) */
1135 /* 245 to 247 For future Sv interface use*/
1136 /* 248 to 255 For future use */
1137 {0, NULL((void*)0)}
1138};
1139static value_string_ext gtpv2_message_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_message_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_message_type_vals
) / sizeof ((gtpv2_message_type_vals)[0]))-1, gtpv2_message_type_vals
, "gtpv2_message_type_vals", ((void*)0) }
;
1140
1141#define NUM_GTPV2_IES256 256
1142static int ett_gtpv2_ies[NUM_GTPV2_IES256];
1143
1144#define GTPV2_IE_RESERVED0 0
1145#define GTPV2_IE_IMSI1 1
1146#define GTPV2_IE_CAUSE2 2
1147#define GTPV2_REC_REST_CNT3 3
1148/*Start SRVCC Messages*/
1149#define GTPV2_IE_STN_SR51 51
1150#define GTPV2_IE_SRC_TGT_TRANS_CON52 52
1151#define GTPV2_IE_TGT_SRC_TRANS_CON53 53
1152#define GTPV2_IE_MM_CON_EUTRAN_SRVCC54 54
1153#define GTPV2_IE_MM_CON_UTRAN_SRVCC55 55
1154#define GTPV2_IE_SRVCC_CAUSE56 56
1155#define GTPV2_IE_TGT_RNC_ID57 57
1156#define GTPV2_IE_TGT_GLOGAL_CELL_ID58 58
1157#define GTPV2_IE_TEID_C59 59
1158#define GTPV2_IE_SV_FLAGS60 60
1159#define GTPV2_IE_SAI61 61
1160#define GTPV2_IE_MM_CTX_FOR_CS_TO_PS_SRVCC62 62
1161/* 61 - 70 for future sv interface use*/
1162/*End SRVCC Messages*/
1163#define GTPV2_APN71 71
1164#define GTPV2_AMBR72 72
1165#define GTPV2_EBI73 73
1166#define GTPV2_IP_ADDRESS74 74
1167#define GTPV2_MEI75 75
1168#define GTPV2_IE_MSISDN76 76
1169#define GTPV2_INDICATION77 77
1170#define GTPV2_PCO78 78
1171#define GTPV2_PAA79 79
1172#define GTPV2_BEARER_QOS80 80
1173#define GTPV2_IE_FLOW_QOS81 81
1174#define GTPV2_IE_RAT_TYPE82 82
1175#define GTPV2_IE_SERV_NET83 83
1176#define GTPV2_IE_BEARER_TFT84 84
1177#define GTPV2_IE_TAD85 85
1178#define GTPV2_IE_ULI86 86
1179#define GTPV2_IE_F_TEID87 87
1180#define GTPV2_IE_TMSI88 88
1181#define GTPV2_IE_GLOBAL_CNID89 89
1182#define GTPV2_IE_S103PDF90 90
1183#define GTPV2_IE_S1UDF91 91
1184#define GTPV2_IE_DEL_VAL92 92
1185#define GTPV2_IE_BEARER_CTX93 93
1186#define GTPV2_IE_CHAR_ID94 94
1187#define GTPV2_IE_CHAR_CHAR95 95
1188#define GTPV2_IE_TRA_INFO96 96
1189#define GTPV2_BEARER_FLAG97 97
1190/* define GTPV2_IE_PAGING_CAUSE 98 (void) */
1191#define GTPV2_IE_PDN_TYPE99 99
1192#define GTPV2_IE_PTI100 100
1193#define GTPV2_IE_DRX_PARAM101 101
1194#define GTPV2_IE_UE_NET_CAPABILITY102 102
1195#define GTPV2_IE_MM_CONTEXT_GSM_T103 103
1196#define GTPV2_IE_MM_CONTEXT_UTMS_CQ104 104
1197#define GTPV2_IE_MM_CONTEXT_GSM_CQ105 105
1198#define GTPV2_IE_MM_CONTEXT_UTMS_Q106 106
1199#define GTPV2_IE_MM_CONTEXT_EPS_QQ107 107
1200#define GTPV2_IE_MM_CONTEXT_UTMS_QQ108 108
1201#define GTPV2_IE_PDN_CONNECTION109 109
1202#define GTPV2_IE_PDN_NUMBERS110 110
1203#define GTPV2_IE_P_TMSI111 111
1204#define GTPV2_IE_P_TMSI_SIG112 112
1205#define GTPV2_IE_HOP_COUNTER113 113
1206#define GTPV2_IE_UE_TIME_ZONE114 114
1207#define GTPV2_IE_TRACE_REFERENCE115 115
1208#define GTPV2_IE_COMPLETE_REQUEST_MSG116 116
1209#define GTPV2_IE_GUTI117 117
1210#define GTPV2_IE_F_CONTAINER118 118
1211#define GTPV2_IE_F_CAUSE119 119
1212#define GTPV2_IE_PLMN_ID120 120
1213#define GTPV2_IE_TARGET_ID121 121
1214/* GTPV2_IE_NSAPI 122 */
1215#define GTPV2_IE_PKT_FLOW_ID123 123
1216#define GTPV2_IE_RAB_CONTEXT124 124
1217#define GTPV2_IE_S_RNC_PDCP_CTX_INFO125 125
1218#define GTPV2_IE_PORT_NR126 126
1219#define GTPV2_IE_APN_RESTRICTION127 127
1220#define GTPV2_IE_SEL_MODE128 128
1221#define GTPV2_IE_SOURCE_IDENT129 129
1222#define GTPV2_IE_BEARER_CONTROL_MODE130 130
1223#define GTPV2_IE_CNG_REP_ACT131 131
1224#define GTPV2_IE_FQ_CSID132 132
1225#define GTPV2_IE_CHANNEL_NEEDED133 133
1226#define GTPV2_IE_EMLPP_PRI134 134
1227#define GTPV2_IE_NODE_TYPE135 135
1228#define GTPV2_IE_FQDN136 136
1229#define GTPV2_IE_TI137 137
1230#define GTPV2_IE_MBMS_SESSION_DURATION138 138
1231#define GTPV2_IE_MBMS_SERVICE_AREA139 139
1232#define GTPV2_IE_MBMS_SESSION_ID140 140
1233#define GTPV2_IE_MBMS_FLOW_ID141 141
1234#define GTPV2_IE_MBMS_IP_MC_DIST142 142
1235#define GTPV2_IE_MBMS_DIST_ACK143 143
1236#define GTPV2_IE_RFSP_INDEX144 144
1237#define GTPV2_IE_UCI145 145
1238#define GTPV2_IE_CSG_INFO_REP_ACTION146 146
1239#define GTPV2_IE_CSG_ID147 147
1240#define GTPV2_IE_CMI148 148
1241#define GTPV2_IE_SERVICE_INDICATOR149 149
1242#define GTPV2_IE_DETACH_TYPE150 150
1243#define GTPV2_IE_LDN151 151
1244#define GTPV2_IE_NODE_FEATURES152 152
1245#define GTPV2_IE_MBMS_TIME_TO_DATA_XFER153 153
1246#define GTPV2_IE_THROTTLING154 154
1247#define GTPV2_IE_ARP155 155
1248#define GTPV2_IE_EPC_TIMER156 156
1249#define GTPV2_IE_SIG_PRIO_IND157 157
1250#define GTPV2_IE_TMGI158 158
1251#define GTPV2_IE_ADD_MM_CONT_FOR_SRVCC159 159
1252#define GTPV2_IE_ADD_FLAGS_FOR_SRVCC160 160
1253#define GTPV2_IE_MMBR161 161
1254#define GTPV2_IE_MDT_CONFIG162 162
1255#define GTPV2_IE_APCO163 163
1256#define GTPV2_IE_ABS_MBMS_DATA_TF_TIME164 164
1257#define GTPV2_IE_HENB_INFO_REPORT165 165
1258#define GTPV2_IE_IP4CP166 166
1259#define GTPV2_IE_CHANGE_TO_REPORT_FLAGS167 167
1260#define GTPV2_IE_ACTION_INDICATION168 168
1261#define GTPV2_IE_TWAN_IDENTIFIER169 169
1262#define GTPV2_IE_ULI_TIMESTAMP170 170
1263#define GTPV2_IE_MBMS_FLAGS171 171
1264#define GTPV2_IE_RAN_NAS_CAUSE172 172
1265#define GTPV2_IE_CN_OP_SEL_ENT173 173
1266#define GTPV2_IE_TRUST_WLAN_MODE_IND174 174
1267#define GTPV2_IE_NODE_NUMBER175 175
1268#define GTPV2_IE_NODE_IDENTIFIER176 176
1269#define GTPV2_IE_PRES_REP_AREA_ACT177 177
1270#define GTPV2_IE_PRES_REP_AREA_INF178 178
1271#define GTPV2_IE_TWAN_ID_TS179 179
1272#define GTPV2_IE_OVERLOAD_CONTROL_INF180 180
1273#define GTPV2_IE_LOAD_CONTROL_INF181 181
1274#define GTPV2_IE_METRIC182 182
1275#define GTPV2_IE_SEQ_NO183 183
1276#define GTPV2_IE_APN_AND_REL_CAP184 184
1277#define GTPV2_IE_WLAN_OFFLOADABILITY_IND185 185
1278#define GTPV2_IE_PAGING_AND_SERVICE_INF186 186
1279#define GTPV2_IE_INTEGER_NUMBER187 187
1280#define GTPV2_IE_MILLISECOND_TS188 188
1281#define GTPV2_IE_MON_EVENT_INF189 189
1282/*
1283190 ECGI List
1284191 Remote UE Context
1285192 Remote User ID
1286193 Remote UE IP information
1287*/
1288#define GTPV2_IE_CIOT_OPT_SUPPORT_IND194 194
1289#define GTPV2_IE_SCEF_PDN_CONNECTION195 195
1290#define GTPV2_IE_HEADER_COMP_CONF196 196
1291#define GTPV2_IE_EXTENDED_PCO197 197
1292#define GTPV2_IE_SERV_PLMN_RATE_CONTROL198 198
1293#define GTPV2_IE_COUNTER199 199
1294#define GTPV2_IE_MAPPED_UE_USAGE_TYPE200 200
1295#define GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201 201
1296#define GTPV2_IE_UP_FUNC_SEL_INDI_FLG202 202
1297#define GTPV2_IE_MAX_PKT_LOSS_RTE203 203
1298#define GTPV2_IE_APN_RTE_CNTRL_STATUS204 204
1299#define GTPV2_IE_EXT_TRS_INF205 205
1300#define GTPV2_IE_MON_EVENT_EXT_INF206 206
1301#define GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207 207
1302#define GTPV2_IE_V2X_CONTEXT208 208
1303#define GTPV2_IE_PC5_QOS_PARAMETERS209 209
1304#define GTPV2_IE_SERVICES_AUTHORIZED210 210
1305#define GTPV2_IE_BIT_RATE211 211
1306#define GTPV2_IE_PC5_QOS_FLOW212 212
1307#define GTPV2_IE_SGI_PTP_TUNNEL_ADDRESS213 213
1308#define GTPV2_IE_PGW_CHANGE_INFO214 214
1309#define GTPV2_IE_PGW_FQDN215 215
1310#define GTPV2_IE_GROUP_ID216 216
1311#define GTPV2_IE_PSCELL_ID217 217
1312#define GTPV2_IE_UP_SECURITY_POLICY218 218
1313#define GTPV2_IE_ALT_IMSI219 219
1314#define GTPV2_IE_NF_INSTANCE_ID220 220
1315#define GTPV2_IE_TIMER_IN_SECONDS221 221
1316/*
1317220 to 253 Spare. For future use.
1318254 Special IE type for IE Type Extension
1319255 Private Extension
1320256 to 65535 Spare. For future use.
1321
1322*/
1323/* 169 to 254 reserved for future use */
1324#define GTPV2_IE_PRIVATE_EXT255 255
1325
1326#define SPARE0X0 0X0
1327#define CREATE_NEW_TFT0X20 0X20
1328#define DELETE_TFT0X40 0X40
1329#define ADD_PACKET_FILTERS_TFT0X60 0X60
1330#define REPLACE_PACKET_FILTERS_TFT0X80 0X80
1331#define DELETE_PACKET_FILTERS_TFT0XA0 0XA0
1332#define NO_TFT_OPERATION0XC0 0XC0
1333#define RESERVED0XE0 0XE0
1334
1335/* SRVCC PS-to-CS Transparent Container Preference */
1336#define PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0 0
1337#define PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1 1
1338static int pref_decode_srvcc_p2c_trans_cont = PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0;
1339
1340static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1341
1342/* Table 8.1-1: Information Element types for GTPv2 */
1343static const value_string gtpv2_element_type_vals[] = {
1344 { 0, "Reserved"},
1345 { 1, "International Mobile Subscriber Identity (IMSI)"}, /* Variable Length / 8.3 */
1346 { 2, "Cause"}, /* Variable Length / 8.4 */
1347 { 3, "Recovery (Restart Counter)"}, /* Variable Length / 8.5 */
1348 /* 4-34 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
1349 /* 35-50 / See 3GPP TS 29.276 */
1350/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 6.1*/
1351 { 51, "STN-SR"}, /* Variable Length / 6.2 */
1352 { 52, "Source to Target Transparent Container"}, /* Variable Length / 6.3 */
1353 { 53, "Target to Source Transparent Container"}, /* Variable Length / 6.4 */
1354 { 54, "MM Context for E-UTRAN SRVCC"}, /* Variable Length / 6.5 */
1355 { 55, "MM Context for UTRAN SRVCC"}, /* Variable Length / 6.6 */
1356 { 56, "SRVCC Cause"}, /* Fixed Length / 6.7 */
1357 { 57, "Target RNC ID"}, /* Variable Length / 6.8 */
1358 { 58, "Target Global Cell ID"}, /* Variable Length / 6.9 */
1359 { 59, "TEID-C"}, /* Extendable / 6.10 */
1360 { 60, "Sv Flags" }, /* Extendable / 6.11 */
1361 { 61, "Service Area Identifier" }, /* Extendable / 6.12 */
1362 { 62, "MM Context for CS to PS SRVCC" }, /* Extendable / 6.13 */
1363 /* 63-70 For future Sv interface use */
1364/*End SRVCC Messages*/
1365 { 71, "Access Point Name (APN)"}, /* Variable Length / 8.6 */
1366 { 72, "Aggregate Maximum Bit Rate (AMBR)"}, /* Fixed Length / 8.7 */
1367 { 73, "EPS Bearer ID (EBI)"}, /* Extendable / 8.8 */
1368 { 74, "IP Address"}, /* Extendable / 8.9 */
1369 { 75, "Mobile Equipment Identity (MEI)"}, /* Variable Length / 8.10 */
1370 { 76, "MSISDN"}, /* Variable Length / 8.11 */
1371 { 77, "Indication"}, /* Extendable / 8.12 */
1372 { 78, "Protocol Configuration Options (PCO)"}, /* Variable Length / 8.13 */
1373 { 79, "PDN Address Allocation (PAA)"}, /* Variable Length / 8.14 */
1374 { 80, "Bearer Level Quality of Service (Bearer QoS)"}, /* Variable Length / 8.15 */
1375 { 81, "Flow Quality of Service (Flow QoS)"}, /* Extendable / 8.16 */
1376 { 82, "RAT Type"}, /* Extendable / 8.17 */
1377 { 83, "Serving Network"}, /* Extendable / 8.18 */
1378 { 84, "EPS Bearer Level Traffic Flow Template (Bearer TFT)"}, /* Variable Length / 8.19 */
1379 { 85, "Traffic Aggregation Description (TAD)"}, /* Variable Length / 8.20 */
1380 { 86, "User Location Info (ULI)"}, /* Variable Length / 8.21 */
1381 { 87, "Fully Qualified Tunnel Endpoint Identifier (F-TEID)"}, /* Extendable / 8.22 */
1382 { 88, "TMSI"}, /* Variable Length / 8.23 */
1383 { 89, "Global CN-Id"}, /* Variable Length / 8.24 */
1384 { 90, "S103 PDN Data Forwarding Info (S103PDF)"}, /* Variable Length / 8.25 */
1385 { 91, "S1-U Data Forwarding Info (S1UDF)"}, /* Variable Length/ 8.26 */
1386 { 92, "Delay Value"}, /* Extendable / 8.27 */
1387 { 93, "Bearer Context"}, /* Extendable / 8.28 */
1388 { 94, "Charging ID"}, /* Extendable / 8.29 */
1389 { 95, "Charging Characteristics"}, /* Extendable / 8.30 */
1390 { 96, "Trace Information"}, /* Extendable / 8.31 */
1391 { 97, "Bearer Flags"}, /* Extendable / 8.32 */
1392 { 98, "Paging Cause"}, /* Variable Length / 8.33 */
1393 { 99, "PDN Type"}, /* Extendable / 8.34 */
1394 {100, "Procedure Transaction ID"}, /* Extendable / 8.35 */
1395 {101, "DRX Parameter"}, /* Variable Length/ 8.36 */
1396 {102, "UE Network Capability"}, /* Variable Length / 8.37 */
1397 {103, "MM Context (GSM Key and Triplets)"}, /* Variable Length / 8.38 */
1398 {104, "MM Context (UMTS Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
1399 {105, "MM Context (GSM Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
1400 {106, "MM Context (UMTS Key and Quintuplets)"}, /* Variable Length / 8.38 */
1401 {107, "MM Context (EPS Security Context, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
1402 {108, "MM Context (UMTS Key, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
1403 {109, "PDN Connection"}, /* Extendable / 8.39 */
1404 {110, "PDU Numbers"}, /* Extendable / 8.40 */
1405 {111, "P-TMSI"}, /* Variable Length / 8.41 */
1406 {112, "P-TMSI Signature"}, /* Variable Length / 8.42 */
1407 {113, "Hop Counter"}, /* Extendable / 8.43 */
1408 {114, "UE Time Zone"}, /* Variable Length / 8.44 */
1409 {115, "Trace Reference"}, /* Fixed Length / 8.45 */
1410 {116, "Complete Request Message"}, /* Variable Length / 8.46 */
1411 {117, "GUTI"}, /* Variable Length / 8.47 */
1412 {118, "F-Container"}, /* Variable Length / 8.48 */
1413 {119, "F-Cause"}, /* Variable Length / 8.49 */
1414 {120, "PLMN ID"}, /* Variable Length / 8.50 */
1415 {121, "Target Identification"}, /* Variable Length / 8.51 */
1416 {122, "NSAPI"}, /* Extendable / 8.52 */
1417 {123, "Packet Flow ID"}, /* Variable Length / 8.53 */
1418 {124, "RAB Context"}, /* Fixed Length / 8.54 */
1419 {125, "Source RNC PDCP Context Info"}, /* Variable Length / 8.55 */
1420 {126, "Port Number"}, /* Extendable / 8.56 */
1421 {127, "APN Restriction"}, /* Extendable / 8.57 */
1422 {128, "Selection Mode"}, /* Extendable / 8.58 */
1423 {129, "Source Identification"}, /* Variable Length / 8.50 */
1424 {130, "Bearer Control Mode"}, /* Extendable / 8.60 */
1425 {131, "Change Reporting Action"}, /* Variable Length / 8.61 */
1426 {132, "Fully Qualified PDN Connection Set Identifier (FQ-CSID)"}, /* Variable Length / 8.62 */
1427 {133, "Channel needed"}, /* Extendable / 8.63 */
1428 {134, "eMLPP Priority"}, /* Extendable / 8.64 */
1429 {135, "Node Type"}, /* Extendable / 8.65 */
1430 {136, "Fully Qualified Domain Name (FQDN)"}, /* Variable Length / 8.66 */
1431 {137, "Transaction Identifier (TI)"}, /* Variable Length / 8.68 */
1432 {138, "MBMS Session Duration"}, /* Duration Extendable / 8.69 */
1433 {139, "MBMS Service Area"}, /* Extendable / 8.70 */
1434 {140, "MBMS Session Identifier"}, /* Extendable / 8.71 */
1435 {141, "MBMS Flow Identifier"}, /* Extendable / 8.72 */
1436 {142, "MBMS IP Multicast Distribution"}, /* Extendable / 8.73 */
1437 {143, "MBMS Distribution Acknowledge"}, /* Extendable / 8.74 */
1438 {144, "RFSP Index"}, /* Fixed Length / 8.77 */
1439 {145, "User CSG Information (UCI)"}, /* Extendable / 8.75 */
1440 {146, "CSG Information Reporting Action"}, /* Extendable / 8.76 */
1441 {147, "CSG ID"}, /* Extendable / 8.78 */
1442 {148, "CSG Membership Indication (CMI)"}, /* Extendable / 8.79 */
1443 {149, "Service indicator"}, /* Fixed Length / 8.80 */
1444 {150, "Detach Type"}, /* Fixed Length / 8.81 */
1445 {151, "Local Distinguished Name (LDN)"}, /* Variable Length / 8.82 */
1446 {152, "Node Features"}, /* Extendable / 8.83 */
1447 {153, "MBMS Time to Data Transfer"}, /* Extendable / 8.84 */
1448 {154, "Throttling"}, /* Extendable / 8.85 */
1449 {155, "Allocation/Retention Priority (ARP)"}, /* Extendable / 8.86 */
1450 {156, "EPC Timer"}, /* Extendable / 8.87 */
1451 {157, "Signalling Priority Indication"}, /* Extendable / 8.88 */
1452 {158, "Temporary Mobile Group Identity"}, /* Extendable / 8.89 */
1453 {159, "Additional MM context for SRVCC"}, /* Extendable / 8.90 */
1454 {160, "Additional flags for SRVCC"}, /* Extendable / 8.91 */
1455 {161, "Max MBR/APN-AMBR (MMBR)"}, /* Extendable / 8.92 */
1456 {162, "MDT Configuration"}, /* Extendable / 8.93 */
1457 {163, "Additional Protocol Configuration Options (APCO)"}, /* Extendable / 8.94 */
1458 {164, "Absolute Time of MBMS Data Transfer"}, /* Extendable / 8.95 */
1459 {165, "H(e)NB Information Reporting"}, /* Extendable / 8.96*/
1460 {166, "IPv4 Configuration Parameters (IP4CP)"}, /* Extendable / 8.97*/
1461 {167, "Change to Report Flags"}, /* Extendable / 8.98 */
1462 {168, "Action Indication"}, /* Extendable / 8.99 */
1463 {169, "TWAN Identifier "}, /* Extendable / 8.100 */
1464 {170, "ULI Timestamp"}, /* Extendable / 8.101 */
1465 {171, "MBMS Flags"}, /* Extendable / 8.102 */
1466 {172, "RAN/NAS Cause"}, /* Extendable / 8.103 */
1467 {173, "CN Operator Selection Entity"}, /* Extendable / 8.104 */
1468 {174, "Trusted WLAN Mode Indication"}, /* Extendable / 8.105 */
1469 {175, "Node Number"}, /* Extendable / 8.106 */
1470 {176, "Node Identifier"}, /* Extendable / 8.107 */
1471 {177, "Presence Reporting Area Action"}, /* Extendable / 8.108 */
1472 {178, "Presence Reporting Area Information"}, /* Extendable / 8.109 */
1473 {179, "TWAN Identifier Timestamp"}, /* Extendable / 8.110 */
1474 {180, "Overload Control Information"}, /* Extendable / 8.111 */
1475 {181, "Load Control Information"}, /* Extendable / 8.112 */
1476 {182, "Metric"}, /* Fixed Length / 8.113 */
1477 {183, "Sequence Number"}, /* Fixed Length / 8.114 */
1478 {184, "APN and Relative Capacity"}, /* Extendable / 8.115 */
1479 {185, "WLAN Offloadability Indication"}, /* Extendable / 8.116 */
1480 {186, "Paging and Service Information"}, /* Extendable / 8.117 */
1481 {187, "Integer Number" }, /* Variable / 8.118 */
1482 {188, "Millisecond Time Stamp" }, /* Extendable / 8.119 */
1483 {189, "Monitoring Event Information"}, /* Extendable / 8.120 */
1484 {190, "ECGI List"}, /* Extendable / 8.121 */
1485 {191, "Remote UE Context"}, /* Extendable / 8.122 */
1486 {192, "Remote User ID"}, /* Extendable / 8.123 */
1487 {193, "Remote UE IP information"}, /* Variable Length / 8.124 */
1488 {194, "CIoT Optimizations Support Indication"}, /* Extendable / 8.125 */
1489 {195, "SCEF PDN Connection"}, /* Extendable / 8.126 */
1490 {196, "Header Compression Configuration"}, /* Extendable / 8.127 */
1491 {197, "Extended Protocol Configuration Options(ePCO)"}, /* Variable Length / 8.128 */
1492 {198, "Serving PLMN Rate Control"}, /* Extendable / 8.129 */
1493 {199, "Counter" }, /* Extendable / 8.130 */
1494 {200, "Mapped UE Usage Type" }, /* Extendable / 8.131 */
1495 {201, "Secondary RAT Usage Data Report" }, /* Extendable / 8.132 */
1496 {202, "UP Function Selection Indication Flags" }, /* Extendable / 8.133 */
1497 {203, "Maximum Packet Loss Rate" }, /* Extendable / 8.134 */
1498 {204, "APN Rate Control Status" }, /* Extendable / 8.135 */
1499 {205, "Extended Trace Information" }, /* Extendable / 8.136 */
1500 {206, "Monitoring Event Extension Information" }, /* Extendable / 8.137 */
1501 {207, "Additional RRM Policy Index" }, /* Fixed Length / 8.138 */
1502 {208, "V2X Context" }, /* Extendable / 8.139 */
1503 {209, "PC5 QoS Parameters" }, /* Extendable / 8.140 */
1504 {210, "Services Authorized" }, /* Extendable / 8.141 */
1505 {211, "Bit Rate" }, /* Extendable / 8.142 */
1506 {212, "PC5 QoS Flow" }, /* Extendable / 8.143 */
1507 {213, "SGi PtP Tunnel Address" }, /* Extendable / 8.144 */
1508 {214, "PGW Change Info" }, /* Extendable / 8.145 */
1509 {215, "PGW FQDN" }, /* Extendable / 8.146 */
1510 {216, "Group Id" }, /* Variable Length / 8.147 */
1511 {217, "PSCell ID" }, /* Fixed Length / 8.148*/
1512 {218, "UP Security Policy" }, /* Extendable / 8.149*/
1513 {219, "Alternative IMSI" }, /* Variable Length / 8.150 */
1514 {220, "NF Instance ID" }, /* Fixed Length / 8.151 */
1515 {221, "Timer in Seconds"}, /* Variable Length / 8.152 */
1516 /* 222 to 254 Spare. For future use. */
1517 {255, "Private Extension"}, /* Variable Length / 8.67 */
1518 {0, NULL((void*)0)}
1519};
1520static value_string_ext gtpv2_element_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_element_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_element_type_vals
) / sizeof ((gtpv2_element_type_vals)[0]))-1, gtpv2_element_type_vals
, "gtpv2_element_type_vals", ((void*)0) }
;
1521
1522typedef struct _gtpv2_hdr {
1523 uint8_t flags; /* GTP header flags */
1524 uint8_t message; /* Message type */
1525 uint16_t length; /* Length of header */
1526 int64_t teid; /* Tunnel End-point ID */
1527} gtpv2_hdr_t;
1528
1529/* Data structure attached to a conversation,
1530to keep track of request/response-pairs
1531*/
1532typedef struct gtpv2_conv_info_t {
1533 wmem_map_t *unmatched;
1534 wmem_map_t *matched;
1535} gtpv2_conv_info_t;
1536
1537/*structure used to track responses to requests using sequence number*/
1538typedef struct gtpv2_msg_hash_entry {
1539 bool_Bool is_request; /*true/false*/
1540 uint32_t req_frame; /*frame with request */
1541 nstime_t req_time; /*req time */
1542 uint32_t rep_frame; /*frame with reply */
1543 int seq_nr; /*sequence number*/
1544 unsigned msgtype; /*messagetype*/
1545 uint32_t conv_id; /*IP conversation ID, for handling deinterlacing*/
1546} gtpv2_msg_hash_t;
1547
1548static unsigned
1549gtpv2_sn_hash(const void *k)
1550{
1551 const gtpv2_msg_hash_t *key = (const gtpv2_msg_hash_t *)k;
1552
1553 return key->seq_nr;
1554}
1555
1556static int
1557gtpv2_sn_equal_matched(const void *k1, const void *k2)
1558{
1559 const gtpv2_msg_hash_t *key1 = (const gtpv2_msg_hash_t *)k1;
1560 const gtpv2_msg_hash_t *key2 = (const gtpv2_msg_hash_t *)k2;
1561 double diff;
1562 nstime_t delta;
1563
1564 if (key1->req_frame && key2->req_frame && (key1->req_frame != key2->req_frame)) {
1565 return 0;
1566 }
1567
1568 if (key1->rep_frame && key2->rep_frame && (key1->rep_frame != key2->rep_frame)) {
1569 return 0;
1570 }
1571
1572 if (pref_pair_matching_max_interval_ms) {
1573 nstime_delta(&delta, &key1->req_time, &key2->req_time);
1574 diff = fabs(nstime_to_msec(&delta));
1575
1576 return key1->seq_nr == key2->seq_nr && diff < pref_pair_matching_max_interval_ms;
1577 }
1578
1579 return key1->seq_nr == key2->seq_nr;
1580}
1581
1582static int
1583gtpv2_sn_equal_unmatched(const void *k1, const void *k2)
1584{
1585 const gtpv2_msg_hash_t *key1 = (const gtpv2_msg_hash_t *)k1;
1586 const gtpv2_msg_hash_t *key2 = (const gtpv2_msg_hash_t *)k2;
1587 double diff;
1588 nstime_t delta;
1589
1590 if (pref_pair_matching_max_interval_ms) {
1591 nstime_delta(&delta, &key1->req_time, &key2->req_time);
1592 diff = fabs(nstime_to_msec(&delta));
1593
1594 return key1->seq_nr == key2->seq_nr && diff < pref_pair_matching_max_interval_ms;
1595 }
1596
1597 return key1->seq_nr == key2->seq_nr;
1598}
1599
1600static GHashTable *gtpv2_stat_msg_idx_hash;
1601
1602static void
1603gtpv2_stat_init(struct register_srt* srt _U___attribute__((unused)), GArray*srt_array)
1604{
1605 if (gtpv2_stat_msg_idx_hash != NULL((void*)0)) {
1606 g_hash_table_destroy(gtpv2_stat_msg_idx_hash);
1607 }
1608 gtpv2_stat_msg_idx_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
1609
1610 init_srt_table("GTPv2 Requests", NULL((void*)0), srt_array, 0, NULL((void*)0), NULL((void*)0), NULL((void*)0));
1611}
1612
1613static tap_packet_status
1614gtpv2_stat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *prv, tap_flags_t flags _U___attribute__((unused)))
1615{
1616 unsigned i = 0;
1617 srt_stat_table *gtpv2_srt_table;
1618 srt_data_t *srt_data = (srt_data_t*)pss;
1619 const gtpv2_msg_hash_t *gcrp = (const gtpv2_msg_hash_t *)prv;
1620 int idx = 0;
1621
1622 /* We are only interested in matched reply packets. */
1623 if (gcrp->is_request) {
1624 return TAP_PACKET_DONT_REDRAW;
1625 }
1626 if (!gcrp->req_frame) {
1627 return TAP_PACKET_DONT_REDRAW;
1628 }
1629
1630 gtpv2_srt_table = g_array_index(srt_data->srt_array, srt_stat_table*, i)(((srt_stat_table**) (void *) (srt_data->srt_array)->data
) [(i)])
;
1631
1632 /* XXX: It would be nice if srt_table handled hashing so that the
1633 * real procedure number could be displayed in the table without
1634 * having to add empty rows for unused message types and responses
1635 * (requests and responses have different message types, and we
1636 * only use the request value.)
1637 */
1638 idx = GPOINTER_TO_UINT(g_hash_table_lookup(gtpv2_stat_msg_idx_hash, GUINT_TO_POINTER(gcrp->msgtype)))((guint) (gulong) (g_hash_table_lookup(gtpv2_stat_msg_idx_hash
, ((gpointer) (gulong) (gcrp->msgtype)))))
;
1639
1640 /* Store the row value incremented by 1 to distinguish 0 from NULL */
1641 if (idx == 0) {
1642 idx = g_hash_table_size(gtpv2_stat_msg_idx_hash);
1643 g_hash_table_insert(gtpv2_stat_msg_idx_hash, GUINT_TO_POINTER(gcrp->msgtype)((gpointer) (gulong) (gcrp->msgtype)), GUINT_TO_POINTER(idx + 1)((gpointer) (gulong) (idx + 1)));
1644 init_srt_table_row(gtpv2_srt_table, idx, val_to_str_ext_const(gcrp->msgtype, &gtpv2_message_type_vals_ext, "Unknown"));
1645 } else {
1646 idx -= 1;
1647 }
1648
1649 add_srt_table_data(gtpv2_srt_table, idx, &gcrp->req_time, pinfo);
1650
1651 return TAP_PACKET_REDRAW;
1652}
1653
1654/* Make this a common function ???*/
1655static void
1656value_in_tenth_of_percent_fmt(char* s, uint32_t v)
1657{
1658 snprintf(s, ITEM_LABEL_LENGTH240, "%.1f%% (%u)", (float)v / 10, v);
1659}
1660
1661/* Add Info element on IE types with multiple instances in same group */
1662typedef struct _gtpv2_information_element_instance {
1663 uint8_t message_type; /* Message type */
1664 uint8_t parent_ie; /* Parent group IE for which our IE is in. 0 if on message level */
1665 uint8_t type; /* This IE type */
1666 uint8_t instance; /* Which Instance */
1667 const char *info_element; /* Information element for the IE type */
1668} gtpv2_information_element_instance_t;
1669
1670/* IE types which defines with multiple instances in ch7.2 Tunnel Management Messages and ch7.3 Mobility Management Messages */
1671static const gtpv2_information_element_instance_t gtpv2_information_element_instance_vals[] = {
1672 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_F_TEID87, 0, "Sender F-TEID for Control Plane" },
1673 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_F_TEID87, 1, "PGW S5/S8 Address for Control Plane or PMIP" },
1674 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Created" },
1675 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1676 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1677 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1678 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1679 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1680 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 0, "MME/S4-SGSN LDN" },
1681 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 1, "SGW LDN" },
1682 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 2, "ePDG LDN" },
1683 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 3, "TWAN LDN" },
1684 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 0, "UE Local IP Address" },
1685 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 1, "H(e)NB Local IP Address" },
1686 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 2, "MME/S4-SGSN Identifier" },
1687 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 3, "ePDG IP Address" },
1688 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1689 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 1, "H(e)NB Local UDP Port" },
1690 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 2, "UE TCP Port" },
1691 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1692 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1693 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1694 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1695 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1696 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_ID_TS179, 0, "WLAN Location Timestamp" },
1697 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_ULI86, 0, "User Location Info" },
1698 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_ULI86, 1, "User Location Info for SGW" },
1699
1700 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_F_TEID87, 0, "Sender F-TEID for Control Plane" },
1701 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_F_TEID87, 1, "PGW S5/S8 Address for Control Plane or PMIP" },
1702 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Created" },
1703 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1704 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1705 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1706 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LDN151, 0, "SGW LDN" },
1707 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LDN151, 1, "PGW LDN" },
1708 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1709 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1710 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1711 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1712 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1713 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 0, "Charging Gateway Name" },
1714 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 1, "PGW Node Name" },
1715 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 1, "Alternative PGW-C/SMF FQDN" },
1716 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IP_ADDRESS74, 0, "Charging Gateway Address" },
1717 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IP_ADDRESS74, 1, "Alternative PGW-C/SMF Address" },
1718 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1719 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1720 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1721
1722 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1723 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1724 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1725 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1726 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1727 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1728 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1729 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1730 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1731 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1732 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1733 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1734 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1735 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1736 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1737
1738 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1739 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1740 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1741 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1742 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1743 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1744 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1745 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1746 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1747 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1748 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1749 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1750
1751 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1752 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_EBI73, 1, "EPS Bearer ID" },
1753 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1754 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1755
1756 { GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1757 { GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1758
1759 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1760 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1761 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1762 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1763 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 0, "H(e)NB Local IP Address" },
1764 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 1, "UE Local IP Address" },
1765 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 2, "MME/S4-SGSN Identifier" },
1766 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_PORT_NR126, 0, "H(e)NB Local UDP Port" },
1767 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_PORT_NR126, 1, "UE UDP Port" },
1768 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1769 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1770 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "ePDG Overload Control Info" },
1771 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_ULI86, 0, "User Location Info" }, /* redundant */
1772 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_ULI86, 1, "User Location Info for SGW" }, /* redundant ? */
1773
1774 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1775 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1776 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1777 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1778 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LDN151, 0, "SGW LDN" },
1779 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LDN151, 1, "PGW LDN" },
1780 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1781 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1782 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1783 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1784 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1785 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1786 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1787 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1788
1789 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1790 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1791 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1792 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1793 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1794 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1795 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1796 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1797 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1798
1799 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1800 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_EBI73, 1, "EPS Bearer ID" },
1801 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1802 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1803 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1804 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1805 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1806 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1807 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1808 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1809 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1810 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1811 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1812 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1813 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1814 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1815 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1816
1817 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1818 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1819 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1820 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1821 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1822
1823 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1824 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1825 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1826 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1827 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1828 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1829 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1830 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1831 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1832 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1833 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1834 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1835 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1836
1837 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1838 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1839 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1840
1841 { GTPV2_MODIFY_BEARER_FAILURE_INDICATION65, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1842 { GTPV2_MODIFY_BEARER_FAILURE_INDICATION65, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "SGW node level Load Control Info" },
1843
1844 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1845 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1846 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1847 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1848 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1849 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1850 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1851 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1852 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1853 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1854 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1855 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1856 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1857 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1858 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1859
1860 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1861 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1862 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1863 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1864 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1865 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1866 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1867 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1868 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1869 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1870 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1871 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1872
1873 { GTPV2_DELETE_BEARER_COMMAND66, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1874 { GTPV2_DELETE_BEARER_COMMAND66, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1875
1876 { GTPV2_DELETE_BEARER_FAILURE_INDICATION67, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1877 { GTPV2_DELETE_BEARER_FAILURE_INDICATION67, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "SGW node level Load Control Info" },
1878
1879 { GTPV2_MODIFY_ACESSS_BEARER_REQUEST211, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1880 { GTPV2_MODIFY_ACESSS_BEARER_REQUEST211, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1881
1882 { GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1883 { GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1884
1885 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 0, "E-UTRAN Transparent Container" },
1886 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 1, "UTRAN Transparent Container" },
1887 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 2, "BSS Container" },
1888 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IP_ADDRESS74, 0, "HRPD access node S101 IP Address" },
1889 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IP_ADDRESS74, 1, "1xIWS S102 IP Address" },
1890 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 0, "S1-AP Cause" },
1891 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 1, "RANAP Cause" },
1892 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 2, "BSSGP Cause" },
1893 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_RFSP_INDEX144, 0, "Subscribed RFSP Index" },
1894 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_RFSP_INDEX144, 1, "RFSP Index in Use" },
1895 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 0, "SGW FQDN" },
1896 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 1, "SGSN FQDN" },
1897 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 2, "MME FQDN" },
1898 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 0, "Subscribed Additional RRM Policy Index" },
1899 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 1, "Additional RRM Policy Index in Use" },
1900 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 0, "PGW FQDN" },
1901 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 1, "Local Home Network ID" },
1902 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_SERVICES_AUTHORIZED210, 0, "LTE V2X Service Authorized" },
1903 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_SERVICES_AUTHORIZED210, 1, "NR V2X Service Authorized" },
1904 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_BIT_RATE211, 0, "LTE UE Sidelink Aggregate Maximum Bit Rate" },
1905 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_BIT_RATE211, 1, "NR UE Sidelink Aggregate Maximum Bit Rate" },
1906 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1907 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1908 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1909 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1910
1911 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 0, "List of Set-up Bearers" },
1912 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 1, "List of Set-up RABs" },
1913 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 2, "List of Set-up PFCs" },
1914 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 2, "List of Set-up Bearers for SCEF PDN Connections" },
1915 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 0, "S1-AP Cause" },
1916 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 1, "RANAP Cause" },
1917 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 2, "BSSGP Cause" },
1918 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 0, "E-UTRAN Transparent Container" },
1919 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 1, "UTRAN Transparent Container" },
1920 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 2, "BSS Container" },
1921 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_FQDN136, 0, "SGSN Node Name" },
1922 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_FQDN136, 1, "MME Node Name" },
1923 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier" },
1924 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier" },
1925 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 2, "SGSN Identifier for MT-SMS" },
1926 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 3, "MME Identifier for MT-SMS" },
1927 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 0, "SGSN Number" },
1928 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 1, "MME Number for MT-SMS" },
1929 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 2, "MSC Number" },
1930
1931 { GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136, 0, GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, 0, "Secondary RAT Usage Data Report" },
1932 { GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136, 0, GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, 1, "Secondary RAT Usage Data Report from NG-RAN" },
1933
1934 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_FQDN136, 0, "SGSN Node Name" },
1935 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_FQDN136, 1, "MME Node Name" },
1936 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier" },
1937 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier" },
1938
1939 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IP_ADDRESS74, 0, "HRPD access node S101 IP Address" },
1940 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IP_ADDRESS74, 1, "1xIWS S102 IP Address" },
1941 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_RFSP_INDEX144, 0, "Subscribed RFSP Index" },
1942 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_RFSP_INDEX144, 1, "RFSP Index in Use" },
1943 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 0, "SGW Node Name" },
1944 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 1, "SGSN Node Name" },
1945 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 2, "MME Node Name" },
1946 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_INTEGER_NUMBER187, 0, "UE Usage Type" },
1947 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_INTEGER_NUMBER187, 1, "Remaining Running Service Gap Timer" },
1948 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 0, "Subscribed Additional RRM Policy Index" },
1949 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 1, "Additional RRM Policy Index in Use" },
1950 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 0, "PGW FQDN" },
1951 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 1, "Local Home Network ID" },
1952 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1953 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1954 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1955
1956 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_NUMBER175, 0, "SGSN Number" },
1957 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_NUMBER175, 1, "MME Number for MT-SMS" },
1958 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier for MT-SMS" },
1959 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier for MT-SMS" },
1960
1961 { GTPV2_CONFIGURATION_TRANSFER_TUNNEL141, 0, GTPV2_IE_TARGET_ID121, 0, "Target eNodeB ID / en-gNB ID / gnB ID" },
1962 { GTPV2_CONFIGURATION_TRANSFER_TUNNEL141, 0, GTPV2_IE_TARGET_ID121, 1, "Connected Target eNodeB ID" },
1963
1964 { 0, 0, 0, 0, NULL((void*)0) },
1965};
1966
1967#define NUM_GTPV2_IE_INFO_ELEM_INSTANCES(sizeof (gtpv2_information_element_instance_vals) / sizeof (gtpv2_information_element_instance_vals
)[0])
array_length(gtpv2_information_element_instance_vals)(sizeof (gtpv2_information_element_instance_vals) / sizeof (gtpv2_information_element_instance_vals
)[0])
1968
1969/* Code to dissect IE's */
1970
1971static void
1972dissect_gtpv2_unknown(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
1973{
1974 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
1975}
1976
1977/*
1978 * 8.3 International Mobile Subscriber Identity (IMSI)
1979 *
1980 * IMSI is defined in 3GPP TS 23.003
1981 * Editor's note: IMSI coding will be defined in 3GPP TS 24.301
1982 * Editor's note: In the first release of GTPv2 spec (TS 29.274v8.0.0) n = 8.
1983 * That is, the overall length of the IE is 11 octets.
1984 */
1985
1986static void
1987dissect_gtpv2_imsi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args)
1988{
1989 int offset = 0;
1990 const char *imsi_str;
1991
1992 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
1993 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the wmem
1994 * allocated string will be returned.
1995 */
1996 imsi_str = dissect_e212_imsi(tvb, pinfo, tree, offset, length, false0);
1997 proto_item_append_text(item, "%s", imsi_str);
1998
1999 if (g_gtp_session) {
2000 args->imsi = imsi_str;
2001 }
2002}
2003
2004/*
2005 * 8.4 Cause
2006 */
2007
2008/* Table 8.4-1: Cause values */
2009static const value_string gtpv2_cause_vals[] = {
2010 {0, "Reserved"},
2011 /* Request / Initial message */
2012 { 1, "Reserved"},
2013 { 2, "Local Detach"},
2014 { 3, "Complete Detach"},
2015 { 4, "RAT changed from 3GPP to Non-3GPP"},
2016 { 5, "ISR deactivation"},
2017 { 6, "Error Indication received from RNC/eNodeB/S4-SGSN"},
2018 { 7, "IMSI Detach Only"},
2019 { 8, "Reactivation Requested"},
2020 { 9, "PDN reconnection to this APN disallowed"},
2021 { 10, "Access changed from Non-3GPP to 3GPP"},
2022 { 11, "PDN connection inactivity timer expires"},
2023 { 12, "PGW not responding"},
2024 { 13, "Network Failure"},
2025 { 14, "QoS parameter mismatch"},
2026 { 15, "EPS to 5GS Mobility"},
2027 /* Acceptance in a Response / triggered message */
2028 { 16, "Request accepted"},
2029 { 17, "Request accepted partially"},
2030 { 18, "New PDN type due to network preference"},
2031 { 19, "New PDN type due to single address bearer only"},
2032 /* 20-63 Spare. This value range shall be used by Cause values in an acceptance response/triggered message */
2033 { 20, "Spare"},
2034 { 21, "Spare"},
2035 { 22, "Spare"},
2036 { 23, "Spare"},
2037 { 24, "Spare"},
2038 { 25, "Spare"},
2039 { 26, "Spare"},
2040 { 27, "Spare"},
2041 { 28, "Spare"},
2042 { 29, "Spare"},
2043 { 30, "Spare"},
2044 { 31, "Spare"},
2045 { 32, "Spare"},
2046 { 33, "Spare"},
2047 { 34, "Spare"},
2048 { 35, "Spare"},
2049 { 36, "Spare"},
2050 { 37, "Spare"},
2051 { 38, "Spare"},
2052 { 39, "Spare"},
2053 { 40, "Spare"},
2054 { 41, "Spare"},
2055 { 42, "Spare"},
2056 { 43, "Spare"},
2057 { 44, "Spare"},
2058 { 45, "Spare"},
2059 { 46, "Spare"},
2060 { 47, "Spare"},
2061 { 48, "Spare"},
2062 { 49, "Spare"},
2063 { 50, "Spare"},
2064 { 51, "Spare"},
2065 { 52, "Spare"},
2066 { 53, "Spare"},
2067 { 54, "Spare"},
2068 { 55, "Spare"},
2069 { 56, "Spare"},
2070 { 57, "Spare"},
2071 { 58, "Spare"},
2072 { 59, "Spare"},
2073 { 60, "Spare"},
2074 { 61, "Spare"},
2075 { 62, "Spare"},
2076 { 63, "Spare"},
2077 /* Rejection in a Response / triggered message */
2078 { 64, "Context Not Found"},
2079 { 65, "Invalid Message Format"},
2080 { 66, "Version not supported by next peer"},
2081 { 67, "Invalid length"},
2082 { 68, "Service not supported"},
2083 { 69, "Mandatory IE incorrect"},
2084 { 70, "Mandatory IE missing"},
2085 { 71, "Shall not be used"},
2086 { 72, "System failure"},
2087 { 73, "No resources available"},
2088 { 74, "Semantic error in the TFT operation"},
2089 { 75, "Syntactic error in the TFT operation"},
2090 { 76, "Semantic errors in packet filter(s)"},
2091 { 77, "Syntactic errors in packet filter(s)"},
2092 { 78, "Missing or unknown APN"},
2093 { 79, "Shall not be used"},
2094 { 80, "GRE key not found"},
2095 { 81, "Relocation failure"},
2096 { 82, "Denied in RAT"},
2097 { 83, "Preferred PDN type not supported"},
2098 { 84, "All dynamic addresses are occupied"},
2099 { 85, "UE context without TFT already activated"},
2100 { 86, "Protocol type not supported"},
2101 { 87, "UE not responding"},
2102 { 88, "UE refuses"},
2103 { 89, "Service denied"},
2104 { 90, "Unable to page UE"},
2105 { 91, "No memory available"},
2106 { 92, "User authentication failed"},
2107 { 93, "APN access denied - no subscription"},
2108 { 94, "Request rejected(reason not specified)"},
2109 { 95, "P-TMSI Signature mismatch"},
2110 { 96, "IMSI/IMEI not known"},
2111 { 97, "Semantic error in the TAD operation"},
2112 { 98, "Syntactic error in the TAD operation"},
2113 { 99, "Shall not be used"},
2114 {100, "Remote peer not responding"},
2115 {101, "Collision with network initiated request"},
2116 {102, "Unable to page UE due to Suspension"},
2117 {103, "Conditional IE missing"},
2118 {104, "APN Restriction type Incompatible with currently active PDN connection"},
2119 {105, "Invalid overall length of the triggered response message and a piggybacked initial message"},
2120 {106, "Data forwarding not supported"},
2121 {107, "Invalid reply from remote peer"},
2122 {108, "Fallback to GTPv1"},
2123 {109, "Invalid peer"},
2124 {110, "Temporarily rejected due to handover/TAU/RAU procedure in progress"},
2125 {111, "Modifications not limited to S1-U bearers"},
2126 {112, "Request rejected for a PMIPv6 reason "},
2127 {113, "APN Congestion"},
2128 {114, "Bearer handling not supported"},
2129 {115, "UE already re-attached"},
2130 {116, "Multiple PDN connections for a given APN not allowed"},
2131 {117, "Target access restricted for the subscriber"},
2132 {118, "Shall not be used. See NOTE 2 and NOTE 3."},
2133 {119, "MME/SGSN refuses due to VPLMN Policy"},
2134 {120, "GTP-C Entity Congestion"},
2135 {121, "Late Overlapping Request"},
2136 {122, "Timed out Request"},
2137 {123, "UE is temporarily not reachable due to power saving"},
2138 {124, "Relocation failure due to NAS message redirection"},
2139 {125, "UE not authorised by OCS or external AAA Server"},
2140 {126, "Multiple accesses to a PDN connection not allowed"},
2141 {127, "Request rejected due to UE capability"},
2142 {128, "S1-U Path Failure" },
2143 {129, "5GC not allowed" },
2144 {130, "PGW mismatch with network slice subscribed by the UE" },
2145 {131, "Rejection due to paging restriction" },
2146
2147 /* 132-239 Spare. For future use in a triggered/response message */
2148 /* 240-255 Spare. For future use in an initial/request message */
2149 {0, NULL((void*)0)}
2150};
2151value_string_ext gtpv2_cause_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_cause_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_cause_vals) / sizeof
((gtpv2_cause_vals)[0]))-1, gtpv2_cause_vals, "gtpv2_cause_vals"
, ((void*)0) }
;
2152
2153/* Table 8.4-1: CS (Cause Source) */
2154static const true_false_string gtpv2_cause_cs = {
2155 "Originated by remote node",
2156 "Originated by node sending the message",
2157};
2158
2159static void
2160dissect_gtpv2_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args)
2161{
2162 int offset = 0;
2163 uint8_t tmp;
2164
2165 /* Cause value octet 5 */
2166 tmp = tvb_get_uint8(tvb, offset);
2167 if (g_gtp_session) {
2168 args->last_cause = tmp;
2169 }
2170 proto_tree_add_item(tree, hf_gtpv2_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2171
2172 /* Add Cause to ie_tree */
2173 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(tmp, &gtpv2_cause_vals_ext, "Unknown"), tmp);
2174 offset += 1;
2175
2176 /* Octet 6 Spare PCE BCE CS */
2177 static int* const oct6_flags[] = {
2178 &hf_gtpv2_spare_b7_b3,
2179 &hf_gtpv2_cause_pce,
2180 &hf_gtpv2_cause_bce,
2181 &hf_gtpv2_cause_cs,
2182 NULL((void*)0)
2183 };
2184
2185 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct6_flags, ENC_NA0x00000000);
2186 offset += 1;
2187
2188 /* If n = 2, a = 0 and the Cause IE shall be 6 octets long.
2189 * Therefore, octets "a(n+1) to a(n+4)" will not be present.
2190 * If n = 6, a = 1 and the Cause IE will be 10 octets long.
2191 */
2192 if ( length == 2 ) {
2193 return;
2194 }
2195 /*
2196 * If the rejection is due to a mandatory IE or a verifiable conditional IE is faulty
2197 * or missing, the offending IE shall be included within an additional field "a(n+1)
2198 * to a(n+4)". Only Type and Instance fields of the offending IE that caused the
2199 * rejection have a meaning. The length in the Octet 8-9 and spare bits in the Octet 10
2200 * shall be set to "0". In this case, the value of "n" shall be "6".
2201 * Otherwise, the value of "n" is equal to "2".
2202 */
2203
2204 /* Type of the offending IE */
2205 proto_tree_add_item(tree, hf_gtpv2_cause_off_ie_t, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2206 offset += 1;
2207
2208 /* Length */
2209 proto_tree_add_item(tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2210 offset += 2;
2211 /* a(n+4) Spare Instance */
2212 proto_tree_add_bits_item(tree, hf_gtpv2_spare_half_octet, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
2213 proto_tree_add_item(tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2214
2215}
2216
2217/*
2218 * 8.5 Recovery (Restart Counter)
2219 */
2220static void
2221dissect_gtpv2_recovery(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2222{
2223 int offset = 0;
2224 uint8_t recovery;
2225
2226 recovery = tvb_get_uint8(tvb, offset);
2227 proto_tree_add_item(tree, hf_gtpv2_rec, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2228 proto_item_append_text(item, "%u", recovery);
2229
2230}
2231
2232
2233/*Start SRVCC Messages*/
2234
2235/* 6.2 STN-SR */
2236static void
2237dissect_gtpv2_stn_sr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2238{
2239 proto_item *stn_sr_item;
2240 proto_tree *sub_tree;
2241 tvbuff_t *new_tvb;
2242 int offset = 0;
2243
2244 stn_sr_item = proto_tree_add_item(tree, hf_gtpv2_stn_sr, tvb, offset, length, ENC_NA0x00000000);
2245 new_tvb = tvb_new_subset_length(tvb, offset, length);
2246 sub_tree = proto_item_add_subtree(stn_sr_item, ett_gtpv2_stn_sr);
2247
2248 /* Octet 5
2249 * contains the Nature of Address and Numbering Plan Indicator (NANPI) of the "AddressString" ASN.1 type (see 3GPP
2250 * 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
2251 * 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
2252 * filler "1111".
2253 */
2254 dissect_gsm_map_msisdn(new_tvb, pinfo, sub_tree);
2255}
2256
2257/* 6.3 Source to Target Transparent Container */
2258
2259static void
2260dissect_gtpv2_src_tgt_trans_con(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2261{
2262 int offset = 0;
2263
2264 proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2265 offset += 1;
2266 /*ra_type_flag = 0;*/
2267
2268 /* Transparent Container
2269 * When target network is GERAN, this container carries the Old BSS to New BSS
2270 * Information IE defined in 3GPP TS 48.008 [8]. When target network is UTRAN, this container carries the Source RNC
2271 * to Target RNC Transparent Container IE defined in 3GPP TS 25.413 [9]. The Transparent container field includes the
2272 * IE value part as it is specified in the respective specification.
2273 */
2274 proto_tree_add_item(tree, hf_gtpv2_transparent_container, tvb, offset, length-1, ENC_NA0x00000000);
2275 /*
2276 * bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
2277 * dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU
2278 */
2279 if ((message_type == GTPV2_SRVCC_PS_TO_CS_REQUEST25) && (pref_decode_srvcc_p2c_trans_cont == PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1)) {
2280 tvbuff_t *new_tvb;
2281 proto_tree *sub_tree;
2282
2283 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length-1, ett_gtpv2_utran_con, NULL((void*)0), "Source RNC to Target RNC Transparent Container");
2284 new_tvb = tvb_new_subset_remaining(tvb, offset);
2285 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
2286 }
2287
2288}
2289
2290/* 6.4 Target to Source Transparent Container */
2291static void
2292dissect_gtpv2_tgt_src_trans_con(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2293{
2294 int offset = 0;
2295
2296 proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2297 offset += 1;
2298
2299 /* Transparent Container */
2300 proto_tree_add_item(tree, hf_gtpv2_transparent_container, tvb, offset, length-1, ENC_NA0x00000000);
2301
2302 /* It's too hard to figure out the content...
2303 6.4 Target to Source Transparent Container
2304
2305 The Target to Source Transparent Container contains information that shall be transferred transparently by CN entities
2306 from the target RAN to the source RAN.
2307
2308 When the target network is GERAN, the Transparent container field contains the value part of the Layer 3 Information
2309 IE defined in 3GPP TS 48.008 [8], i.e., octets 3 to n, excluding octet 1 (Element ID) and octet 2 (Length).
2310
2311 When the target network is UTRAN, this container carries the Target RNC to Source RNC Transparent Container IE
2312 defined in 3GPP TS 25.413 [9]. The Transparent container field contains a transparent copy of the corresponding
2313 ASN.1/PER IE (see subclauses 8.2.2 and 8.48 in 3GPP TS 29.274 [3]).
2314
2315 When the target network is E-UTRAN, the container carries the Target eNB To Source eNB Transparent Container IE
2316 defined in 3GPP TS 36.413 [14]. The Transparent container field contains a transparent copy of the corresponding
2317 ASN.1/PER IE (see subclauses 8.2.2 and 8.48 in 3GPP TS 29.274 [3]).
2318
2319 The receiver of this Information Element shall ignore the length of the transparent container encoded in octet 5 and shall
2320 derive the actual length of the container from the length encoded in octets 2 to 3 minus 1.
2321
2322 For backward compatibility, the sender of this Information Element shall set the octet 5 to the actual length of the
2323 transparent container if the size of the container is smaller or equal to 255 octets, and to the value "255" otherwise.
2324
2325 */
2326 if ((message_type == GTPV2_SRVCC_PS_TO_CS_RESPONSE26) && (pref_decode_srvcc_p2c_trans_cont == PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1)) {
2327 tvbuff_t *new_tvb;
2328 proto_tree *sub_tree;
2329
2330 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length-1, ett_gtpv2_utran_con, NULL((void*)0), "Target RNC to Source RNC Transparent Container");
2331 new_tvb = tvb_new_subset_remaining(tvb, offset);
2332 dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
2333 }
2334
2335}
2336
2337/* 6.5 MM Context for E-UTRAN SRVCC */
2338static void
2339dissect_gtpv2_mm_con_eutran_srvcc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2340{
2341 int offset = 0;
2342 uint8_t elm_len;
2343 proto_tree *ms_tree, *fi;
2344
2345 proto_tree_add_item(tree, hf_gtpv2_eksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2346 offset += 1;
2347 proto_tree_add_item(tree, hf_gtpv2_cksrvcc, tvb, offset, 16, ENC_NA0x00000000);
2348 offset += 16;
2349 proto_tree_add_item(tree, hf_gtpv2_iksrvcc, tvb, offset, 16, ENC_NA0x00000000);
2350 offset += 16;
2351
2352 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters, if they are not available,
2353 then the associated length field shall be set to zero, and the particular parameter field shall not be present.
2354 */
2355 /* Length of Mobile Station Classmark2 */
2356 elm_len = tvb_get_uint8(tvb, offset);
2357 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2358 offset += 1;
2359 if (elm_len) {
2360 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
2361 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2362 de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2363 offset += elm_len;
2364 }
2365
2366 /* Length of Mobile Station Classmark3 */
2367 elm_len = tvb_get_uint8(tvb, offset);
2368 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2369 offset += 1;
2370 if (elm_len) {
2371 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
2372 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2373 de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2374 offset += elm_len;
2375 }
2376
2377 /*Length of Supported Codec List */
2378 elm_len = tvb_get_uint8(tvb, offset);
2379 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2380 offset += 1;
2381 if (elm_len) {
2382 fi = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
2383 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
2384 de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2385 }
2386}
2387
2388/* 6.6 MM Context for UTRAN SRVCC */
2389static void
2390dissect_gtpv2_mm_con_utran_srvcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2391{
2392 int offset = 0;
2393 uint8_t elm_len;
2394 proto_tree *ms_tree, *fi;
2395
2396 proto_tree_add_item(tree, hf_gtpv2_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2397 offset += 1;
2398
2399 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_ck_cs, tvb, offset, 16, ENC_NA0x00000000);
2400 offset += 16;
2401 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_ik_cs, tvb, offset, 16, ENC_NA0x00000000);
2402 offset += 16;
2403 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_kc, tvb, offset, 8, ENC_NA0x00000000);
2404 offset += 8;
2405 proto_tree_add_item(tree, hf_gtpv2_cksn, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2406 offset += 1;
2407
2408 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters, if they are not available,
2409 then the associated length field shall be set to zero, and the particular parameter field shall not be present.
2410 */
2411
2412 /*Length of Mobile Station Classmark2 */
2413 elm_len = tvb_get_uint8(tvb, offset);
2414 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2415 offset += 1;
2416 if (elm_len) {
2417 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
2418 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2419 de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2420 offset += elm_len;
2421 }
2422
2423 /*Length of Mobile Station Classmark3 */
2424 elm_len = tvb_get_uint8(tvb, offset);
2425 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2426 offset += 1;
2427 if (elm_len) {
2428 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
2429 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2430 de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2431 offset += elm_len;
2432 }
2433
2434 /*Length of Supported Codec List */
2435 elm_len = tvb_get_uint8(tvb, offset);
2436 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2437 offset += 1;
2438 if (elm_len) {
2439 fi = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
2440 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
2441 de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2442 }
2443
2444}
2445
2446/* 6.7 SRVCC Cause */
2447static const value_string gtpv2_srvcc_cause_vals[] = {
2448 {0, "Reserved"},
2449 {1, "Unspecified"},
2450 {2, "Handover/Relocation cancelled by source system "},
2451 {3, "Handover /Relocation Failure with Target system"},
2452 {4, "Handover/Relocation Target not allowed"},
2453 {5, "Unknown Target ID"},
2454 {6, "Target Cell not available"},
2455 {7, "No Radio Resources Available in Target Cell"},
2456 {8, "Failure in Radio Interface Procedure"},
2457 {9, "Permanent session leg establishment error"},
2458 {10, "Temporary session leg establishment error"},
2459
2460 {0, NULL((void*)0)}
2461};
2462static value_string_ext gtpv2_srvcc_cause_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_srvcc_cause_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_srvcc_cause_vals
) / sizeof ((gtpv2_srvcc_cause_vals)[0]))-1, gtpv2_srvcc_cause_vals
, "gtpv2_srvcc_cause_vals", ((void*)0) }
;
2463
2464static void
2465dissect_gtpv2_srvcc_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2466{
2467 int offset = 0;
2468 uint8_t srvcc_cause;
2469
2470 srvcc_cause = tvb_get_uint8(tvb, offset);
2471 proto_tree_add_item(tree, hf_gtpv2_srvcc_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2472 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(srvcc_cause, &gtpv2_srvcc_cause_vals_ext, "Unknown"), srvcc_cause);
2473
2474}
2475
2476/*
2477 * 3GPP TS 29.280 version 10.3.0
2478 * 6.8 Target RNC ID
2479 */
2480static void
2481dissect_gtpv2_tgt_rnc_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2482{
2483 int offset = 0;
2484 uint16_t rnc_id;
2485 proto_tree *subtree;
2486 uint32_t mcc;
2487 uint32_t mnc;
2488 uint32_t lac;
2489 uint32_t curr_offset;
2490
2491 /*ra_type_flag = 1;*/ /*Flag to be set to differentiate GERAN and UTRAN*/
2492 curr_offset = offset;
2493
2494 mcc = (tvb_get_uint8(tvb, curr_offset) & 0x0f) << 8;
2495 mcc |= (tvb_get_uint8(tvb, curr_offset) & 0xf0);
2496 mcc |= (tvb_get_uint8(tvb, curr_offset+1) & 0x0f);
2497 mnc = (tvb_get_uint8(tvb, curr_offset+2) & 0x0f) << 8;
2498 mnc |= (tvb_get_uint8(tvb, curr_offset+2) & 0xf0);
2499 mnc |= (tvb_get_uint8(tvb, curr_offset+1) & 0xf0) >> 4;
2500 if ((mnc & 0x000f) == 0x000f)
2501 mnc = mnc >> 4;
2502
2503 lac = tvb_get_ntohs(tvb, curr_offset + 3);
2504 rnc_id = tvb_get_ntohs(tvb, curr_offset + 5);
2505
2506 subtree = proto_tree_add_subtree_format(tree,
2507 tvb, curr_offset, 6, ett_gtpv2_rai, NULL((void*)0),
2508 "Routing area identification: %x-%x-%u-%u",
2509 mcc, mnc, lac, rnc_id);
2510
2511 dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, E212_RAI, true1);
2512 curr_offset+=3;
2513
2514 proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN0x00000000);
2515 curr_offset+=2;
2516 proto_tree_add_item(subtree, hf_gtpv2_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN0x00000000);
2517 /*curr_offset+=2;*/
2518
2519 /* no length check possible */
2520
2521
2522}
2523
2524/*
2525 * 3GPP TS 29.280
2526 * 6.9 Target Global Cell ID
2527 * The encoding of this IE is defined in 3GPP TS 29.002
2528 * GlobalCellId ::= OCTET STRING (SIZE (5..7))
2529 * -- Refers to Cell Global Identification defined in TS 3GPP TS 23.003 [17].
2530 * -- The internal structure is defined as follows:
2531 * -- octet 1 bits 4321 Mobile Country Code 1st digit
2532 * -- bits 8765 Mobile Country Code 2nd digit
2533 * -- octet 2 bits 4321 Mobile Country Code 3rd digit
2534 * -- bits 8765 Mobile Network Code 3rd digit
2535 * -- or filler (1111) for 2 digit MNCs
2536 * -- octet 3 bits 4321 Mobile Network Code 1st digit
2537 * -- bits 8765 Mobile Network Code 2nd digit
2538 * -- octets 4 and 5 Location Area Code according to TS 3GPP TS 24.008 [35]
2539 * -- octets 6 and 7 Cell Identity (CI) according to TS 3GPP TS 24.008 [35]
2540 */
2541static void
2542dissect_gtpv2_tgt_global_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2543{
2544 int offset = 0;
2545 uint8_t tgt_cell_id;
2546 proto_tree *subtree;
2547 uint32_t mcc;
2548 uint32_t mnc;
2549 uint32_t lac;
2550 uint32_t curr_offset;
2551
2552 curr_offset = offset;
2553
2554 mcc = (tvb_get_uint8(tvb, curr_offset) & 0x0f) << 8;
2555 mcc |= (tvb_get_uint8(tvb, curr_offset) & 0xf0);
2556 mcc |= (tvb_get_uint8(tvb, curr_offset+1) & 0x0f);
2557 mnc = (tvb_get_uint8(tvb, curr_offset+2) & 0x0f) << 8;
2558 mnc |= (tvb_get_uint8(tvb, curr_offset+2) & 0xf0);
2559 mnc |= (tvb_get_uint8(tvb, curr_offset+1) & 0xf0) >> 4;
2560 if ((mnc & 0x000f) == 0x000f)
2561 mnc = mnc >> 4;
2562
2563 lac = tvb_get_ntohs(tvb, curr_offset + 3);
2564 tgt_cell_id = tvb_get_uint8(tvb, curr_offset + 5);
2565
2566 subtree = proto_tree_add_subtree_format(tree,
2567 tvb, curr_offset, 6, ett_gtpv2_rai, NULL((void*)0),
2568 "Routing area identification: %x-%x-%u-%u",
2569 mcc, mnc, lac, tgt_cell_id);
2570
2571 dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, E212_RAI, true1);
2572
2573 proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset + 3, 2, ENC_BIG_ENDIAN0x00000000);
2574 proto_tree_add_item(subtree, hf_gtpv2_tgt_g_cell_id, tvb, curr_offset + 5, 2, ENC_BIG_ENDIAN0x00000000);
2575
2576 proto_item_append_text(item, "%x-%x-%u-%u", mcc, mnc, lac, tgt_cell_id);
2577 /* no length check possible */
2578
2579}
2580
2581/* 6.10 Tunnel Endpoint Identifier for Control Plane (TEID-C) */
2582static void
2583dissect_gtpv2_teid_c(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2584{
2585 int offset = 0;
2586
2587 proto_tree_add_item(tree, hf_gtpv2_teid_c, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2588 offset += 4;
2589 if (length > 4)
2590 proto_tree_add_item(tree, hf_gtpv2_teid_c_spare, tvb, offset, length-4, ENC_NA0x00000000);
2591
2592 proto_item_append_text(item, "%u", tvb_get_ntohl(tvb, offset-4));
2593}
2594
2595/* 6.11 Sv Flags */
2596static void
2597dissect_gtpv2_sv_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2598{
2599 int offset = 0;
2600 static int* const sv_flags[] = {
2601 &hf_gtpv2_sv_sti,
2602 &hf_gtpv2_sv_ics,
2603 &hf_gtpv2_sv_emind,
2604 NULL((void*)0)
2605 };
2606
2607 proto_tree_add_bitmask_list(tree, tvb, offset, 1, sv_flags, ENC_NA0x00000000);
2608 offset += 1;
2609 if (length > 1)
2610 proto_tree_add_item(tree, hf_gtpv2_teid_c_spare, tvb, offset, length-1, ENC_NA0x00000000);
2611}
2612
2613/* 6.12 Service Area Identifier */
2614
2615static void
2616dissect_gtpv2_sai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2617{
2618 int offset = 0;
2619
2620 /* 5 MCC digit 2 MCC digit 1
2621 * 6 MNC digit 3 MCC digit 3
2622 * 7 MNC digit 2 MNC digit 1
2623 */
2624 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_SAI, true1);
2625 offset += 3;
2626
2627 /* 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
2628 * least significant bit. The coding of the location area code is the responsibility of each administration. Coding using full
2629 * hexadecimal representation shall be used.
2630 */
2631 proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2632 offset += 2;
2633
2634 /* 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
2635 * least significant bit. The SAC is defined by the operator. See 3GPP TS 23.003 [4] subclause 12.5 for more information
2636 */
2637 proto_tree_add_item(tree, hf_gtpv2_sac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2638}
2639
2640/* 6.13 MM Context for CS to PS SRVCC */
2641static void
2642dissect_gtpv2_mm_ctx_for_cs_to_ps_srvcc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2643{
2644 int offset = 0;
2645
2646 /* Octet 5 KSI"PS */
2647 proto_tree_add_item(tree, hf_gtpv2_ksi_ps, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2648 offset++;
2649
2650 /* octet 6 - 21 CK'PS */
2651 proto_tree_add_item(tree, hf_gtpv2_ck_ps, tvb, offset, 16, ENC_NA0x00000000);
2652 offset+=16;
2653
2654 /* octet 22 - 37 IK'PS */
2655 proto_tree_add_item(tree, hf_gtpv2_ik_ps, tvb, offset, 16, ENC_NA0x00000000);
2656 offset += 16;
2657
2658 /* octet 38 to 45 kc'PS */
2659 proto_tree_add_item(tree, hf_gtpv2_kc_ps, tvb, offset, 8, ENC_NA0x00000000);
2660 offset += 8;
2661
2662 /* Octet 46 CKSN"PS */
2663 proto_tree_add_item(tree, hf_gtpv2_cksn_ps, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2664 /*offset++;*/
2665
2666}
2667/*End SRVCC Messages*/
2668
2669
2670/*
2671 * 8.6 Access Point Name (APN)
2672 * The encoding the APN field follows 3GPP TS 23.003 [2] subclause 9.1.
2673 * The content of the APN field shall be the full APN with both the APN Network Identifier
2674 * and APN Operator Identifier being present as specified in 3GPP TS 23.003 [2]
2675 * 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.
2676 */
2677void
2678dissect_gtpv2_apn(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2679{
2680 const uint8_t *apn = NULL((void*)0);
2681
2682 proto_tree_add_item_ret_string(tree, hf_gtpv2_apn, tvb, 0, length, ENC_APN_STR0x00000054 | ENC_NA0x00000000, pinfo->pool, &apn);
2683 if (apn) {
2684 proto_item_append_text(item, "%s", apn);
2685 }
2686
2687}
2688
2689/*
2690 * 8.7 Aggregate Maximum Bit Rate (AMBR)
2691 */
2692
2693void
2694dissect_gtpv2_ambr(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2695{
2696 int offset = 0;
2697
2698 proto_tree_add_item(tree, hf_gtpv2_ambr_up, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2699 offset += 4;
2700 proto_tree_add_item(tree, hf_gtpv2_ambr_down, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2701}
2702
2703/*
2704 * 8.8 EPS Bearer ID (EBI)
2705 */
2706static void
2707dissect_gtpv2_ebi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2708{
2709
2710 int offset = 0;
2711 uint8_t ebi;
2712
2713 /* Spare (all bits set to 0) B8 - B5*/
2714 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2715 /* EPS Bearer ID (EBI) B4 - B1 */
2716 ebi = tvb_get_uint8(tvb, offset);
2717 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2718 proto_item_append_text(item, "%u", ebi);
2719
2720}
2721/*
2722 * 8.9 IP Address
2723 */
2724static void
2725dissect_gtpv2_ip_address(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2726{
2727 int offset = 0;
2728
2729 if (length == 4)
2730 {
2731 proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv4, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
2732 proto_item_append_text(item, "IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
2733 }
2734 else if (length == 16)
2735 {
2736 proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv6, tvb, offset, length, ENC_NA0x00000000);
2737 proto_item_append_text(item, "IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
2738 }
2739}
2740/*
2741 * 8.10 Mobile Equipment Identity (MEI)
2742 * The ME Identity field contains either the IMEI or the IMEISV
2743 * as defined in clause 6.2 of 3GPP TS 23.003 [2]. It is encoded
2744 * as specified in clause 7.7.53 of 3GPP TS 29.060 [4], beginning
2745 * with octet 4 of Figure 7.7.53.1. The IMEI(SV) digits are encoded
2746 * using BCD coding where IMEI is 15 BCD digits and IMEISV is 16 BCD
2747 * digits. For IMEI, bits 5 to 8 of the last octet shall be filled
2748 * with an end mark coded as '1111'.
2749 */
2750
2751void
2752dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2753{
2754 int offset = 0;
2755 char *mei_str;
2756
2757 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
2758 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
2759 * allocated string will be returned.
2760 */
2761 proto_tree_add_item_ret_display_string(tree, hf_gtpv2_mei, tvb, offset, length, ENC_BCD_DIGITS_0_90x00000044|ENC_LITTLE_ENDIAN0x80000000, pinfo->pool, &mei_str);
2762 proto_item_append_text(item, "%s", mei_str);
2763}
2764
2765/*
2766 * 8.11 MSISDN
2767 *
2768 * MSISDN is defined in 3GPP TS 23.003
2769 * Editor's note: MSISDN coding will be defined in TS 24.301.
2770 */
2771static void
2772dissect_gtpv2_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2773{
2774 const char *digit_str;
2775
2776 /* Octets 5 to (n+4) represent the MSISDN value is in international number format
2777 * as described in ITU-T Rec E.164 [25] and 3GPP TS 29.002 [41].
2778 * MSISDN value contains only the actual MSISDN number (does not contain the "nature of
2779 * address indicator" octet, which indicates "international number"
2780 * as in 3GPP TS 29.002 [41]) and is encoded as TBCD digits, i.e.
2781 * digits from 0 through 9 are encoded "0000" to "1001".
2782 * When there is an odd number of digits, bits 8 to 5 of the last octet are encoded with
2783 * the filler "1111".
2784 */
2785 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
2786 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
2787 * allocated string will be returned.
2788 */
2789 digit_str = dissect_e164_msisdn(tvb, pinfo, tree, 0, length, E164_ENC_BCD);
2790 proto_item_append_text(item, "%s", digit_str);
2791}
2792
2793/*
2794 * 8.12 Indication
2795 */
2796void
2797dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
2798{
2799 int offset = 0;
2800
2801 static int* const oct5_flags[] = {
2802 &hf_gtpv2_daf,
2803 &hf_gtpv2_dtf,
2804 &hf_gtpv2_hi,
2805 &hf_gtpv2_dfi,
2806 &hf_gtpv2_oi,
2807 &hf_gtpv2_isrsi,
2808 &hf_gtpv2_israi,
2809 &hf_gtpv2_sgwci,
2810 NULL((void*)0)
2811 };
2812
2813 /* Octet 5 DAF DTF HI DFI OI ISRSI ISRAI SGWCI */
2814 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct5_flags, ENC_NA0x00000000);
2815 if (length == 1) {
2816 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length, "Older version?, should be 2 octets in 8.0.0");
2817 return;
2818 }
2819
2820 offset += 1;
2821
2822 static int* const oct6_flags[] = {
2823 &hf_gtpv2_sqci,
2824 &hf_gtpv2_uimsi,
2825 &hf_gtpv2_cfsi,
2826 &hf_gtpv2_crsi,
2827 &hf_gtpv2_ps,
2828 &hf_gtpv2_pt,
2829 &hf_gtpv2_si,
2830 &hf_gtpv2_msv,
2831 NULL((void*)0)
2832 };
2833
2834 /* Octet 6 SQCI UIMSI CFSI CRSI P PT SI MSV
2835 * 3GPP TS 29.274 version 9.4.0 Release 9
2836 */
2837
2838 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct6_flags, ENC_NA0x00000000);
2839 offset += 1;
2840
2841 if (length == 2) {
2842 return;
2843 }
2844 /* Only present in version 9 and higher */
2845 static int* const oct7_flags[] = {
2846 &hf_gtpv2_retloc,
2847 &hf_gtpv2_pbic,
2848 &hf_gtpv2_srni,
2849 &hf_gtpv2_s6af,
2850 &hf_gtpv2_s4af,
2851 &hf_gtpv2_mbmdt,
2852 &hf_gtpv2_israu,
2853 &hf_gtpv2_ccrsi,
2854 NULL((void*)0)
2855 };
2856
2857 /* Octet 7 RetLoc PBIC SRNI S6AF S4AF MBMDT ISRAU CCRSI */
2858 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct7_flags, ENC_NA0x00000000);
2859 offset += 1;
2860
2861 if (length == 3) {
2862 return;
2863 }
2864 static int* const oct8_flags[] = {
2865 &hf_gtpv2_cprai,
2866 &hf_gtpv2_arrl,
2867 &hf_gtpv2_ppof,
2868 &hf_gtpv2_ppon_ppei,
2869 &hf_gtpv2_ppsi,
2870 &hf_gtpv2_csfbi,
2871 &hf_gtpv2_clii,
2872 &hf_gtpv2_cpsr,
2873 NULL((void*)0)
2874 };
2875
2876 /* Octet 8 CPRAI ARRL PPOF PPON/PPEI PPSI CSFBI CLII CPSR */
2877 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct8_flags, ENC_NA0x00000000);
2878 offset += 1;
2879
2880 if (length == 4) {
2881 return;
2882 }
2883
2884 static int* const oct9_flags[] = {
2885 &hf_gtpv2_nsi,
2886 &hf_gtpv2_uasi,
2887 &hf_gtpv2_dtci,
2888 &hf_gtpv2_bdwi,
2889 &hf_gtpv2_psci,
2890 &hf_gtpv2_pcri,
2891 &hf_gtpv2_aosi,
2892 &hf_gtpv2_aopi,
2893 NULL((void*)0)
2894 };
2895
2896 /* Octet 9 NSI UASI DTCI BDWI PSCI PCRI AOSI AOPI */
2897 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct9_flags, ENC_NA0x00000000);
2898 offset += 1;
2899
2900 if (length == 5) {
2901 return;
2902 }
2903
2904 static int* const oct10_flags[] = {
2905 &hf_gtpv2_roaai,
2906 &hf_gtpv2_epcosi,
2907 &hf_gtpv2_cpopci,
2908 &hf_gtpv2_pmtsmi,
2909 &hf_gtpv2_s11tf,
2910 &hf_gtpv2_pnsi,
2911 &hf_gtpv2_unaccsi,
2912 &hf_gtpv2_wpmsi,
2913 NULL((void*)0)
2914 };
2915 /* Octet 10 ROAAI EPCOSI CPOPCI PMTSMI S11TF PNSI UNACCSI WPMSI */
2916 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct10_flags, ENC_NA0x00000000);
2917 offset += 1;
2918
2919 if (length == 6){
2920 return;
2921 }
2922
2923 static int* const oct11_flags[] = {
2924 &hf_gtpv2_5gsnn26,
2925 &hf_gtpv2_reprefi,
2926 &hf_gtpv2_5gsiwk,
2927 &hf_gtpv2_eevrsi,
2928 &hf_gtpv2_ltemui,
2929 &hf_gtpv2_ltempi,
2930 &hf_gtpv2_enbcrsi,
2931 &hf_gtpv2_tspcmi,
2932 NULL((void*)0)
2933 };
2934 /*Octet 11 5GSNN26 REPREFI 5GSIWK EEVRSI LTEMUI LTEMPI ENBCRSI TSPCMI */
2935 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct11_flags, ENC_NA0x00000000);
2936 offset += 1;
2937
2938 if (length == 7){
2939 return;
2940 }
2941
2942 static int* const oct12_flags[] = {
2943 &hf_gtpv2_csrmfi,
2944 &hf_gtpv2_mtedtn,
2945 &hf_gtpv2_mtedta,
2946 &hf_gtpv2_n5gnmi,
2947 &hf_gtpv2_5gcnrs,
2948 &hf_gtpv2_5gcnri,
2949 &hf_gtpv2_5srhoi,
2950 &hf_gtpv2_ethpdn,
2951 NULL((void*)0)
2952 };
2953 /* Octet 12 CSRMFI MTEDTN MTEDTA N5GNMI 5GCNRS 5GCNRI 5SRHOI ETHPDN */
2954
2955 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct12_flags, ENC_NA0x00000000);
2956 offset += 1;
2957
2958 if (length == 8) {
2959 return;
2960 }
2961
2962 static int* const oct13_flags[] = {
2963 &hf_gtpv2_nspusi,
2964 &hf_gtpv2_pgwrnsi,
2965 &hf_gtpv2_rppcsi,
2966 &hf_gtpv2_pgwchi,
2967 &hf_gtpv2_sissme,
2968 &hf_gtpv2_nsenbi,
2969 &hf_gtpv2_idfupf,
2970 &hf_gtpv2_emci,
2971 NULL((void*)0)
2972 };
2973
2974 /* Octet 13 NSOUSI PGWRNSI RPPCSI PGWCHI SISSME NSENBI IDFUPF EMCI */
2975 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct13_flags, ENC_NA0x00000000);
2976 offset += 1;
2977
2978 if (length == 9) {
2979 return;
2980 }
2981
2982 static int* const oct14_flags[] = {
2983 &hf_gtpv2_spare_b7_b4,
2984 &hf_gtpv2_lapcosi,
2985 &hf_gtpv2_ltemsai,
2986 &hf_gtpv2_srtpi,
2987 &hf_gtpv2_upipsi,
2988 NULL((void*)0)
2989 };
2990
2991 /* Octet 13 Spare LAPCOSI LTEMSAI SRTPI UPIPSI */
2992 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct14_flags, ENC_NA0x00000000);
2993 offset += 1;
2994
2995 if (length == 10) {
2996 return;
2997 }
2998
2999 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
3000
3001
3002}
3003
3004/*
3005 * 8.13 Protocol Configuration Options (PCO)
3006 * Protocol Configuration Options (PCO) is transferred via GTP tunnels. The sending entity copies the value part of the
3007 * 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
3008 * as per clause 10.5.6.3 of 3GPP TS 24.008 [5], starting with octet 3.
3009 * Dissected in packet-gsm_a_gm.c
3010 */
3011static void
3012dissect_gtpv2_pco(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3013{
3014 switch (message_type) {
3015 case GTPV2_CREATE_SESSION_REQUEST32:
3016 case GTPV2_DELETE_SESSION_REQUEST36:
3017 case GTPV2_BEARER_RESOURCE_COMMAND68:
3018 case GTPV2_CREATE_BEARER_RESPONSE96:
3019 case GTPV2_UPDATE_BEARER_RESPONSE98:
3020 case GTPV2_DELETE_BEARER_RESPONSE100:
3021 /* PCO options as MS to network direction */
3022 pinfo->link_dir = P2P_DIR_UL0;
3023 break;
3024 case GTPV2_CREATE_SESSION_RESPONSE33:
3025 case GTPV2_MODIFY_BEARER_RESPONSE35:
3026 case GTPV2_DELETE_SESSION_RESPONSE37:
3027 case GTPV2_CREATE_BEARER_REQUEST95:
3028 case GTPV2_UPDATE_BEARER_REQUEST97:
3029 case GTPV2_DELETE_BEARER_REQUEST99:
3030 /* PCO options as Network to MS direction: */
3031 pinfo->link_dir = P2P_DIR_DL1;
3032 break;
3033 default:
3034 break;
3035 }
3036 de_sm_pco(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3037}
3038
3039/*
3040 * 8.14 PDN Address Allocation (PAA)
3041 */
3042
3043static const value_string gtpv2_pdn_type_vals[] = {
3044 {1, "IPv4"},
3045 {2, "IPv6"},
3046 {3, "IPv4/IPv6"},
3047 {4, "Non-IP"},
3048 {5, "Ethernet"},
3049 {0, NULL((void*)0)}
3050};
3051value_string_ext gtpv2_pdn_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_pdn_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_pdn_type_vals) /
sizeof ((gtpv2_pdn_type_vals)[0]))-1, gtpv2_pdn_type_vals, "gtpv2_pdn_type_vals"
, ((void*)0) }
;
3052
3053void
3054dissect_gtpv2_paa(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3055{
3056 int offset = 0;
3057 uint8_t pdn_type;
3058
3059 pdn_type = tvb_get_uint8(tvb, offset);
3060 proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3061 offset += 1;
3062 switch (pdn_type)
3063 {
3064 case 1:
3065 /* IPv4 */
3066 if (length != 5) {
3067 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3068 "Wrong length indicated. Expected 5, got %u", length);
3069 return;
3070 }
3071 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3072 proto_item_append_text(item, "IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
3073 break;
3074 case 2:
3075 /* IPv6*/
3076 /* If PDN type value indicates IPv6, octet 6 contains the IPv6 Prefix Length.
3077 * Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
3078 * Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
3079 * and Interface Identifier and bit 1 of octet 22 the least significant bit.
3080 */
3081 if (length != 18) {
3082 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3083 "Wrong length indicated. Expected 18, got %u", length);
3084 return;
3085 }
3086 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3087 offset += 1;
3088 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3089 proto_item_append_text(item, "IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
3090 break;
3091 case 3:
3092 /* IPv4/IPv6 */
3093 /* If PDN type value indicates IPv4v6, octet 6 contains the IPv6 Prefix Length.
3094 * Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
3095 * Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
3096 * and Interface Identifier and bit 1 of octet 22 the least significant bit.
3097 * Octets 23 through 26 contain an IPv4 address. Bit 8 of octet 23 represents
3098 * the most significant bit of the IPv4 address and bit 1 of octet 26 the least
3099 * significant bit.
3100 */
3101 if (length != 22) {
3102 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3103 "Wrong length indicated. Expected 22, got %u", length);
3104 return;
3105 }
3106 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3107 offset += 1;
3108 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3109 proto_item_append_text(item, "IPv6 %s, ", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
3110 offset += 16;
3111 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3112 proto_item_append_text(item, "IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
3113 break;
3114 case 4: /* Non IP */
3115 case 5: /* Ethernet */
3116 /* If PDN type value indicates Non-IP or Ethernet, octets from 6 to 'n+4'
3117 shall not be present. */
3118 if (length != 1) {
3119 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3120 "Wrong length indicated. Expected 1, got %u", length);
3121 return;
3122 }
3123 default:
3124 break;
3125 }
3126}
3127/*
3128 * 8.15 Bearer Quality of Service (Bearer QoS)
3129 */
3130
3131void
3132dissect_gtpv2_bearer_qos(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3133{
3134 int offset = 0;
3135 static int* const bearer_qos_oct1_flags[] = {
3136 &hf_gtpv2_bearer_qos_pci,
3137 &hf_gtpv2_bearer_qos_pl,
3138 &hf_gtpv2_bearer_qos_pvi,
3139 NULL((void*)0)
3140 };
3141 proto_tree_add_bitmask_list(tree, tvb, offset, 1, bearer_qos_oct1_flags, ENC_BIG_ENDIAN0x00000000);
3142 offset += 1;
3143 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3144 offset += 1;
3145 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3146 offset += 5;
3147 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3148 offset += 5;
3149 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3150 offset += 5;
3151 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3152}
3153
3154/*
3155 * 8.16 Flow Quality of Service (Flow QoS)
3156 */
3157
3158static void
3159dissect_gtpv2_flow_qos(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3160{
3161 int offset = 0;
3162 proto_tree_add_item(tree, hf_gtpv2_flow_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3163 offset += 1;
3164 proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3165 offset += 5;
3166 proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3167 offset += 5;
3168 proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3169 offset += 5;
3170 proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3171}
3172
3173/*
3174 * 8.17 RAT Type
3175 */
3176static const value_string gtpv2_rat_type_vals[] = {
3177 {0, "Reserved"},
3178 {1, "UTRAN"},
3179 {2, "GERAN"},
3180 {3, "WLAN"},
3181 {4, "GAN"},
3182 {5, "HSPA Evolution"},
3183 {6, "EUTRAN"},
3184 {7, "Virtual"},
3185 {8, "EUTRAN-NB-IoT"},
3186 {9, "LTE-M"},
3187 {10, "NR"},
3188 {11, "WB-E-UTRAN(LEO)"},
3189 {12, "WB-E-UTRAN(MEO)"},
3190 {13, "WB-E-UTRAN(GEO)"},
3191 {14, "WB-E-UTRAN(OTHERSAT)"},
3192 {15, "EUTRAN-NB-IoT(LEO)"},
3193 {16, "EUTRAN-NB-IoT(MEO)"},
3194 {17, "EUTRAN-NB-IoT(GEO)"},
3195 {18, "EUTRAN-NB-IoT(OTHERSAT)"},
3196 {19, "LTE-M(LEO)"},
3197 {20, "LTE-M(MEO)"},
3198 {21, "LTE-M(GEO)"},
3199 {22, "LTE-M(OTHERSAT)"},
3200 {0, NULL((void*)0)}
3201};
3202value_string_ext gtpv2_rat_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_rat_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_rat_type_vals) /
sizeof ((gtpv2_rat_type_vals)[0]))-1, gtpv2_rat_type_vals, "gtpv2_rat_type_vals"
, ((void*)0) }
;
3203
3204
3205static void
3206dissect_gtpv2_rat_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3207{
3208 uint8_t rat_type;
3209
3210 rat_type = tvb_get_uint8(tvb, 0);
3211 proto_tree_add_item(tree, hf_gtpv2_rat_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
3212 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(rat_type, &gtpv2_rat_type_vals_ext, "Unknown"), rat_type);
3213
3214}
3215
3216/*
3217 * 8.18 Serving Network
3218 */
3219static void
3220dissect_gtpv2_serv_net(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3221{
3222 char *mcc_mnc_str;
3223
3224 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_SERV_NET, true1);
3225 proto_item_append_text(item, "%s", mcc_mnc_str);
3226}
3227
3228/*
3229 * 8.19 EPS Bearer Level Traffic Flow Template (Bearer TFT)
3230 */
3231
3232static void
3233dissect_gtpv2_bearer_tft(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3234{
3235 /* The detailed coding of Traffic Aggregate
3236 * Description is specified in 3GPP TS 24.008 [5] ,
3237 * clause 10.5.6.12, beginning with octet 3..
3238 * Use the decoding in packet-gsm_a_gm.c
3239 */
3240 de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3241
3242}
3243 /* 8.20 Traffic Aggregate Description (TAD)
3244 */
3245static void
3246dissect_gtpv2_tad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3247{
3248 /* The detailed coding of Traffic Aggregate
3249 * Description is specified in 3GPP TS 24.008 [5] ,
3250 * clause 10.5.6.12, beginning with octet 3..
3251 * Use the decoding in packet-gsm_a_gm.c
3252 */
3253 de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3254}
3255
3256/*
3257 * 8.21 User Location Info (ULI)
3258 *
3259 * The flags ECGI, TAI, RAI, SAI and CGI in octed 5 indicate if the corresponding
3260 * fields are present in the IE or not. If one of these flags is set to "0",
3261 * the corresponding field is not present at all. The respective identities are defined in 3GPP
3262 * TS 23.003 [2].
3263 * Editor's Note: The definition of ECGI is missing in 3GPP TS 23.003 v8.1.0.
3264 * It can be found in 3GPP TS 36.413 v8.3.0, but it is expected that it will be moved
3265 * to 23.003 in a future version.
3266 */
3267char*
3268dissect_gtpv2_tai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, bool_Bool is_5gs)
3269{
3270 char *str = NULL((void*)0);
3271 char *mcc_mnc_str;
3272 uint32_t tac;
3273
3274 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_TAI, true1);
3275 *offset += 3;
3276 if (is_5gs) {
3277 proto_tree_add_item_ret_uint(tree, hf_gtpv2_5gs_tai_tac, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &tac);
3278 *offset += 3;
3279 } else {
3280 proto_tree_add_item_ret_uint(tree, hf_gtpv2_tai_tac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000, &tac);
3281 *offset += 2;
3282 }
3283 str = wmem_strdup_printf(pinfo->pool, "%s, TAC 0x%x",
3284 mcc_mnc_str,
3285 tac);
3286
3287 return str;
3288}
3289
3290static char*
3291dissect_gtpv2_ecgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
3292{
3293 char *str = NULL((void*)0);
3294 char *mcc_mnc_str;
3295 uint8_t octet;
3296 uint32_t octet4;
3297 uint8_t spare;
3298 uint32_t ECGI;
3299 static int* const ECGI_flags[] = {
3300 &hf_gtpv2_enodebid,
3301 &hf_gtpv2_cellid,
3302 NULL((void*)0)
3303 };
3304
3305 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_ECGI, true1);
3306 *offset += 3;
3307 /* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare
3308 * and hence they would not make any difference to the hex string following it,
3309 * thus we directly read 4 bytes from the tvb
3310 */
3311
3312 octet = tvb_get_uint8(tvb, *offset);
3313 spare = octet & 0xF0;
3314 octet4 = tvb_get_ntohl(tvb, *offset);
3315 ECGI = octet4 & 0x0FFFFFFF;
3316 proto_tree_add_uint(tree, hf_gtpv2_ecgi_eci_spare, tvb, *offset, 1, spare);
3317 /* The coding of the E-UTRAN cell identifier is the responsibility of each administration.
3318 * Coding using full hexadecimal representation shall be used.
3319 */
3320 proto_tree_add_bitmask(tree, tvb, *offset, hf_gtpv2_ecgi_eci, ett_gtpv2_eci, ECGI_flags, ENC_BIG_ENDIAN0x00000000);
3321 *offset += 4;
3322 str = wmem_strdup_printf(pinfo->pool, "%s, ECGI 0x%x",
3323 mcc_mnc_str,
3324 ECGI);
3325
3326
3327 return str;
3328}
3329
3330static char*
3331dissect_gtpv2_rai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
3332{
3333 char *str = NULL((void*)0);
3334 char *mcc_mnc_str;
3335 uint16_t lac, rac;
3336
3337 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_RAI, true1);
3338 *offset += 3;
3339 lac = tvb_get_ntohs(tvb, *offset);
3340 proto_tree_add_item(tree, hf_gtpv2_rai_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3341 *offset += 2;
3342 /* 3GPP 29.274 8.21.3 RAI Field
3343 * "Only Octet c+5 contains the RAC. Octet c+6 is coded as all 1's (11111111)."
3344 * (We could, here and in GTP, check that the other octet is all 1's.)
3345 */
3346 rac = tvb_get_uint8(tvb, *offset);
3347 proto_tree_add_item(tree, hf_gtpv2_rai_rac, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
3348 *offset += 2;
3349 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, RAC 0x%x",
3350 mcc_mnc_str,
3351 lac,
3352 rac);
3353
3354 return str;
3355}
3356
3357static char*
3358dissect_gtpv2_sai_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
3359{
3360 char *str = NULL((void*)0);
3361 char *mcc_mnc_str;
3362 uint16_t lac, sac;
3363
3364 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_SAI, true1);
3365 *offset += 3;
3366 lac = tvb_get_ntohs(tvb, *offset);
3367 proto_tree_add_item(tree, hf_gtpv2_sai_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3368 *offset += 2;
3369 sac = tvb_get_ntohs(tvb, *offset);
3370 proto_tree_add_item(tree, hf_gtpv2_sai_sac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3371 *offset += 2;
3372 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, SAC 0x%x",
3373 mcc_mnc_str,
3374 lac,
3375 sac);
3376
3377 return str;
3378}
3379
3380static char*
3381dissect_gtpv2_cgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
3382{
3383 char *str = NULL((void*)0);
3384 char *mcc_mnc_str;
3385 uint16_t lac, ci;
3386
3387 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_CGI, true1);
3388 *offset += 3;
3389 lac = tvb_get_ntohs(tvb, *offset);
3390 proto_tree_add_item(tree, hf_gtpv2_uli_cgi_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3391 *offset += 2;
3392 ci = tvb_get_ntohs(tvb, *offset);
3393 proto_tree_add_item(tree, hf_gtpv2_uli_cgi_ci, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3394 *offset += 2;
3395 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, CI 0x%x",
3396 mcc_mnc_str,
3397 lac,
3398 ci);
3399
3400 return str;
3401}
3402
3403static char*
3404dissect_gtpv2_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
3405{
3406 char *str = NULL((void*)0);
3407 char *mcc_mnc_str;
3408 uint32_t macro_enodeb_id;
3409
3410 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
3411 *offset += 3;
3412 /* The Macro eNodeB ID consists of 20 bits.
3413 * Bit 4 of Octet 4 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
3414 */
3415 proto_tree_add_item_ret_uint(tree, hf_gtpv2_macro_enodeb_id, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &macro_enodeb_id);
3416 *offset += 3;
3417
3418 str = wmem_strdup_printf(pinfo->pool, "%s, Macro eNodeB ID 0x%x",
3419 mcc_mnc_str,
3420 macro_enodeb_id);
3421
3422 return str;
3423}
3424
3425static const true_false_string gtpv2_smenb = {
3426 "Short Macro eNodeB ID",
3427 "Long Macro eNodeB ID",
3428};
3429
3430static char*
3431dissect_gtpv2_ext_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, int hfindex)
3432{
3433 char *str = NULL((void*)0);
3434 char *mcc_mnc_str;
3435 uint32_t ext_macro_enodeb_id;
3436
3437 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
3438 *offset += 3;
3439 /* The Extended Macro eNodeB ID consists of 21 bits. */
3440 proto_tree_add_item(tree, hf_gtpv2_smenb, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
3441 proto_tree_add_item_ret_uint(tree, hfindex, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &ext_macro_enodeb_id);
3442 *offset += 3;
3443
3444 str = wmem_strdup_printf(pinfo->pool, "%s, Extended Macro %seNodeB ID 0x%x",
3445 mcc_mnc_str,
3446 hfindex == hf_gtpv2_ext_macro_ng_enodeb_id ? "ng-" : "",
3447 ext_macro_enodeb_id);
3448
3449 return str;
3450}
3451
3452
3453static char*
3454decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t instance _U___attribute__((unused)), unsigned flags)
3455{
3456 int offset = 1; /* flags are already dissected */
3457 proto_tree *part_tree;
3458 char *mcc_mnc_str;
3459 char *str = NULL((void*)0);
3460
3461 /* 8.21.1 CGI field */
3462 if (flags & GTPv2_ULI_CGI_MASK0x01)
3463 {
3464
3465 proto_item_append_text(item, "CGI ");
3466 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3467 ett_gtpv2_uli_field, NULL((void*)0), "Cell Global Identity (CGI)");
3468
3469 str = dissect_gtpv2_cgi(tvb, pinfo, part_tree, &offset);
3470
3471 if (offset == length)
3472 return str;
3473 }
3474
3475 /* 8.21.2 SAI field */
3476 if (flags & GTPv2_ULI_SAI_MASK0x02)
3477 {
3478 proto_item_append_text(item, "SAI ");
3479 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3480 ett_gtpv2_uli_field, NULL((void*)0), "Service Area Identity (SAI)");
3481
3482 str = dissect_gtpv2_sai_common(tvb, pinfo, part_tree, &offset);
3483
3484 if (offset == length)
3485 return str;
3486 }
3487 /* 8.21.3 RAI field */
3488 if (flags & GTPv2_ULI_RAI_MASK0x04)
3489 {
3490 proto_item_append_text(item, "RAI ");
3491 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3492 ett_gtpv2_uli_field, NULL((void*)0), "Routeing Area Identity (RAI)");
3493
3494 str = dissect_gtpv2_rai(tvb, pinfo, part_tree, &offset);
3495
3496 if (offset == length)
3497 return str;
3498 }
3499 /* 8.21.4 TAI field */
3500 if (flags & GTPv2_ULI_TAI_MASK0x08)
3501 {
3502 proto_item_append_text(item, "TAI ");
3503 part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
3504 ett_gtpv2_uli_field, NULL((void*)0), "Tracking Area Identity (TAI)");
3505
3506 str = dissect_gtpv2_tai(tvb, pinfo, part_tree, &offset, false0);
3507
3508 if (offset == length)
3509 return str;
3510 }
3511 /* 8.21.5 ECGI field */
3512 if (flags & GTPv2_ULI_ECGI_MASK0x10)
3513 {
3514 proto_item_append_text(item, "ECGI ");
3515 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3516 ett_gtpv2_uli_field, NULL((void*)0), "E-UTRAN Cell Global Identifier (ECGI)");
3517
3518 str = dissect_gtpv2_ecgi(tvb, pinfo, part_tree, &offset);
3519
3520 if (offset == length)
3521 return str;
3522
3523 }
3524 /* 8.21.6 LAI field */
3525 if (flags & GTPv2_ULI_LAI_MASK0x20)
3526 {
3527 uint32_t lac;
3528 proto_item_append_text(item, "LAI ");
3529 part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
3530 ett_gtpv2_uli_field, NULL((void*)0), "LAI (Location Area Identifier)");
3531 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, E212_LAI, true1);
3532 offset += 3;
3533
3534 /* The Location Area Code (LAC) consists of 2 octets. Bit 8 of Octet f+3 is the most significant bit
3535 * and bit 1 of Octet f+4 the least significant bit. The coding of the location area code is the
3536 * responsibility of each administration. Coding using full hexadecimal representation shall be used.
3537 */
3538 proto_tree_add_item_ret_uint(part_tree, hf_gtpv2_uli_lai_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &lac);
3539 offset += 2;
3540 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x",
3541 mcc_mnc_str,
3542 lac);
3543
3544 }
3545 /* 8.21.7 Macro eNodeB ID field */
3546 if (flags & GTPv2_ULI_MACRO_eNB_ID_MASK0x40)
3547 {
3548 proto_item_append_text(item, "Macro eNodeB ID ");
3549 part_tree = proto_tree_add_subtree(tree, tvb, offset, 6,
3550 ett_gtpv2_uli_field, NULL((void*)0), "Macro eNodeB ID");
3551
3552 str = dissect_gtpv2_macro_enodeb_id(tvb, pinfo, part_tree, &offset);
3553
3554 if (offset == length)
3555 return str;
3556 }
3557
3558 /* 8.21.8 Extended Macro eNodeB ID field */
3559 if (flags & GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80)
3560 {
3561 proto_item_append_text(item, "Ext Macro eNodeB ID ");
3562 part_tree = proto_tree_add_subtree(tree, tvb, offset, 6,
3563 ett_gtpv2_uli_field, NULL((void*)0), "Extended Macro eNodeB ID");
3564
3565 str = dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, part_tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
3566
3567 if (offset == length)
3568 return str;
3569 }
3570
3571 return str;
3572
3573}
3574
3575void
3576dissect_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3577{
3578 int offset = 0;
3579 uint64_t flags;
3580
3581 static int * const gtpv2_uli_flags[] = {
3582 &hf_gtpv2_uli_ext_macro_enb_id_flg,
3583 &hf_gtpv2_uli_macro_enb_id_flg,
3584 &hf_gtpv2_uli_lai_flg,
3585 &hf_gtpv2_uli_ecgi_flg,
3586 &hf_gtpv2_uli_tai_flg,
3587 &hf_gtpv2_uli_rai_flg,
3588 &hf_gtpv2_uli_sai_flg,
3589 &hf_gtpv2_uli_cgi_flg,
3590 NULL((void*)0)
3591 };
3592
3593 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_gtpv2_uli_flags,
3594 ett_gtpv2_uli_flags, gtpv2_uli_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04| BMT_NO_INT0x02, &flags);
3595
3596 decode_gtpv2_uli(tvb, pinfo, tree, item, length, instance, (unsigned)flags);
3597
3598 return;
3599}
3600
3601/* Diameter 3GPP AVP Code: 22 3GPP-User-Location-Info */
3602/*
3603 * TS 29.061 v15.5.0
3604 * 16.4.7.2 Coding 3GPP Vendor-Specific RADIUS attributes
3605 */
3606static const value_string geographic_location_type_vals[] = {
3607 {0, "CGI"},
3608 {1, "SAI"},
3609 {2, "RAI"},
3610 {128, "TAI"},
3611 {129, "ECGI"},
3612 {130, "TAI and ECGI"},
3613 {131, "eNodeB ID"},
3614 {132, "TAI and eNodeB ID"},
3615 {133, "extended eNodeB ID"},
3616 {134, "TAI and extended eNodeB ID"},
3617 {135, "NCGI"},
3618 {136, "5GS TAI"},
3619 {137, "5GS TAI and NCGI"},
3620 {138, "NG-RAN Node ID"},
3621 {139, "5GS TAI and NG-RAN Node ID"},
3622 /* 140-255 Spare for future use */
3623 {0, NULL((void*)0)}
3624};
3625
3626static int
3627dissect_3gpp_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, char **avp_str)
3628{
3629 int offset = 0;
3630 unsigned length;
3631 unsigned flags;
3632 uint32_t flags_3gpp;
3633 char *str_buf = NULL((void*)0);
3634 length = tvb_reported_length(tvb);
3635
3636 if (!avp_str)
3637 avp_str = &str_buf;
3638
3639 proto_tree_add_item_ret_uint(tree, hf_gtpv2_glt, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &flags_3gpp);
3640 offset++;
3641
3642 switch (flags_3gpp)
3643 {
3644 case 0:
3645 /* CGI */
3646 flags = GTPv2_ULI_CGI_MASK0x01;
3647 break;
3648 case 1:
3649 /* SAI */
3650 flags = GTPv2_ULI_SAI_MASK0x02;
3651 break;
3652 case 2:
3653 /* RAI */
3654 flags = GTPv2_ULI_RAI_MASK0x04;
3655 break;
3656 case 128:
3657 /* TAI */
3658 flags = GTPv2_ULI_TAI_MASK0x08;
3659 break;
3660 case 129:
3661 /* ECGI */
3662 flags = GTPv2_ULI_ECGI_MASK0x10;
3663 break;
3664 case 130:
3665 /* TAI and ECGI */
3666 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_ECGI_MASK0x10;
3667 break;
3668 case 131:
3669 /* eNodeB ID */
3670 flags = GTPv2_ULI_MACRO_eNB_ID_MASK0x40;
3671 break;
3672 case 132:
3673 /* TAI and eNodeB ID */
3674 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_MACRO_eNB_ID_MASK0x40;
3675 break;
3676 case 133:
3677 /* extended eNodeB ID */
3678 flags = GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80;
3679 break;
3680 case 134:
3681 /* TAI and extended eNodeB ID */
3682 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80;
3683 break;
3684 case 135:
3685 /* NCGI */
3686 {
3687 char *mcc_mnc_str;
3688 uint64_t nr_cell_id;
3689 proto_tree *subtree;
3690
3691 subtree = proto_tree_add_subtree(tree, tvb, offset, 8, ett_gtpv2_uli_field, NULL((void*)0),
3692 "NR Cell Global Identifier (NCGI)");
3693 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, subtree, offset, E212_NRCGI, true1);
3694 offset += 3;
3695 proto_tree_add_item_ret_uint64(subtree, hf_gtpv2_ncgi_nrci, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000, &nr_cell_id);
3696 *avp_str = wmem_strdup_printf(pinfo->pool,
3697 "%s, NR Cell Id 0x%" PRIx64"l" "x",
3698 mcc_mnc_str, nr_cell_id);
3699 }
3700 return length;
3701 case 136:
3702 /* 5GS TAI */
3703 {
3704 proto_tree *subtree;
3705
3706 subtree = proto_tree_add_subtree(tree, tvb, offset, 6, ett_gtpv2_uli_field, NULL((void*)0),
3707 "Tracking Area Identity (TAI)");
3708 *avp_str = dissect_gtpv2_tai(tvb, pinfo, subtree, &offset, true1);
3709 }
3710 return length;
3711 case 137:
3712 /* 5GS TAI and NCGI */
3713 {
3714 char *mcc_mnc_str;
3715 uint64_t nr_cell_id;
3716 proto_tree *subtree;
3717
3718 subtree = proto_tree_add_subtree(tree, tvb, offset, 6, ett_gtpv2_uli_field, NULL((void*)0),
3719 "Tracking Area Identity (TAI)");
3720 *avp_str = dissect_gtpv2_tai(tvb, pinfo, subtree, &offset, true1);
3721 subtree = proto_tree_add_subtree(tree, tvb, offset, 8, ett_gtpv2_uli_field, NULL((void*)0),
3722 "NR Cell Global Identifier (NCGI)");
3723 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, subtree, offset, E212_NRCGI, true1);
3724 offset += 3;
3725 proto_tree_add_item_ret_uint64(subtree, hf_gtpv2_ncgi_nrci, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000, &nr_cell_id);
3726 *avp_str = wmem_strdup_printf(pinfo->pool,
3727 "%s, %s, NR Cell Id 0x%" PRIx64"l" "x",
3728 *avp_str, mcc_mnc_str, nr_cell_id);
3729 }
3730 return length;
3731 default:
3732 proto_tree_add_item(tree, hf_gtpv2_geographic_location, tvb, offset, -1, ENC_NA0x00000000);
3733 return length;
3734 }
3735
3736 *avp_str = decode_gtpv2_uli(tvb, pinfo, tree, NULL((void*)0), length, 0, flags);
3737 return length;
3738}
3739
3740static const
3741char *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* pinfo)
3742{
3743 uint16_t length;
3744
3745 length = dissect_3gpp_uli(tvb, pinfo, tree, NULL((void*)0));
3746 return tvb_bytes_to_str(pinfo->pool, tvb, 0, length);
3747
3748}
3749
3750int
3751dissect_diameter_3gpp_uli(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
3752{
3753 diam_sub_dis_t* diam_sub_dis = (diam_sub_dis_t*)data;
3754
3755 if (diam_sub_dis) {
3756 return dissect_3gpp_uli(tvb, pinfo, tree, &diam_sub_dis->avp_str);
3757 } else {
3758 return dissect_3gpp_uli(tvb, pinfo, tree, NULL((void*)0));
3759 }
3760}
3761
3762/*
3763 * 8.22 Fully Qualified TEID (F-TEID)
3764 */
3765static const value_string gtpv2_f_teid_interface_type_vals[] = {
3766 { 0, "S1-U eNodeB GTP-U interface"},
3767 { 1, "S1-U SGW GTP-U interface"},
3768 { 2, "S12 RNC GTP-U interface"},
3769 { 3, "S12 SGW GTP-U interface"},
3770 { 4, "S5/S8 SGW GTP-U interface"},
3771 { 5, "S5/S8 PGW GTP-U interface"},
3772 { 6, "S5/S8 SGW GTP-C interface"},
3773 { 7, "S5/S8 PGW GTP-C interface"},
3774 { 8, "S5/S8 SGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
3775 "and since alternate CoA is not used the control plane and user plane addresses are the same for PMIPv6)"}, */
3776 { 9, "S5/S8 PGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
3777 "and the control plane and user plane addresses are the same for PMIPv6)"}, */
3778 {10, "S11 MME GTP-C interface"},
3779 {11, "S11/S4 SGW GTP-C interface"},
3780 {12, "S10 MME GTP-C interface"},
3781 {13, "S3 MME GTP-C interface"},
3782 {14, "S3 SGSN GTP-C interface"},
3783 {15, "S4 SGSN GTP-U interface"},
3784 {16, "S4 SGW GTP-U interface"},
3785 {17, "S4 SGSN GTP-C interface"},
3786 {18, "S16 SGSN GTP-C interface"},
3787 {19, "eNodeB/gNodeB GTP-U interface for DL data forwarding"},
3788 {20, "eNodeB GTP-U interface for UL data forwarding"},
3789 {21, "RNC GTP-U interface for data forwarding"},
3790 {22, "SGSN GTP-U interface for data forwarding"},
3791 {23, "SGW GTP-U interface for data forwarding"},
3792 {24, "Sm MBMS GW GTP-C interface"},
3793 {25, "Sn MBMS GW GTP-C interface"},
3794 {26, "Sm MME GTP-C interface"},
3795 {27, "Sn SGSN GTP-C interface"},
3796 {28, "SGW GTP-U interface for UL data forwarding"},
3797 {29, "Sn SGSN GTP-U interface"},
3798 {30, "S2b ePDG GTP-C interface"},
3799 {31, "S2b-U ePDG GTP-U interface"},
3800 {32, "S2b PGW GTP-C interface"},
3801 {33, "S2b-U PGW GTP-U interface"},
3802 {34, "S2a TWAN GTP-U interface"},
3803 {35, "S2a TWAN GTP-C interface"},
3804 {36, "S2a PGW GTP-C interface"},
3805 {37, "S2a PGW GTP-U interface"},
3806 {38, "S11 MME GTP-U interface"},
3807 {39, "S11 SGW GTP-U interface"},
3808 {40, "N26 AMF GTP-C interface"},
3809 {41, "N19mb UPF GTP-U interface"},
3810 {0, NULL((void*)0)}
3811};
3812static value_string_ext gtpv2_f_teid_interface_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_f_teid_interface_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_f_teid_interface_type_vals
) / sizeof ((gtpv2_f_teid_interface_type_vals)[0]))-1, gtpv2_f_teid_interface_type_vals
, "gtpv2_f_teid_interface_type_vals", ((void*)0) }
;
3813
3814static const true_false_string gtpv2_f_teid_v4_vals = {
3815 "IPv4 address present",
3816 "IPv4 address not present",
3817};
3818
3819static const true_false_string gtpv2_f_teid_v6_vals = {
3820 "IPv6 address present",
3821 "IPv6 address not present",
3822};
3823
3824static void
3825dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t *args)
3826{
3827 int offset = 0;
3828 uint8_t flags;
3829 address *ipv4 = NULL((void*)0), *ipv6 = NULL((void*)0);
3830 uint32_t teid_cp, *teid, session;
3831
3832 flags = tvb_get_uint8(tvb, offset);
3833 proto_tree_add_item(tree, hf_gtpv2_f_teid_v4, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3834 proto_tree_add_item(tree, hf_gtpv2_f_teid_v6, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3835 /* NOTE: "Interface type" IE is defined with 5 bits only in the earlier releases of this specification,
3836 * thus pre-Rel-10 GTPv2-C nodes can ignore bit "6" which is marked as "Spare" in earlier releases,
3837 * allowing backward compatibility.
3838 */
3839 proto_tree_add_item(tree, hf_gtpv2_f_teid_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3840
3841 offset += 1;
3842 proto_tree_add_item_ret_uint(tree, hf_gtpv2_f_teid_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &teid_cp);
3843 proto_item_append_text(item, "%s, TEID/GRE Key: 0x%s",
3844 val_to_str_ext_const((flags & 0x3f), &gtpv2_f_teid_interface_type_vals_ext, "Unknown"),
3845 tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
3846
3847 offset += 4;
3848 if (flags & 0x80)
3849 {
3850 ipv4 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3851 proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3852 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
3853 set_address_tvb(ipv4, AT_IPv4, 4, tvb, offset);
3854 offset += 4;
3855 }
3856 if (flags & 0x40)
3857 {
3858 ipv6 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3859 proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3860 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
3861 set_address_tvb(ipv6, AT_IPv6, 16, tvb, offset);
3862 }
3863
3864 if (g_gtp_session && args) {
3865 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (pinfo->num)))))
;
3866 if (!session) {
3867 /* We save the teid so that we could assignate its corresponding session ID later */
3868 args->last_teid = teid_cp;
3869 if (!teid_exists(teid_cp, args->teid_list)) {
3870 teid = wmem_new(pinfo->pool, uint32_t)((uint32_t*)wmem_alloc((pinfo->pool), sizeof(uint32_t)));
3871 *teid = teid_cp;
3872 wmem_list_prepend(args->teid_list, teid);
3873 }
3874 if (ipv4 != NULL((void*)0) && !ip_exists(*ipv4, args->ip_list)) {
3875 copy_address_wmem(pinfo->pool, &args->last_ip, ipv4);
3876 wmem_list_prepend(args->ip_list, ipv4);
3877 }
3878 if (ipv6 != NULL((void*)0) && !ip_exists(*ipv6, args->ip_list)) {
3879 copy_address_wmem(pinfo->pool, &args->last_ip, ipv6);
3880 wmem_list_prepend(args->ip_list, ipv6);
3881 }
3882 }
3883 }
3884}
3885/*
3886 * 8.23 TMSI
3887 */
3888static void
3889dissect_gtpv2_tmsi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3890{
3891 proto_tree_add_item(tree, hf_gtpv2_tmsi, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
3892 proto_tree_add_item(item, hf_gtpv2_tmsi_bytes, tvb, 0, length, ENC_NA0x00000000);
3893}
3894/*
3895 * 8.24 Global CN-Id
3896 * (TS 23.003)
3897 * 12.3 CN Identifier
3898 *
3899 * A CN node is uniquely identified within a PLMN by its CN Identifier (CN-Id). The CN-Id together with the PLMN
3900 * identifier globally identifies the CN node. The CN-Id together with the PLMN-Id is used as the CN node identifier in
3901 * RANAP signalling over the Iu interface.
3902 * Global CN-Id = PLMN-Id || CN-Id
3903 * The CN-Id is defined by the operator, and set in the nodes via O&M.
3904 * For the syntax description and the use of this identifier in RANAP signalling, see 3GPP TS 25.413 [17].
3905 */
3906
3907static void
3908dissect_gtpv2_g_cn_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3909{
3910 int offset = 0;
3911
3912 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
3913 offset += 3;
3914
3915 /* >CN-ID M INTEGER (0..4095) */
3916 proto_tree_add_item(tree, hf_gtpv2_cn_id, tvb, offset, 2, ENC_NA0x00000000);
3917}
3918/*
3919 * 8.25 S103 PDN Data Forwarding Info (S103PDF)
3920 */
3921static void
3922dissect_gtpv2_s103pdf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3923{
3924 int offset = 0;
3925 uint8_t m, k, i;
3926
3927 /* The HSGW Address and GRE Key identify a GRE Tunnel towards a HSGW over S103 interface for a specific PDN
3928 * connection of the UE. The EPS Bearer IDs specify the EPS Bearers which require data forwarding that belonging to this
3929 * PDN connection. The number of EPS bearer Ids included is specified by the value of EPS Bearer ID Number.
3930 */
3931 /* Octet 5 HSGW Address for forwarding Length = m */
3932 m = tvb_get_uint8(tvb, offset);
3933 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_f_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3934 offset += 1;
3935
3936 /* 6 to (m+5) HSGW Address for forwarding [4..16] */
3937 switch (m) {
3938 case 4:
3939 /* IPv4 */
3940 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv4, tvb, offset, m, ENC_BIG_ENDIAN0x00000000);
3941 offset += 4;
3942 break;
3943 case 16:
3944 /* IPv6 */
3945 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv6, tvb, offset, m, ENC_NA0x00000000);
3946 offset += 16;
3947 break;
3948 default:
3949 /* Error */
3950 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3951 "Wrong length %u, should be 4 or 16", m);
3952 return;
3953 }
3954
3955 /* (m+6)- to (m+9) GRE Key */
3956 proto_tree_add_item(tree, hf_gtpv2_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3957 offset += 4;
3958
3959 /* (m+10) EPS Bearer ID Number = k */
3960 k = tvb_get_uint8(tvb, offset);
3961 proto_tree_add_item(tree, hf_gtpv2_eps_bearer_id_number, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3962 offset += 1;
3963
3964 /* (m+11) to (m+10+k)
3965 * Spare EPS Bearer ID
3966 */
3967 for ( i = 0; i < k; i++ ) {
3968 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
3969 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3970 offset += 1;
3971 }
3972
3973}
3974/*
3975 * 8.26 S1-U Data Forwarding (S1UDF)
3976 */
3977static void
3978dissect_gtpv2_s1udf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
3979{
3980 int offset = 0;
3981 uint8_t m;
3982
3983 /* 5 Spare EPS Bearer ID */
3984 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
3985 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3986 offset += 1;
3987 /* 6 Serving GW Address Length = m */
3988 m = tvb_get_uint8(tvb, offset);
3989 proto_tree_add_item(tree, hf_gtpv2_serving_gw_address_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3990 offset += 1;
3991 /* 7 to (m+6) Serving GW Address [4..16] */
3992 switch (m) {
3993 case 4:
3994 /* IPv4 */
3995 proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv4, tvb, offset, m, ENC_BIG_ENDIAN0x00000000);
3996 offset += 4;
3997 break;
3998 case 16:
3999 /* IPv6 */
4000 proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv6, tvb, offset, m, ENC_NA0x00000000);
4001 offset += 16;
4002 break;
4003 default:
4004 /* Error */
4005 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
4006 "Wrong length %u, should be 4 or 16", m);
4007 return;
4008 }
4009
4010 /* (m+7) to (m+10)
4011 * Serving GW S1-U TEID
4012 */
4013 proto_tree_add_item(tree, hf_gtpv2_sgw_s1u_teid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4014
4015}
4016/*
4017 * 8.27 Delay Value
4018 */
4019
4020static void
4021dissect_gtpv2_delay_value(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4022{
4023 int offset = 0;
4024
4025 proto_tree_add_item(tree, hf_gtpv2_delay_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4026}
4027
4028/*
4029 * 8.28 Bearer Context (grouped IE)
4030 */
4031
4032static void
4033dissect_gtpv2_bearer_ctx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4034{
4035 int offset = 0;
4036 tvbuff_t *new_tvb;
4037 proto_tree *grouped_tree;
4038
4039 proto_item_append_text(item, "[Grouped IE]");
4040 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_bearer_ctx);
4041
4042 new_tvb = tvb_new_subset_length(tvb, offset, length);
4043 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, 0, message_type, args, GTPV2_IE_BEARER_CTX93);
4044}
4045
4046/* 8.29 Charging ID */
4047static void
4048dissect_gtpv2_charging_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4049{
4050 int offset = 0;
4051
4052 proto_tree_add_item(tree, hf_gtpv2_charging_id, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4053}
4054
4055
4056 /* 8.30 Charging Characteristics
4057 * The charging characteristics information element is defined in 3GPP TS 32.251 [8]
4058 * and is a way of informing both the SGW and PGW of the rules for producing charging
4059 * information based on operator configured triggers. For the encoding of this
4060 * information element see 3GPP TS 32.298 [9].
4061 */
4062static void
4063dissect_gtpv2_char_char(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4064{
4065 int offset = 0;
4066
4067 proto_tree_add_item(tree, hf_gtpv2_charging_characteristic, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4068 if (length > 2) {
4069 offset += 2;
4070 /* These octet(s) is/are present only if explicitly specified */
4071 proto_tree_add_item(tree, hf_gtpv2_charging_characteristic_remaining_octets, tvb, offset, length-2, ENC_NA0x00000000);
4072 }
4073
4074}
4075
4076/*
4077 * 8.30 Bearer Flag
4078 */
4079static void
4080dissect_gtpv2_bearer_flag(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4081{
4082
4083 int offset = 0;
4084
4085 /* Octet 5 Spare VB PPC */
4086 proto_tree_add_item(tree, hf_gtpv2_bearer_flag_ppc, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4087 proto_tree_add_item(tree, hf_gtpv2_bearer_flag_vb, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4088
4089}
4090/*
4091 * 8.34 PDN Type
4092 */
4093void
4094dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4095{
4096
4097 int offset = 0;
4098 uint8_t pdn;
4099
4100 if (length != 1) {
4101 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
4102 "Wrong length indicated. Expected 1, got %u", length);
4103 return;
4104 }
4105
4106 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN0x00000000);
4107 pdn = tvb_get_uint8(tvb, offset)& 0x7;
4108 proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4109 proto_item_append_text(item, "%s", val_to_str_ext_const(pdn, &gtpv2_pdn_type_vals_ext, "Unknown"));
4110
4111}
4112
4113/*
4114 * 8.31 Trace Information
4115 */
4116 /* List of NE Types */
4117static int* const trace_ne_types_flags_oct1[] = {
4118 &hf_gtpv2_tra_info_lne_sgw,
4119 &hf_gtpv2_tra_info_lne_mme,
4120 &hf_gtpv2_tra_info_lne_bm_sc,
4121 &hf_gtpv2_tra_info_lne_rnc,
4122 &hf_gtpv2_tra_info_lne_ggsn,
4123 &hf_gtpv2_tra_info_lne_sgsn,
4124 &hf_gtpv2_tra_info_lne_mgw,
4125 &hf_gtpv2_tra_info_lne_msc_s,
4126 NULL((void*)0)
4127};
4128
4129static int* const trace_ne_types_flags_oct2[] = {
4130 &hf_gtpv2_tra_info_tra_info_ng_ran_node,
4131 &hf_gtpv2_tra_info_lne_upf,
4132 &hf_gtpv2_tra_info_lne_pcf,
4133 &hf_gtpv2_tra_info_lne_smf,
4134 &hf_gtpv2_tra_info_lne_amf,
4135 &hf_gtpv2_tra_info_lne_enb,
4136 &hf_gtpv2_tra_info_lne_pdn_gw,
4137 NULL((void*)0)
4138};
4139
4140static void
4141dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4142{
4143 proto_tree *trigg_tree, *msc_server_tree, *mgw_tree, *sgsn_tree, *ggsn_tree;
4144 proto_tree *bm_sc_tree, *sgw_mme_tree, *sgw_tree, *pgw_tree, *ne_types_tree;
4145 proto_tree *interfaces_tree, *imsc_server_tree, *lmgw_tree, *lsgsn_tree, *lggsn_tree, *lrnc_tree;
4146 proto_tree *lbm_sc_tree, *lmme_tree, *lsgw_tree, *lpdn_gw_tree, *lenb_tree;
4147
4148 int offset = 0;
4149#if 0
4150 uint8_t *trace_id = NULL((void*)0);
4151#endif
4152 uint16_t tid;
4153 uint32_t bit_offset;
4154
4155 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
4156 offset += 3;
4157
4158 /* Append Trace ID to main tree */
4159 tid = tvb_get_ntohs(tvb, offset);
4160 proto_item_append_text(item, "Trace ID: %d ", tid);
4161
4162 /* Trace ID */
4163 /*--------------------------------------------------
4164 * trace_id = tvb_format_text(tvb, offset, 2);
4165 * proto_tree_add_string(tree, hf_gtpv2_tra_info, tvb, offset, length, trace_id);
4166 *--------------------------------------------------*/
4167 proto_tree_add_item(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
4168 offset += 3;
4169
4170 /* Triggering Events, put all into a new tree called triggering_tree */
4171 trigg_tree = proto_tree_add_subtree(tree, tvb, offset, 9, ett_gtpv2_tra_info_trigg, NULL((void*)0), "Triggering Events");
4172
4173 /* Create all subtrees */
4174 msc_server_tree = proto_tree_add_subtree(trigg_tree, tvb, offset, 2, ett_gtpv2_tra_info_trigg_msc_server, NULL((void*)0), "MSC Server");
4175
4176 mgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_trigg_mgw, NULL((void*)0), "MGW");
4177
4178 sgsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_trigg_sgsn, NULL((void*)0), "SGSN");
4179
4180 ggsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_trigg_ggsn, NULL((void*)0), "GGSN");
4181
4182 bm_sc_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 6, 1, ett_gtpv2_tra_info_trigg_bm_sc, NULL((void*)0), "BM-SC");
4183
4184 sgw_mme_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 7, 1, ett_gtpv2_tra_info_trigg_sgw_mme, NULL((void*)0), "SGW MME");
4185
4186 sgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_trigg_sgw, NULL((void*)0), "SGW");
4187
4188 pgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_trigg_pgw, NULL((void*)0), "PGW");
4189
4190 /* MSC Server - 2 octets */
4191 static int* const tra_info_msc_flags[] = {
4192 &hf_gtpv2_tra_info_msc_ss,
4193 &hf_gtpv2_tra_info_msc_handovers,
4194 &hf_gtpv2_tra_info_msc_lu_imsi_ad,
4195 &hf_gtpv2_tra_info_msc_momt_sms,
4196 &hf_gtpv2_tra_info_msc_momt_calls,
4197 NULL((void*)0)
4198 };
4199 proto_tree_add_bitmask_list(msc_server_tree, tvb, offset, 1, tra_info_msc_flags, ENC_BIG_ENDIAN0x00000000);
4200 bit_offset = offset << 3;
4201 proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN0x00000000);
4202 offset += 1;
4203 bit_offset = offset << 3;
4204 proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN0x00000000);
4205 offset += 1;
4206
4207 /* MGW - 1 octet */
4208 proto_tree_add_item(mgw_tree, hf_gtpv2_tra_info_mgw_context, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4209 bit_offset = offset << 3;
4210 proto_tree_add_bits_item(mgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4211 offset += 1;
4212 /* SGSN - 2 octets */
4213 static int* const tra_info_sgsn_flags[] = {
4214 &hf_gtpv2_tra_info_sgsn_mbms,
4215 &hf_gtpv2_tra_info_sgsn_rau_gprs_ad,
4216 &hf_gtpv2_tra_info_sgsn_momt_sms,
4217 &hf_gtpv2_tra_info_sgsn_pdp_context,
4218 NULL((void*)0)
4219 };
4220 proto_tree_add_bitmask_list(sgsn_tree, tvb, offset, 1, tra_info_sgsn_flags, ENC_BIG_ENDIAN0x00000000);
4221 bit_offset = offset << 3;
4222 proto_tree_add_bits_item(sgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4223 offset += 1;
4224 proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4225 offset += 1;
4226 /* GGSN - 1 octet */
4227 proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_pdp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4228 proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_mbms, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4229 bit_offset = offset << 3;
4230 proto_tree_add_bits_item(ggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN0x00000000);
4231 offset += 1;
4232 /* BM-SC - 1 octet */
4233 proto_tree_add_item(bm_sc_tree, hf_gtpv2_tra_info_bm_sc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4234 bit_offset = offset << 3;
4235 proto_tree_add_bits_item(bm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4236 offset += 1;
4237 /* MME/SGW - 1 octet */
4238 static int* const tra_info_mme_flags[] = {
4239 &hf_gtpv2_tra_info_mme_sgw_ho,
4240 &hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del,
4241 &hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc,
4242 &hf_gtpv2_tra_info_mme_sgw_iataud,
4243 &hf_gtpv2_tra_info_mme_sgw_sr,
4244 &hf_gtpv2_tra_info_mme_sgw_ss,
4245 NULL((void*)0)
4246 };
4247 proto_tree_add_bitmask_list(sgw_mme_tree, tvb, offset, 1, tra_info_mme_flags, ENC_BIG_ENDIAN0x00000000);
4248 bit_offset = offset << 3;
4249 proto_tree_add_bits_item(sgw_mme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN0x00000000);
4250 offset += 1;
4251 /* PGW/SGW - 1 octet */
4252 static int* const tra_info_sgw_pdn_flags[] = {
4253 &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
4254 &hf_gtpv2_tra_info_sgw_pdn_con_term,
4255 &hf_gtpv2_tra_info_sgw_pdn_con_creat,
4256 NULL((void*)0)
4257 };
4258 proto_tree_add_bitmask_list(sgw_mme_tree, tvb, offset, 1, tra_info_sgw_pdn_flags, ENC_BIG_ENDIAN0x00000000);
4259 bit_offset = (offset << 3) + 4;
4260 proto_tree_add_bits_item(sgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4261
4262 static int* const tra_info_pgw_flags[] = {
4263 &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
4264 &hf_gtpv2_tra_info_pgw_pdn_con_term,
4265 &hf_gtpv2_tra_info_pgw_pdn_con_creat,
4266 NULL((void*)0)
4267 };
4268 proto_tree_add_bitmask_list(pgw_tree, tvb, offset, 1, tra_info_pgw_flags, ENC_BIG_ENDIAN0x00000000);
4269
4270 bit_offset = offset << 3;
4271 proto_tree_add_bits_item(pgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4272 offset += 1;
4273
4274 /* Create NE Types subtree */
4275 ne_types_tree = proto_tree_add_subtree(tree, tvb, offset, 2, ett_gtpv2_tra_info_ne_types, NULL((void*)0), "List of NE Types");
4276
4277 proto_tree_add_bitmask_list(tree, tvb, offset, 1, trace_ne_types_flags_oct1, ENC_BIG_ENDIAN0x00000000);
4278 offset += 1;
4279
4280 proto_tree_add_bitmask_list(tree, tvb, offset, 1, trace_ne_types_flags_oct2, ENC_BIG_ENDIAN0x00000000);
4281 bit_offset = offset << 3;
4282 proto_tree_add_bits_item(ne_types_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4283 offset += 1;
4284
4285 /* Trace Depth Length */
4286 proto_tree_add_item(tree, hf_gtpv2_tra_info_tdl, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4287 offset += 1;
4288
4289 /* Set up subtree interfaces and put all interfaces under it */
4290 interfaces_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_gtpv2_tra_info_interfaces, NULL((void*)0), "List of Interfaces");
4291
4292 /* Create all subtrees */
4293 imsc_server_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset, 2, ett_gtpv2_tra_info_interfaces_imsc_server, NULL((void*)0), "MSC Server");
4294
4295 lmgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_interfaces_lmgw, NULL((void*)0), "MGW");
4296
4297 lsgsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_interfaces_lsgsn, NULL((void*)0), "SGSN");
4298
4299 lggsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_interfaces_lggsn, NULL((void*)0), "GGSN");
4300
4301 lrnc_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 6, 1, ett_gtpv2_tra_info_interfaces_lrnc, NULL((void*)0), "RNC");
4302
4303 lbm_sc_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 7, 1, ett_gtpv2_tra_info_interfaces_lbm_sc, NULL((void*)0), "BM-SC");
4304
4305 lmme_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_interfaces_lmme, NULL((void*)0), "MME");
4306
4307 lsgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 9, 1,ett_gtpv2_tra_info_interfaces_lsgw, NULL((void*)0), "SGW");
4308
4309 lpdn_gw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 10, 1, ett_gtpv2_tra_info_interfaces_lpdn_gw, NULL((void*)0), "PDN GW");
4310
4311 lenb_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 11, 1, ett_gtpv2_tra_info_interfaces_lpdn_lenb, NULL((void*)0), "eNB");
4312
4313 /* MSC Server - 2 octets */
4314 static int* const tra_info_lmsc_flags[] = {
4315 &hf_gtpv2_tra_info_lmsc_cap,
4316 &hf_gtpv2_tra_info_lmsc_map_f,
4317 &hf_gtpv2_tra_info_lmsc_map_e,
4318 &hf_gtpv2_tra_info_lmsc_map_b,
4319 &hf_gtpv2_tra_info_lmsc_map_g,
4320 &hf_gtpv2_tra_info_lmsc_mc,
4321 &hf_gtpv2_tra_info_lmsc_lu,
4322 &hf_gtpv2_tra_info_lmsc_a,
4323 NULL((void*)0)
4324 };
4325 proto_tree_add_bitmask_list(imsc_server_tree, tvb, offset, 1, tra_info_lmsc_flags, ENC_BIG_ENDIAN0x00000000);
4326 offset += 1;
4327 proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_d, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4328 proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_c, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4329 bit_offset = offset << 3;
4330 proto_tree_add_bits_item(imsc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN0x00000000);
4331 offset += 1;
4332 /* MGW - 1 octet */
4333 static int* const tra_info_lmgw_flags[] = {
4334 &hf_gtpv2_tra_info_lmgw_lu_up,
4335 &hf_gtpv2_tra_info_lmgw_nb_up,
4336 &hf_gtpv2_tra_info_lmgw_mc,
4337 NULL((void*)0)
4338 };
4339 proto_tree_add_bitmask_list(lmgw_tree, tvb, offset, 1, tra_info_lmgw_flags, ENC_BIG_ENDIAN0x00000000);
4340 bit_offset = offset << 3;
4341 proto_tree_add_bits_item(lmgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4342 offset += 1;
4343 /* SGSN - 2 octets */
4344 static int* const tra_info_lsgsn_flags[] = {
4345 &hf_gtpv2_tra_info_lsgsn_ge,
4346 &hf_gtpv2_tra_info_lsgsn_gs,
4347 &hf_gtpv2_tra_info_lsgsn_map_gf,
4348 &hf_gtpv2_tra_info_lsgsn_map_gd,
4349 &hf_gtpv2_tra_info_lsgsn_map_gr,
4350 &hf_gtpv2_tra_info_lsgsn_gn,
4351 &hf_gtpv2_tra_info_lsgsn_lu,
4352 &hf_gtpv2_tra_info_lsgsn_gb,
4353 NULL((void*)0)
4354 };
4355 proto_tree_add_bitmask_list(lsgsn_tree, tvb, offset, 1, tra_info_lsgsn_flags, ENC_BIG_ENDIAN0x00000000);
4356 offset += 1;
4357 bit_offset = offset << 3;
4358 proto_tree_add_bits_item(lsgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN0x00000000);
4359 offset += 1;
4360
4361 /* GGSN - 1 octet */
4362 static int* const tra_info_lggsn_flags[] = {
4363 &hf_gtpv2_tra_info_lggsn_gmb,
4364 & hf_gtpv2_tra_info_lggsn_gi,
4365 & hf_gtpv2_tra_info_lggsn_gn,
4366 NULL((void*)0)
4367 };
4368 proto_tree_add_bitmask_list(lggsn_tree, tvb, offset, 1, tra_info_lggsn_flags, ENC_BIG_ENDIAN0x00000000);
4369 bit_offset = offset << 3;
4370 proto_tree_add_bits_item(lggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4371 offset += 1;
4372 /* RNC - 1 octet */
4373 static int* const tra_info_lrnc_flags[] = {
4374 &hf_gtpv2_tra_info_lrnc_uu,
4375 &hf_gtpv2_tra_info_lrnc_lub,
4376 &hf_gtpv2_tra_info_lrnc_lur,
4377 &hf_gtpv2_tra_info_lrnc_lu,
4378 NULL((void*)0)
4379 };
4380 proto_tree_add_bitmask_list(lrnc_tree, tvb, offset, 1, tra_info_lrnc_flags, ENC_BIG_ENDIAN0x00000000);
4381 bit_offset = offset << 3;
4382 proto_tree_add_bits_item(lrnc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4383 offset += 1;
4384 /* BM_SC - 1 octet */
4385 proto_tree_add_item(lbm_sc_tree, hf_gtpv2_tra_info_lbm_sc_gmb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4386 bit_offset = offset << 3;
4387 proto_tree_add_bits_item(lbm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4388 offset += 1;
4389 /* MME - 1 octet */
4390 static int* const tra_info_lmme_flags[] = {
4391 &hf_gtpv2_tra_info_lmme_s11,
4392 &hf_gtpv2_tra_info_lmme_s10,
4393 &hf_gtpv2_tra_info_lmme_s6a,
4394 &hf_gtpv2_tra_info_lmme_s3,
4395 &hf_gtpv2_tra_info_lmme_s1_mme,
4396 NULL((void*)0)
4397 };
4398 proto_tree_add_bitmask_list(lmme_tree, tvb, offset, 1, tra_info_lmme_flags, ENC_BIG_ENDIAN0x00000000);
4399 bit_offset = offset << 3;
4400 proto_tree_add_bits_item(lmme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN0x00000000);
4401 offset += 1;
4402 /* SGW - 1 octet */
4403 static int* const tra_info_lsgw_flags[] = {
4404 &hf_gtpv2_tra_info_lsgw_s11,
4405 &hf_gtpv2_tra_info_lsgw_s8b,
4406 &hf_gtpv2_tra_info_lsgw_s5,
4407 &hf_gtpv2_tra_info_lsgw_s4,
4408 NULL((void*)0)
4409 };
4410 proto_tree_add_bitmask_list(lsgw_tree, tvb, offset, 1, tra_info_lsgw_flags, ENC_BIG_ENDIAN0x00000000);
4411 bit_offset = offset << 3;
4412 proto_tree_add_bits_item(lsgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4413 offset += 1;
4414 /* PDN GW - 1 octet */
4415 static int* const tra_info_lpdn_gw_flags[] = {
4416 &hf_gtpv2_tra_info_lpdn_gw_sgi,
4417 &hf_gtpv2_tra_info_lpdn_gw_s8b,
4418 &hf_gtpv2_tra_info_lpdn_gw_gx,
4419 &hf_gtpv2_tra_info_lpdn_gw_s6c,
4420 &hf_gtpv2_tra_info_lpdn_gw_s5,
4421 &hf_gtpv2_tra_info_lpdn_gw_s2c,
4422 &hf_gtpv2_tra_info_lpdn_gw_s2b,
4423 &hf_gtpv2_tra_info_lpdn_gw_s2a,
4424 NULL((void*)0)
4425 };
4426 proto_tree_add_bitmask_list(lpdn_gw_tree, tvb, offset, 1, tra_info_lpdn_gw_flags, ENC_BIG_ENDIAN0x00000000);
4427 offset += 1;
4428 /* eNB - 1 octet */
4429 static int* const tra_info_lenb_flags[] = {
4430 &hf_gtpv2_tra_info_lenb_uu,
4431 &hf_gtpv2_tra_info_lenb_x2,
4432 &hf_gtpv2_tra_info_lenb_s1_mme,
4433 NULL((void*)0)
4434 };
4435 proto_tree_add_bitmask_list(lenb_tree, tvb, offset, 1, tra_info_lenb_flags, ENC_BIG_ENDIAN0x00000000);
4436 bit_offset = offset << 3;
4437 proto_tree_add_bits_item(lenb_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4438
4439 /*--------------------------------------------------
4440 * offset += 1;
4441 *--------------------------------------------------*/
4442
4443 /* IP Address of Trace Collection Entity */
4444 while ( (offset + 4) <= length ) {
4445 offset += 1;
4446 proto_tree_add_item(tree, hf_gtpv2_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4447 offset += 3;
4448 }
4449}
4450
4451/*
4452 * 8.33 Paging Cause
4453 * 8.33 Void (TS 129 274 V9.4.0 (2010-10))
4454 */
4455
4456/* 8.35 Procedure Transaction ID (PTI) */
4457static void
4458dissect_gtpv2_pti(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4459{
4460 proto_tree_add_item(tree, hf_gtpv2_pti, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
4461}
4462/*
4463 * 8.36 DRX Parameter
4464 */
4465static void
4466dissect_gtpv2_drx_param(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4467{
4468 int offset = 0;
4469
4470 /* 36.413 : 9.2.1.17 Paging Cause, void */
4471 proto_tree_add_item(tree, hf_gtpv2_drx_parameter, tvb, offset, length, ENC_NA0x00000000);
4472}
4473
4474/*
4475 * 8.37 UE Network Capability
4476 * UE Network Capability is coded as depicted in Figure 8.37-1. Actual coding of the UE Network Capability field is
4477 * defined in 3GPP TS 24.301
4478 */
4479static void
4480dissect_gtpv2_ue_net_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4481{
4482 de_emm_ue_net_cap(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
4483
4484}
4485/*
4486 * 8.38 MM Context
4487 */
4488static const value_string gtpv2_mm_context_security_mode[] = {
4489 {0, "GSM Key and Triplets"},
4490 {1, "UMTS Key, Used Cipher and Quintuplets"},
4491 {2, "GSM Key, Used Cipher and Quintuplets"},
4492 {3, "UMTS Key and Quintuplets"},
4493 {4, "EPS Security Context, Quadruplets and Quintuplets" },
4494 {5, "UMTS Key, Quadruplets and Quintuplets"},
4495 {0, NULL((void*)0) }
4496};
4497
4498static const true_false_string gtpv2_nhi_vals = {
4499 "NH (Next Hop) and NCC (Next Hop Chaining Count) are both present",
4500 "NH (Next Hop) and NCC (Next Hop Chaining Count) not present",
4501};
4502
4503/* Table 8.38-2: Used NAS Cipher Values */
4504
4505static const value_string gtpv2_mm_context_unc_vals[] = {
4506 {0, "No ciphering"},
4507 {1, "128-EEA1"},
4508 {2, "128-EEA2"},
4509 {3, "128-EEA3"},
4510 {4, "EEA4" },
4511 {5, "EEA5"},
4512 {6, "EEA6"},
4513 {7, "EEA7"},
4514 {0, NULL((void*)0)}
4515};
4516
4517/* Table 8.38-3: Used Cipher Values */
4518static const value_string gtpv2_mm_context_used_cipher_vals[] = {
4519 {0, "No ciphering"},
4520 {1, "GEA/1"},
4521 {2, "GEA/2"},
4522 {3, "GEA/3"},
4523 {4, "GEA/4" },
4524 {5, "GEA/5"},
4525 {6, "GEA/6"},
4526 {7, "GEA/7"},
4527 {0, NULL((void*)0)}
4528};
4529
4530/* Table 8.38-4: Used NAS integrity protection algorithm Values */
4531static const value_string gtpv2_mm_context_unipa_vals[] = {
4532 {0, "No integrity protection"},
4533 {1, "128-EIA1"},
4534 {2, "128-EIA2"},
4535 {3, "128-EIA3"},
4536 {4, "EIA4" },
4537 {5, "EIA5"},
4538 {6, "EIA6"},
4539 {7, "EIA7"},
4540 {0, NULL((void*)0)}
4541};
4542
4543/* Table 8.38-6: EPS NAS Security Context Type Values */
4544static const value_string gtpv2_mm_context_eps_nas_security_context_type_vals[] = {
4545 {0, "Reporting EPS NAS Security Context Type is not supported"},
4546 {1, "Native EPS NAS Security Context Type"},
4547 {2, "Mapped EPS NAS Security Context Type"},
4548 {0, NULL((void*)0)}
4549};
4550
4551/* Helper functions */
4552
4553/* Figure 8.38-7: Authentication Triplet */
4554static int
4555dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, int offset, uint8_t num_triplet)
4556{
4557 proto_tree *auth_tri_tree;
4558 int i;
4559
4560 for (i = 0; i < num_triplet; i++) {
4561 auth_tri_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4562 ett_gtpv2_mm_context_auth_tri, NULL((void*)0), "Authentication Triplet %u", i);
4563 /*
4564 * Figure 8.38-8: Authentication Quintuplet
4565 * 1 to 16 RAND
4566 * 17 to 20 SRES
4567 * 21 to 28 Kc
4568 */
4569 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4570 offset += 16;
4571 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_sres, tvb, offset, 4, ENC_NA0x00000000);
4572 offset += 4;
4573 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4574 offset += 8;
4575
4576 }
4577
4578 return offset;
4579}
4580
4581static int
4582dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int offset, uint8_t nr_qui)
4583{
4584 proto_tree *auth_qui_tree;
4585 int i;
4586 uint32_t tmp;
4587
4588 for (i = 0; i < nr_qui; i++) {
4589 auth_qui_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4590 ett_gtpv2_mm_context_auth_qui, NULL((void*)0), "Authentication Quintuplet %u", i);
4591 /*
4592 * Figure 8.38-8: Authentication Quintuplet
4593 * 1 to 16 RAND
4594 * 17 XRES Length
4595 * 18 to m XRES
4596 * (m+1) to (m+16) CK
4597 * (m+17) to (m+32) IK
4598 * m+33 AUTN Length
4599 * (m+34) to n AUTN
4600 */
4601 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4602 offset += 16;
4603 proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4604 offset += 1;
4605 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA0x00000000);
4606 offset += tmp;
4607 proto_tree_add_item(auth_qui_tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
4608 offset += 16;
4609 proto_tree_add_item(auth_qui_tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
4610 offset += 16;
4611 proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4612 offset += 1;
4613 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA0x00000000);
4614 offset += tmp;
4615 }
4616
4617 return offset;
4618
4619}
4620
4621static int
4622dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, int offset, uint8_t nr_qui)
4623{
4624 proto_tree *auth_qua_tree;
4625 uint32_t tmp;
4626 int i;
4627
4628 for (i = 0; i < nr_qui; i++) {
4629 auth_qua_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4630 ett_gtpv2_mm_context_auth_qua, NULL((void*)0), "Authentication Quadruplet %u",i+1);
4631
4632 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4633 offset += 16;
4634
4635 proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4636 offset++;
4637
4638 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA0x00000000);
4639 offset += tmp;
4640
4641 proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4642 offset++;
4643
4644 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA0x00000000);
4645 offset += tmp;
4646
4647 proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_NA0x00000000);
4648
4649 offset += 32;
4650 }
4651 return offset;
4652}
4653
4654static const value_string gtpv2_mm_context_higher_br_16mb_flg_vals[] = {
4655 {0, "Not allowed"},
4656 {1, "Allowed"},
4657 {0, NULL((void*)0)}
4658};
4659
4660static int
4661dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, uint8_t samb_ri, uint8_t uamb_ri)
4662{
4663 proto_tree *net_cap_tree, *msnt_cap_tree;
4664 uint8_t ue_net_cap_len, ms_net_cap_len, mei_len;
4665
4666 /*
4667 * If SAMBRI (Subscribed UE AMBR Indicator), bit 1 of octet 6, is set to "1",
4668 * then the Uplink/downlink Subscribed UE AMBR parameter field is present,
4669 */
4670 if (samb_ri) {
4671 /* j to (j+3) Uplink Subscribed UE AMBR */
4672 proto_tree_add_item(tree, hf_gtpv2_uplink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4673
4674 offset += 4;
4675 /* (j+4) to (j+7) Downlink Subscribed UE AMBR */
4676 proto_tree_add_item(tree, hf_gtpv2_downlink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4677
4678 offset += 4;
4679 }
4680 /*
4681 * If UAMBRI (Used UE AMBR Indicator), bit 2 of octet 6, is set to "1",
4682 * then the Uplink/downlink Used UE AMBR parameter field is present
4683 */
4684 if (uamb_ri) {
4685 /* i to (i+3) Uplink Used UE AMBR */
4686 proto_tree_add_item(tree, hf_gtpv2_uplink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4687
4688 offset += 4;
4689 /* (i+4) to (i+7) Downlink Used UE AMBR */
4690 proto_tree_add_item(tree, hf_gtpv2_downlink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4691
4692 offset += 4;
4693 }
4694 /* q Length of UE Network Capability */
4695 ue_net_cap_len = tvb_get_uint8(tvb, offset);
4696 proto_tree_add_item(tree, hf_gtpv2_mm_context_ue_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4697 offset += 1;
4698 /* (q+1) to k UE Network Capability */
4699 if (ue_net_cap_len) {
4700 /* The UE Network Capability coding is specified in clause 9.9.3.34 of 3GPP TS 24.301 [23].
4701 * If Length of UE Network Capability is zero, then the UE Network Capability parameter
4702 * shall not be present.
4703 */
4704 net_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ue_net_cap_len,
4705 ett_gtpv2_mm_context_net_cap, NULL((void*)0), "UE Network Capability");
4706 offset += de_emm_ue_net_cap(tvb, net_cap_tree, pinfo, offset, ue_net_cap_len, NULL((void*)0), 0);
4707 }
4708 /* k+1 Length of MS Network Capability */
4709 ms_net_cap_len = tvb_get_uint8(tvb, offset);
4710 proto_tree_add_item(tree, hf_gtpv2_mm_context_ms_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4711 offset += 1;
4712 /* (k+2) to m MS Network Capability
4713 * The MS Network Capability coding is specified in clause 10.5.5.12 of 3GPP TS 24.008 [5].
4714 * If Length of MS Network Capability is zero, then the MS Network Capability parameter shall not be present.
4715 */
4716 if (ms_net_cap_len) {
4717 msnt_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ms_net_cap_len,
4718 ett_gtpv2_ms_network_capability, NULL((void*)0), "MS network capability");
4719 offset += de_gmm_ms_net_cap(tvb, msnt_cap_tree, pinfo, offset, ms_net_cap_len, NULL((void*)0), 0);
4720 }
4721 /* m+1 Length of Mobile Equipment Identity (MEI) */
4722 mei_len = tvb_get_uint8(tvb, offset);
4723 proto_tree_add_item(tree, hf_gtpv2_mm_context_mei_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4724 offset += 1;
4725 /* (m+2) to r Mobile Equipment Identity (MEI) */
4726 if (mei_len) {
4727 proto_tree_add_item(tree, hf_gtpv2_mei, tvb, offset, mei_len, ENC_BCD_DIGITS_0_90x00000044|ENC_LITTLE_ENDIAN0x80000000);
4728 offset += mei_len;
4729 }
4730 return offset;
4731}
4732
4733static int
4734dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, int offset)
4735{
4736 proto_tree *accrstdata_tree;
4737
4738 accrstdata_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtpv2_access_rest_data, NULL((void*)0), "Access restriction data");
4739 /* Spare HNNA ENA INA GANA GENA UNA */
4740 proto_tree_add_bits_item(accrstdata_tree, hf_gtpv2_spare_bits, tvb, (offset << 3), 1, ENC_BIG_ENDIAN0x00000000);
4741 proto_tree_add_item(accrstdata_tree, hf_gtpv2_hbna, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4742 proto_tree_add_item(accrstdata_tree, hf_gtpv2_hnna, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4743 proto_tree_add_item(accrstdata_tree, hf_gtpv2_ena, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4744 proto_tree_add_item(accrstdata_tree, hf_gtpv2_ina, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4745 proto_tree_add_item(accrstdata_tree, hf_gtpv2_gana, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4746 proto_tree_add_item(accrstdata_tree, hf_gtpv2_gena, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4747 proto_tree_add_item(accrstdata_tree, hf_gtpv2_una, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4748 offset += 1;
4749
4750 return offset;
4751}
4752
4753/* Type = 103 (decimal)
4754 * Figure 8.38-1: GSM Key and Triplets
4755 */
4756static void
4757dissect_gtpv2_mm_context_gsm_t(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4758{
4759 proto_tree *flag_tree;
4760 int offset;
4761 uint8_t oct, drxi, num_triplet, uamb_ri, samb_ri;
4762
4763 offset = 0;
4764 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4765
4766 /* Octet 5 */
4767 /* Security Mode | Spare | DRXI | CKSN */
4768 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4769 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4770 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 1, ENC_BIG_ENDIAN0x00000000);
4771 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4772 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4773 offset += 1;
4774 /* Octet 6 */
4775 /* Number of Triplet | Spare | UAMB RI | SAMB RI */
4776 oct = tvb_get_uint8(tvb, offset);
4777 num_triplet = oct >> 5;
4778 uamb_ri = (oct & 0x02) >> 1;
4779 samb_ri = oct & 0x01;
4780
4781 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_tri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4782 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4783 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4784 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4785 offset += 1;
4786
4787 /* Octet 7 Spare Used Cipher */
4788 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4789 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4790 offset += 1;
4791
4792 /* 8 to 15 Kc */
4793 proto_tree_add_item(tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4794 offset += 8;
4795
4796 /* 16 to h Authentication Triplet [0..4] */
4797 if (num_triplet) {
4798 dissect_gtpv2_authentication_triplets(tvb, tree, offset, num_triplet);
4799 }
4800
4801 /*
4802 * (h+1) to (h+2) DRX parameter
4803 */
4804 if (drxi) {
4805 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4806 offset += 2;
4807 }
4808
4809 /* Dissect octet j to r */
4810 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4811
4812 proto_tree_add_expert_format(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
4813}
4814
4815/* Type = 104 (decimal)
4816 * Figure 8.38-2: UMTS Key, Used Cipher and Quintuplets
4817 */
4818static void
4819dissect_gtpv2_mm_context_utms_cq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4820{
4821 proto_tree *flag_tree;
4822 int offset;
4823 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
4824
4825 offset = 0;
4826 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4827
4828 /* Octet 5 */
4829 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4830 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4831 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
4832 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4833 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4834 offset += 1;
4835 /* Octet 6 */
4836 oct = tvb_get_uint8(tvb, offset);
4837 nr_qui = oct >> 5;
4838 uamb_ri = (oct & 0x02) >> 1;
4839 samb_ri = oct & 0x01;
4840 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4841 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4842 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4843 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4844 offset += 1;
4845 /* Octet 7 Spare Used Cipher */
4846 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4847 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4848 offset += 1;
4849
4850 /* Octet 8 to 23 CK */
4851 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
4852 offset += 16;
4853 /* Octet 24 to 39 IK */
4854 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
4855 offset += 16;
4856
4857 /*
4858 * 40 to h Authentication Quintuplet [0..4]
4859 */
4860 if (nr_qui) {
4861 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
4862 }
4863
4864 /*
4865 * (h+1) to (h+2) DRX parameter
4866 */
4867 if (drxi) {
4868 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4869 offset += 2;
4870 }
4871
4872
4873 /* Dissect octet j to r */
4874 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4875
4876 /* r+1 Spare HNNA ENA INA GANA GENA UNA
4877 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
4878 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
4879 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
4880 */
4881 if (offset < (int)length) {
4882 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4883 } else {
4884 return;
4885 }
4886 if (offset == (int)length) {
4887 return;
4888 }
4889
4890 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
4891 vdp_len = tvb_get_uint8(tvb, offset);
4892 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4893 offset += 1;
4894 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
4895 if (vdp_len) {
4896 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
4897 offset += vdp_len;
4898 }
4899
4900 /* s+1 Length of Higher bitrates than 16 Mbps flag */
4901 if (offset == (int)length) {
4902 hbr_len = tvb_get_uint8(tvb, offset);
4903 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4904 offset += 1;
4905 /* s+2 Higher bitrates than 16 Mbps flag */
4906 if (hbr_len) {
4907 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4908 offset += hbr_len;
4909 }
4910 } else {
4911 return;
4912 }
4913
4914 proto_tree_add_expert_format(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
4915
4916}
4917
4918/* Type = 105 (decimal)
4919 * Figure 8.38-3: GSM Key, Used Cipher and Quintuplets
4920 */
4921static void
4922dissect_gtpv2_mm_context_gsm_cq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
4923{
4924 proto_tree *flag_tree;
4925 int offset;
4926 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
4927
4928 offset = 0;
4929 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4930
4931 /* Octet 5 */
4932 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4933 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4934 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
4935 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4936 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4937 offset += 1;
4938 /* Octet 6 */
4939 oct = tvb_get_uint8(tvb, offset);
4940 nr_qui = oct >> 5;
4941 uamb_ri = (oct & 0x02) >> 1;
4942 samb_ri = oct & 0x01;
4943 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4944 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4945 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4946 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4947 offset += 1;
4948 /* Octet 7 Spare Used Cipher */
4949 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4950 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4951 offset += 1;
4952 /* 8 to 15 Kc */
4953 proto_tree_add_item(tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4954 offset += 8;
4955
4956 /*
4957 * 40 to h Authentication Quintuplet [0..4]
4958 */
4959 if (nr_qui) {
4960 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
4961 }
4962
4963 /*
4964 * (h+1) to (h+2) DRX parameter
4965 */
4966 if (drxi) {
4967 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4968 offset += 2;
4969 }
4970
4971
4972 /* Dissect octet j to r */
4973 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4974
4975 /* r+1 Spare HNNA ENA INA GANA GENA UNA
4976 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
4977 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
4978 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
4979 */
4980 if (offset < (int)length) {
4981 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4982 } else {
4983 return;
4984 }
4985 if (offset == (int)length) {
4986 return;
4987 }
4988
4989 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
4990 vdp_len = tvb_get_uint8(tvb, offset);
4991 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4992 offset += 1;
4993 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
4994 if (vdp_len) {
4995 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
4996 offset += vdp_len;
4997 }
4998
4999 /* s+1 Length of Higher bitrates than 16 Mbps flag */
5000 if (offset < (int)length) {
5001 hbr_len = tvb_get_uint8(tvb, offset);
5002 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5003 offset += 1;
5004 /* s+2 Higher bitrates than 16 Mbps flag */
5005 if (hbr_len) {
5006 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5007 offset += hbr_len;
5008 }
5009 } else {
5010 return;
5011 }
5012
5013 proto_tree_add_expert_format(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5014
5015}
5016
5017/* Type = 106 (decimal)
5018 * Figure 8.38-4: UMTS Key and Quintuplets
5019 */
5020static void
5021dissect_gtpv2_mm_context_utms_q(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5022{
5023 proto_tree *flag_tree;
5024 int offset;
5025 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len, ear_len;
5026
5027 offset = 0;
5028 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5029
5030 /* Octet 5 */
5031 /* Security Mode Spare DRXI KSI */
5032 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5033 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
5034 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
5035 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5036 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5037 offset += 1;
5038 /* Octet 6 */
5039 /* Number of Quintuplets Spare UAMB RI SAMB RI */
5040 oct = tvb_get_uint8(tvb, offset);
5041 nr_qui = oct >> 5;
5042 uamb_ri = (oct & 0x02) >> 1;
5043 samb_ri = oct & 0x01;
5044
5045 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5046 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
5047 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5048 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
5049 offset += 1;
5050 /* Octet 7 Spare */
5051 proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5052 offset += 1;
5053 /* Octet 8 to 23 CK */
5054 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
5055 offset += 16;
5056 /* Octet 24 to 39 IK */
5057 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
5058 offset += 16;
5059
5060 /*
5061 * 40 to h Authentication Quintuplet [0..4]
5062 */
5063 if (nr_qui) {
5064 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
5065 }
5066
5067 /*
5068 * (h+1) to (h+2) DRX parameter
5069 */
5070 if (drxi) {
5071 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5072 offset += 2;
5073 }
5074
5075
5076 /* Dissect octet j to r */
5077 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5078
5079 /* r+1 Spare HNNA ENA INA GANA GENA UNA
5080 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
5081 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
5082 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
5083 */
5084 if (offset < (int)length) {
5085 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5086 } else {
5087 return;
5088 }
5089 if (offset == (int)length) {
5090 return;
5091 }
5092
5093 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
5094 vdp_len = tvb_get_uint8(tvb, offset);
5095 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5096 offset += 1;
5097 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
5098 if (vdp_len) {
5099 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
5100 offset += vdp_len;
5101 }
5102
5103 /* s+1 Length of Higher bitrates than 16 Mbps flag */
5104 if (offset < (int)length) {
5105 hbr_len = tvb_get_uint8(tvb, offset);
5106 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5107 offset += 1;
5108 /* s+2 Higher bitrates than 16 Mbps flag */
5109 if (hbr_len) {
5110 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5111 offset += hbr_len;
5112 }
5113 } else {
5114 return;
5115 }
5116
5117 /* s+3 IOV_updates counter */
5118 if (offset < (int)length) {
5119 proto_tree_add_item(tree, hf_gtpv2_mm_context_iov_updates_counter, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5120 offset += 1;
5121 } else {
5122 return;
5123 }
5124 /* s+4 Length of Extended Access Restriction Data */
5125 if (offset < (int)length) {
5126 ear_len = tvb_get_uint8(tvb, offset);
5127 proto_tree_add_item(tree, hf_gtpv2_mm_context_ear_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5128 offset += 1;
5129 static int * const ear_flags[] = {
5130 &hf_gtpv2_mm_context_nrsrna,
5131 NULL((void*)0)
5132 };
5133 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ear_flags, ENC_BIG_ENDIAN0x00000000);
5134 offset += 1;
5135 if (ear_len > 1) {
5136 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5137 offset += ear_len - 1;
5138 }
5139 } else {
5140 return;
5141 }
5142
5143 if (offset == (int)length) {
5144 return;
5145 }
5146 /* ts+1) to (n+4) These octet(s) is/are present only if explicitly specified */
5147 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5148
5149}
5150
5151/* 8.38 MM Context
5152 * Type = 107 (decimal)
5153 * Figure 8.38-5: EPS Security Context and Quadruplets
5154 */
5155static void
5156dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5157{
5158 proto_item *qua_item, *qui_item;
5159 proto_tree *flag_tree, *qua_tree, *qui_tree, *sc_tree;
5160 int offset;
5161 uint8_t tmp, nhi, drxi, nr_qua, nr_qui, uamb_ri, osci, samb_ri, vdp_len;
5162 uint32_t dword, paging_len, ue_add_sec_cap_len, ex_access_res_data_len, ue_nr_sec_cap_len, apn_rte_ctrl_sts_len, ie_len;
5163
5164 offset = 0;
5165
5166 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5167
5168 /* Octet 5
5169 * Bits
5170 * 8 7 6 5 4 3 2 1
5171 * Security Mode | NHI | DRXI | KSIASME
5172 */
5173 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5174 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nhi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5175 /* If NHI (Next Hop Indicator), bit 5 of octet 5, is set to "1",
5176 * then the optional parameters NH (Next Hop) and NCC (Next
5177 * Hop Chaining Count) are both present, otherwise their octets are not present.
5178 */
5179 tmp = tvb_get_uint8(tvb, offset);
5180 nhi = (tmp & 0x10) >> 4;
5181 drxi = (tmp & 0x08) >> 3;
5182 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5183 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5184 offset += 1;
5185
5186 /* Octet 6
5187 * Bits
5188 * 8 7 6 5 4 3 2 1
5189 * Number of | Number of | UAMB | OSCI
5190 * Quintuplets | Quadruplet | RI |
5191 */
5192 tmp = tvb_get_uint8(tvb, offset);
5193 nr_qui = (tmp & 0xe0) >> 5;
5194 nr_qua = tmp & 0x1c;
5195 nr_qua >>= 2;
5196 uamb_ri = (tmp & 0x2) >> 1;
5197 osci = tmp & 1;
5198
5199 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5200 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5201 /* UAMB RI */
5202 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5203 /* OSCI */
5204 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_osci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5205 offset += 1;
5206
5207 /* Octet 7 SAMB RI Used NAS integrity protection algorithm Used NAS Cipher*/
5208 /* SAMB RI */
5209 samb_ri = tvb_get_uint8(tvb, offset) >> 7;
5210 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, offset << 3, 1, ENC_BIG_ENDIAN0x00000000);
5211 /* Used NAS integrity protection algorithm */
5212 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unipa, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5213 /* Used NAS Cipher */
5214 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5215 offset += 1;
5216
5217 /* Octet 8-10 NAS Downlink Count*/
5218 proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_dl_cnt, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5219 offset += 3;
5220
5221 /* Octet 11-13 NAS Uplink Count */
5222 proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_ul_cnt, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5223 offset += 3;
5224
5225 /* Octet 14-45 */
5226 proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_NA0x00000000);
5227 offset += 32;
5228
5229 qua_item = proto_tree_add_uint(tree, hf_gtpv2_authentication_quadruplets, tvb, offset, 0, nr_qua);
5230 if ( nr_qua ){
5231 qua_tree = proto_item_add_subtree(qua_item, ett_gtpv2_qua);
5232 offset = dissect_gtpv2_authentication_quadruplets(tvb, qua_tree, offset, nr_qua);
5233 }else {
5234 proto_item_set_generated(qua_item);
5235 }
5236
5237 qui_item = proto_tree_add_uint(tree, hf_gtpv2_authentication_quintuplets, tvb, offset, 0, nr_qui);
5238 if (nr_qui) {
5239 qui_tree = proto_item_add_subtree(qui_item, ett_gtpv2_qui);
5240 offset = dissect_gtpv2_authentication_quintuplets(tvb, qui_tree, offset, nr_qui);
5241 }else{
5242 proto_item_set_generated(qui_item);
5243 }
5244
5245 /* (h+1) to (h+2) DRX parameter */
5246 if (drxi) {
5247 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5248 offset += 2;
5249 }
5250
5251 /* Octet p to p+31 & Octet p+32 */
5252 if ( nhi )
5253 {
5254 proto_tree_add_item(tree, hf_gtpv2_mm_context_nh, tvb, offset, 32, ENC_NA0x00000000);
5255 offset += 32;
5256
5257 proto_tree_add_item(tree, hf_gtpv2_mm_context_ncc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5258 offset += 1;
5259 }
5260
5261
5262 /* Dissect octet j to r */
5263 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5264
5265 /* r+1 Spare HBNA HNNA ENA INA GANA GENA UNA */
5266 if (offset < (int)length) {
5267 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5268 } else {
5269 return;
5270 }
5271
5272 if (offset == (int)length) {
5273 return;
5274 }
5275
5276 /* the fields for the Old EPS Security Context (i.e. octets from s to s+64)
5277 * may be present only in S10 Forward Relocation Request message according to
5278 * the Rules on Concurrent Running of Security Procedures, which are specified in 3GPP TS 33.401 [12].
5279 * The octets for Old EPS Security Context shall be present if the OSCI (Old Security Context Indicator),
5280 * bit 1 of octet 6) is set to "1"; otherwise they shall not be present.
5281 */
5282 if (osci == 1) {
5283 /* s */
5284 /* If NHI_old (Next Hop Indicator for old EPS Security Context), bit 1 of octet s, is set to "1",
5285 * then the parameters old NH (Next Hop) and old NCC (Next Hop Chaining Count) shall be present;
5286 * otherwise the octets for old NH parameter shall not be present and the value of old NCC parameter
5287 * shall be ignored by the receiver
5288 */
5289 /* NHI_old Spare old KSIASME old NCC*/
5290 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_contex_nhi_old, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &dword);
5291 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_ksiasme, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5292 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_ncc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5293 offset++;
5294 /* (s+1) to (s+32) old KASME */
5295 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_kasme, tvb, offset, 32, ENC_NA0x00000000);
5296 offset += 32;
5297 /* (s+33) to (s+64) old NH */
5298 if (dword) {
5299 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_nh, tvb, offset, 32, ENC_NA0x00000000);
5300 offset += 32;
5301 }
5302 }
5303
5304 if (offset == (int)length) {
5305 return;
5306 }
5307
5308 /* w Length of Voice Domain Preference and UE's Usage Setting */
5309 vdp_len = tvb_get_uint8(tvb, offset);
5310 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5311 offset += 1;
5312 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
5313 if (vdp_len) {
5314 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
5315 offset += vdp_len;
5316 }
5317
5318 if (offset == (int)length) {
5319 return;
5320 }
5321
5322 /* (t+1) to (t+2) Length of UE Radio Capability for Paging information*/
5323 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_paging_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &paging_len);
5324 offset += 2;
5325
5326 if (paging_len > 0) {
5327 proto_tree_add_item(tree, hf_gtpv2_ue_radio_capability_for_paging_information, tvb, offset, paging_len, ENC_NA0x00000000);
5328 offset +=paging_len;
5329 }
5330
5331 if (offset == (int)length) {
5332 return;
5333 }
5334
5335 /*(u+1) Length of Extended Access Restriction Data */
5336 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_ex_access_res_data_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ex_access_res_data_len);
5337 offset += 1;
5338
5339 /*(u+2) to v
5340 *8 7 6 5 4 3 2 1
5341 * spare | USSRNA | NRSRNA
5342 */
5343 if(ex_access_res_data_len > 0){
5344 static int* const ear_flags[] = {
5345 &hf_gtpv2_spare_b7_b5,
5346 &hf_gtpv2_mm_context_nruna,
5347 &hf_gtpv2_mm_context_nrusrna,
5348 &hf_gtpv2_mm_context_nrna,
5349 &hf_gtpv2_mm_context_ussrna,
5350 &hf_gtpv2_mm_context_nrsrna,
5351 NULL((void*)0)
5352 };
5353 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ear_flags, ENC_BIG_ENDIAN0x00000000);
5354
5355 offset += 1;
5356 if (ex_access_res_data_len > 1) {
5357 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, ex_access_res_data_len - 1, "The rest of the IE not dissected yet");
5358 offset += ex_access_res_data_len - 1;
5359 }
5360 }
5361
5362 if (offset == (int)length) {
5363 return;
5364 }
5365
5366 /*
5367 * The UE additional security capability coding is specified in clause 9.9.3.53 of 3GPP TS 24.301 [23].
5368 * If Length of UE additional security capability is zero, then the field UE additional security capability in octets "(v+2) to x" shall not be present.
5369 */
5370 /*(v+1) Length of UE additional security capability*/
5371 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_ue_add_sec_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ue_add_sec_cap_len);
5372 offset += 1;
5373
5374 /*(v+2) to x UE additional security capability*/
5375 if(ue_add_sec_cap_len > 0){
5376 sc_tree = proto_tree_add_subtree(tree, tvb, offset, ue_add_sec_cap_len, ett_gtpv2_mm_context_sc, NULL((void*)0), "UE additional Security Capability");
5377 offset += de_emm_ue_add_sec_cap(tvb, sc_tree, NULL((void*)0), offset, ue_add_sec_cap_len, NULL((void*)0), 0);
5378 }
5379
5380 if (offset == (int)length) {
5381 return;
5382 }
5383
5384 /* x+1 Length of UE NR security capability */
5385 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_ue_nr_sec_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ue_nr_sec_cap_len);
5386 offset += 1;
5387 /* The UE NR security capability coding is specified in clause 9.8.3.57 of 3GPP TS 24.501.
5388 * If Length of UE NR security capability is zero, then the field UE NR security capability in octets
5389 "(x+2) to y" shall not be present.
5390 */
5391 if (ue_nr_sec_cap_len) {
5392 /* (x+2) to y UE NR security capability */
5393 /* The UE NR security capability coding is specified in clause 9.8.3.57 of 3GPP TS 24.501 */
5394 sc_tree = proto_tree_add_subtree(tree, tvb, offset, ue_nr_sec_cap_len, ett_gtpv2_ue_nr_sec_cap_len, NULL((void*)0), "UE NR security capability");
5395 proto_tree_add_expert_format(sc_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, ue_nr_sec_cap_len, "The rest of the IE not dissected yet");
5396 offset += ue_nr_sec_cap_len;
5397 }
5398
5399 if (offset == (int)length) {
5400 return;
5401 }
5402
5403 /* (y+1) to (y+2) Length of APN Rate Control Statuses */
5404 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_apn_rte_ctrl_sts_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &apn_rte_ctrl_sts_len);
5405 offset += 2;
5406 if (apn_rte_ctrl_sts_len) {
5407 /* (y+3) to l APN Rate Control Status [1..z] */
5408 sc_tree = proto_tree_add_subtree(tree, tvb, offset, apn_rte_ctrl_sts_len, ett_gtpv2_apn_rte_ctrl_sts_len, NULL((void*)0), "APN Rate Control Status");
5409 proto_tree_add_expert_format(sc_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, apn_rte_ctrl_sts_len, "The rest of the IE not dissected yet");
5410 offset += apn_rte_ctrl_sts_len;
5411 }
5412 if (offset == (int)length) {
5413 return;
5414 }
5415
5416 /* (l+1) Length of Core Network Restrictions */
5417 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_cnr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ie_len);
5418 offset += 1;
5419 if (ie_len) {
5420 /* (l+2) to (l+5) Core Network Restrictions */
5421 /* The Core Network Restrictions coding is specified in clause 7.2.230 of 3GPP TS 29.272 [70].
5422 If Length of Core Network Restrictions is zero, then the field of Core Network Restrictions
5423 in octets "(l+2) to (l+5)" shall not be present.
5424 */
5425 tvbuff_t *new_tvb = tvb_new_subset_length(tvb, offset, ie_len);
5426 dissect_diameter_3gpp_core_network_restrictions(new_tvb, pinfo, tree, NULL((void*)0));
5427 offset += ie_len;
5428 }
5429
5430 if (offset == (int)length) {
5431 return;
5432 }
5433
5434 /* (l+6) Length of UE Radio Capability ID */
5435 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_ue_radio_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ie_len);
5436 offset += 1;
5437 if (ie_len) {
5438 /* (l+7) to z UE Radio Capability ID
5439 * The UE Radio Capability ID is specified in the clause 9.9.3.60 of 3GPP TS24.301
5440 */
5441 de_nas_5gs_mm_ue_radio_cap_id(tvb, tree, pinfo, offset, ie_len, NULL((void*)0), 0);
5442 offset += ie_len;
5443 }
5444
5445 if (offset == (int)length) {
5446 return;
5447 }
5448
5449 /*(a) ENSCT */
5450 proto_tree_add_item(tree, hf_gtpv2_mm_context_ensct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5451 offset += 1;
5452
5453 if (offset < (int)length){
5454 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length - offset, "The rest of the IE not dissected yet");
5455 }
5456}
5457
5458/*
5459 * Type = 108 (decimal)
5460 * Figure 8.38-6: UMTS Key, Quadruplets and Quintuplets
5461 */
5462static void
5463dissect_gtpv2_mm_context_utms_qq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5464{
5465 proto_tree *flag_tree;
5466 uint32_t offset;
5467 uint8_t tmp, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_length;
5468
5469 offset = 0;
5470 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5471
5472 /* Octet 5
5473 * Security Mode Spare DRXI KSIASME
5474 */
5475 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5476 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
5477 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
5478 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5479 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5480 offset += 1;
5481
5482 /* Octet 6
5483 * Bits
5484 * 8 7 6 5 4 3 2 1
5485 * Number of | Number of | UAMB | SAMB
5486 * Quintuplets | Quadruplet | RI | RI
5487 */
5488 tmp = tvb_get_uint8(tvb, offset);
5489 nr_qui = (tmp & 0xe0) >> 5;
5490 nr_qua = tmp & 0x1c;
5491 nr_qua >>= 2;
5492 uamb_ri = (tmp & 0x2) >> 1;
5493 samb_ri = tmp & 0x01;
5494
5495 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5496 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5497 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5498 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
5499 offset += 1;
5500 /* Octet 7 Spare */
5501 proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5502 offset += 1;
5503 /* Octet 8 to 23 CK */
5504 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
5505 offset += 16;
5506 /* Octet 24 to 39 IK */
5507 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
5508 offset += 16;
5509
5510 if ( nr_qua ) {
5511 offset = dissect_gtpv2_authentication_quadruplets(tvb, tree, offset, nr_qua);
5512 }
5513
5514 if (nr_qui) {
5515 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
5516 }
5517
5518 /* (h+1) to (h+2) DRX parameter */
5519 if (drxi) {
5520 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5521 offset += 2;
5522 }
5523
5524 /* Dissect octet j to r */
5525 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5526
5527 if (offset >= (uint32_t)length) {
5528 return;
5529 }
5530 /* r+1 Spare HBNA HNNA ENA INA GANA GENA UNA */
5531 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5532
5533 if (offset >= (uint32_t)length) {
5534 return;
5535 }
5536
5537 /* 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
5538 * Length of Voice Domain Preference and UE's Usage Setting is zero, then the Voice Domain Preference and UE's Usage
5539 * Setting parameter shall not be present.
5540 */
5541 /* r+2 */
5542 vdp_length = tvb_get_uint8(tvb, offset);
5543 proto_tree_add_item(tree, hf_gtpv2_vdp_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5544 offset++;
5545
5546 if(vdp_length !=0){
5547 offset += de_gmm_voice_domain_pref(tvb, tree, pinfo, offset, vdp_length, NULL((void*)0), 0);
5548 }
5549
5550 if (offset < (uint32_t)length) {
5551 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5552 }
5553
5554}
5555
5556/*
5557 * 8.39 PDN Connection (grouped IE)
5558 */
5559static void
5560dissect_gtpv2_PDN_conn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5561{
5562 int offset = 0;
5563 proto_tree *grouped_tree;
5564 tvbuff_t *new_tvb;
5565
5566 proto_item_append_text(item, "[Grouped IE]");
5567 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
5568 new_tvb = tvb_new_subset_length(tvb, offset, length);
5569
5570 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_PDN_CONNECTION109);
5571}
5572/*
5573 * 8.40 PDU Numbers
5574 */
5575static void
5576dissect_gtpv2_pdn_numbers(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5577{
5578 proto_item *nsapi_ti;
5579 proto_tree *nsapi_tree;
5580 uint8_t nsapi;
5581 int offset = 0;
5582
5583 nsapi = (tvb_get_uint8(tvb, offset) & 0x08);
5584 nsapi_ti = proto_tree_add_item(tree, hf_gtpv2_nsapi08, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5585 nsapi_tree = proto_item_add_subtree(nsapi_ti, ett_gtpv2_pdn_numbers_nsapi);
5586 proto_tree_add_bits_item(nsapi_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
5587 proto_tree_add_item(nsapi_tree, hf_gtpv2_pdn_numbers_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5588 proto_item_append_text(item, "NSAPI: %u", nsapi);
5589 offset += 1;
5590
5591 proto_tree_add_item(tree, hf_gtpv2_dl_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5592 offset += 2;
5593
5594 proto_tree_add_item(tree, hf_gtpv2_ul_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5595 offset += 2;
5596
5597 proto_tree_add_item(tree, hf_gtpv2_send_n_pdu_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5598 offset += 2;
5599
5600 proto_tree_add_item(tree, hf_gtpv2_receive_n_pdu_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5601}
5602
5603/*
5604 * 8.41 Packet TMSI (P-TMSI)
5605 */
5606static void
5607dissect_gtpv2_p_tmsi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5608{
5609 int offset = 0;
5610 proto_item* ti;
5611
5612 /* The TMSI consists of 4 octets. It can be coded using a full hexadecimal representation. */
5613 proto_tree_add_item(tree, hf_gtpv2_p_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5614 ti = proto_tree_add_item(tree, hf_3gpp_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5615 proto_item_set_hidden(ti);
5616 proto_item_append_text(item, "%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
5617}
5618
5619/*
5620 * 8.42 P-TMSI Signature
5621 */
5622static void
5623dissect_gtpv2_p_tmsi_sig(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5624{
5625 int offset = 0;
5626
5627 /* The P-TMSI Signature consists of 3 octets and may be allocated by the SGSN. */
5628 proto_tree_add_item(tree, hf_gtpv2_p_tmsi_sig, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5629 proto_item_append_text(item, "%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 3));
5630
5631}
5632
5633/*
5634 * 8.43 Hop Counter
5635 */
5636static void
5637dissect_gtpv2_hop_counter(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5638{
5639 int offset = 0;
5640 uint8_t hop_counter;
5641
5642 hop_counter = tvb_get_uint8(tvb, offset);
5643
5644 proto_tree_add_item(tree, hf_gtpv2_hop_counter, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5645 proto_item_append_text(item, "%d", hop_counter);
5646}
5647
5648/*
5649 * 8.44 UE Time Zone
5650 */
5651
5652static const value_string gtpv2_ue_time_zone_dst_vals[] = {
5653 {0, "No Adjustments for Daylight Saving Time"},
5654 {1, "+1 Hour Adjustments for Daylight Saving Time"},
5655 {2, "+2 Hour Adjustments for Daylight Saving Time"},
5656 {3, "Spare"},
5657 {0, NULL((void*)0)}
5658};
5659static void
5660dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5661{
5662 int offset = 0;
5663
5664 /*
5665 * UE Time Zone is used to indicate the offset between universal time and local time in steps of 15 minutes of where the
5666 * UE currently resides. The "Time Zone" field uses the same format as the "Time Zone" IE in 3GPP TS 24.008 [5].
5667 * (packet-gsm_a_dtap.c)
5668 */
5669 de_time_zone(tvb, tree, pinfo, offset, 1, NULL((void*)0), 0);
5670 offset += 1;
5671 proto_tree_add_item(item, hf_gtpv2_ue_time_zone_dst, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5672}
5673
5674/*
5675 * 8.45 Trace Reference
5676 */
5677static void
5678dissect_gtpv2_trace_reference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5679{
5680 int offset = 0;
5681 uint32_t trace_id;
5682 char *mcc_mnc_str;
5683
5684 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_NONE, true1);
5685 offset += 3;
5686
5687 trace_id = tvb_get_ntohs(tvb, offset);
5688 proto_tree_add_item(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5689
5690 proto_item_append_text(item, "%s,Trace ID %u", mcc_mnc_str, trace_id);
5691}
5692/*
5693 * 8.46 Complete Request Message
5694 */
5695static const value_string gtpv2_complete_req_msg_type_vals[] = {
5696 {0, "Complete Attach Request Message" },
5697 {1, "Complete TAU Request Message" },
5698 {0, NULL((void*)0) }
5699};
5700static void
5701dissect_complete_request_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5702{
5703 tvbuff_t *new_tvb;
5704 int offset;
5705
5706 offset = 0;
5707
5708 proto_tree_add_item(tree, hf_gtpv2_complete_req_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5709
5710 offset += 1;
5711
5712 /* Add the Complete Request Message */
5713 new_tvb = tvb_new_subset_length(tvb, offset, length-1);
5714 call_dissector(nas_eps_handle, new_tvb, pinfo, tree);
5715
5716}
5717
5718/*
5719 * 8.47 GUTI
5720 */
5721static void
5722dissect_gtpv2_guti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5723{
5724 int offset = 0;
5725
5726 offset = 0;
5727
5728 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
5729 offset += 3;
5730
5731 proto_tree_add_item(tree, hf_gtpv2_mme_grp_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5732 offset += 2;
5733
5734 proto_tree_add_item(tree, hf_gtpv2_mme_code, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5735 offset += 1;
5736
5737 proto_tree_add_item(tree, hf_gtpv2_m_tmsi, tvb, offset, 4, ENC_NA0x00000000);
5738}
5739
5740/*
5741 * 8.48 Fully Qualified Container (F-Container)
5742 */
5743
5744static const value_string gtpv2_container_type_vals[] = {
5745 {1, "UTRAN transparent container"},
5746 {2, "BSS container"},
5747 {3, "E-UTRAN transparent container"},
5748 {4, "NBIFOM Container"},
5749 {5, "EN-DC Container"},
5750 {6, "Inter-System SON Container"},
5751 {0, NULL((void*)0)}
5752};
5753
5754
5755static void
5756dissect_gtpv2_F_container(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
5757{
5758 tvbuff_t *new_tvb;
5759 proto_tree *sub_tree;
5760 int offset = 0;
5761 uint32_t container_type;
5762 uint8_t container_flags, xid_len;
5763
5764 /* Octets 8 7 6 5 4 3 2 1
5765 * 5 Spare | Container Type
5766 */
5767 proto_tree_add_item_ret_uint(tree, hf_gtpv2_container_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &container_type);
5768 offset += 1;
5769 length--;
5770 if (length == 0) {
5771 expert_add_info(pinfo, item, &ei_gtpv2_ie_len_invalid);
5772 return;
5773 }
5774 if ( (message_type == GTPV2_FORWARD_RELOCATION_REQ133)
5775 || (message_type == GTPV2_CONTEXT_RESPONSE131)
5776 || (message_type == GTPV2_RAN_INFORMATION_RELAY152)) {
5777 switch (container_type) {
5778 case 1:
5779 /* UTRAN transparent container (1)
5780 * Contains the "Source to Target
5781 * Transparent Container", if the message is used for PS
5782 * handover to UTRAN Iu mode procedures, SRNS relocation
5783 * procedure and E-UTRAN to UTRAN inter RAT handover
5784 * procedure.
5785 */
5786 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_utran_con, NULL((void*)0), "UTRAN transparent container");
5787 new_tvb = tvb_new_subset_length(tvb, offset, length);
5788 dissect_ranap_Source_ToTarget_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5789 return;
5790 case 2:
5791 /* BSS container */
5792 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_bss_con, NULL((void*)0), "BSS container");
5793 /* The flags PFI, RP, SAPI and PHX in octet 6 indicate the corresponding type of parameter */
5794 proto_tree_add_item(sub_tree, hf_gtpv2_bss_container_phx, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5795 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5796 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5797 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5798 container_flags = tvb_get_uint8(tvb, offset);
5799 offset += 1;
5800 if ((container_flags & 0x01) == 1) {
5801 /* Packet Flow ID present */
5802 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5803 offset += 1;
5804 }
5805 if (((container_flags & 0x04) == 4) || ((container_flags & 0x02) == 2)) {
5806 if ((container_flags & 0x04) == 4) {
5807 /* SAPI present */
5808 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5809 }
5810 if ((container_flags & 0x02) == 2) {
5811 /* Radio Priority present */
5812 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5813 }
5814 offset += 1;
5815 }
5816 if ((container_flags & 0x08) == 8) {
5817 /* XiD parameters length is present in Octet c.
5818 * XiD parameters are present in Octet d to n.
5819 */
5820 xid_len = tvb_get_uint8(tvb, offset);
5821 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5822 offset += 1;
5823 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid, tvb, offset, xid_len, ENC_NA0x00000000);
5824 }
5825 return;
5826 case 3:
5827 /* E-UTRAN transparent container
5828 * This IE shall be included to contain the "Source to Target
5829 * Transparent Container", if the message is used for
5830 * UTRAN/GERAN to E-UTRAN inter RAT handover
5831 * procedure, E-UTRAN intra RAT handover procedure and
5832 * 3G SGSN to MME combined hard handover and SRNS
5833 * relocation procedure. The Container Type shall be set to 3.
5834 */
5835 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_eutran_con, NULL((void*)0), "E-UTRAN transparent container");
5836 new_tvb = tvb_new_subset_length(tvb, offset, length);
5837 dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5838 return;
5839 default:
5840 break;
5841 }
5842 }
5843 if (message_type == GTPV2_FORWARD_CTX_NOTIFICATION137) {
5844 switch (container_type) {
5845 case 3:
5846 /* E-UTRAN transparent container */
5847 new_tvb = tvb_new_subset_length(tvb, offset, length);
5848 dissect_s1ap_ENB_StatusTransfer_TransparentContainer_PDU(new_tvb, pinfo, tree, NULL((void*)0));
5849 return;
5850 default:
5851 break;
5852 }
5853 }
5854 if (message_type == GTPV2_FORWARD_RELOCATION_RESP134) {
5855
5856 /* 7.3.2 Forward Relocation Response */
5857 switch (container_type) {
5858 case 3:
5859 /* E-UTRAN transparent container
5860 * This IE shall be included to contain the "Target to Source Transparent Container"
5861 * during a handover to E-UTRAN, 5GS to EPS handover and EPS to 5GS handover.
5862 * If the Cause IE contains the value "Request accepted". The Container Type shall be set to 3.
5863 */
5864 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_eutran_con, NULL((void*)0), "E-UTRAN transparent container");
5865 new_tvb = tvb_new_subset_length(tvb, offset, length);
5866 dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5867 return;
5868 default:
5869 break;
5870 }
5871 }
5872 if (message_type == GTPV2_CONFIGURATION_TRANSFER_TUNNEL141) {
5873 /* 7.3.18 Configuration Transfer Tunnel */
5874 switch (container_type) {
5875 case 3:
5876 /* SON Configuration Transfer
5877 * This IE shall be included to contain the "SON Configuration Transfer" as specified in 3GPP TS 36.413 [10].
5878 * The Container Type shall be set to 3.
5879 */
5880 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_son_con, NULL((void*)0), "SON Configuration Transfer");
5881 new_tvb = tvb_new_subset_length(tvb, offset, length);
5882 dissect_s1ap_SONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5883 return;
5884 case 5:
5885 /* EN-DC SON Configuration Transfer
5886 * This IE shall be included to contain the "EN-DC SON Configuration Transfer" as specified in 3GPP TS 36.413 [10].
5887 * The Container Type shall be set to 5.
5888 */
5889 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_endc_son_con, NULL((void*)0), "EN-DC SON Configuration Transfer");
5890 new_tvb = tvb_new_subset_length(tvb, offset, length);
5891 dissect_s1ap_EN_DCSONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5892 return;
5893 case 6:
5894 /* Inter-System SON Container
5895 * This IE shall be included to contain the "Inter-System SON Container" as specified in 3GPP TS 36.413 [10].
5896 * The Container Type shall be set to 6.
5897 */
5898 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_intersys_son_con, NULL((void*)0), "Inter-System SON Container");
5899 new_tvb = tvb_new_subset_length(tvb, offset, length);
5900 dissect_s1ap_IntersystemSONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5901 return;
5902 default:
5903 break;
5904 }
5905 }
5906 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length);
5907
5908}
5909
5910/*
5911 * 8.49 Fully Qualified Cause (F-Cause)
5912 */
5913
5914static const value_string gtpv2_cause_type_vals[] = {
5915 {0, "Radio Network Layer"},
5916 {1, "Transport Layer"},
5917 {2, "NAS"},
5918 {3, "Protocol"},
5919 {4, "Miscellaneous"},
5920 {5, "<spare>"},
5921 {6, "<spare>"},
5922 {7, "<spare>"},
5923 {8, "<spare>"},
5924 {9, "<spare>"},
5925 {10, "<spare>"},
5926 {11, "<spare>"},
5927 {12, "<spare>"},
5928 {13, "<spare>"},
5929 {14, "<spare>"},
5930 {15, "<spare>"},
5931 {0, NULL((void*)0)}
5932};
5933static value_string_ext gtpv2_cause_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_cause_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_cause_type_vals
) / sizeof ((gtpv2_cause_type_vals)[0]))-1, gtpv2_cause_type_vals
, "gtpv2_cause_type_vals", ((void*)0) }
;
5934
5935static void
5936dissect_gtpv2_s1ap_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int offset, uint8_t cause_type)
5937{
5938
5939 switch (cause_type) {
5940 case 0:
5941 /* CauseRadioNetwork */
5942 proto_tree_add_item(tree, hf_gtpv2_CauseRadioNetwork, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5943 break;
5944 case 1:
5945 /* CauseTransport */
5946 proto_tree_add_item(tree, hf_gtpv2_CauseTransport, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5947 break;
5948 case 2:
5949 /* CauseNas */
5950 proto_tree_add_item(tree, hf_gtpv2_CauseNas, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5951 break;
5952 case 3:
5953 /* CauseProtocol */
5954 proto_tree_add_item(tree, hf_gtpv2_CauseProtocol, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5955 break;
5956 case 4:
5957 /* CauseMisc */
5958 proto_tree_add_item(tree, hf_gtpv2_CauseMisc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5959 break;
5960 default:
5961 break;
5962 }
5963
5964 return;
5965
5966}
5967static void
5968dissect_gtpv2_F_cause(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, uint8_t instance, session_args_t * args _U___attribute__((unused)))
5969{
5970 int offset = 0;
5971 uint8_t cause_type;
5972
5973 /* The value of Instance field of the F-Cause IE in a GTPv2 message shall indicate
5974 * whether the F-Cause field contains RANAP Cause, BSSGP Cause or RAN Cause.
5975 * If the F-Cause field contains RAN Cause, the Cause Type field shall contain
5976 * the RAN cause subcategory as specified in 3GPP TS 36.413 [10] and it shall be
5977 * encoded as in Table 8.49-1.
5978 * If the F-Cause field contains BSSGP Cause or RANAP Cause,
5979 * the Cause Type field shall be ignored by the receiver.
5980 */
5981 if (message_type == GTPV2_FORWARD_RELOCATION_REQ133) {
5982 switch (instance) {
5983 case 0:
5984 proto_item_append_text(item, "[RAN Cause]");
5985 proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5986 cause_type = tvb_get_uint8(tvb, offset);
5987 offset += 1;
5988 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
5989 return;
5990 case 1:
5991 proto_item_append_text(item, "[RANAP Cause]");
5992 break;
5993 case 2:
5994 proto_item_append_text(item, "[BSSGP Cause]");
5995 break;
5996 default:
5997 break;
5998 }
5999 }
6000 else if (message_type == GTPV2_FORWARD_RELOCATION_RESP134) {
6001 /* Table 7.3.2-1: Information Elements in a Forward Relocation Response */
6002 switch (instance) {
6003 case 0:
6004 /* Instance 0 S1-AP Cause */
6005 proto_item_append_text(item, "[S1-AP Cause]");
6006 proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6007 cause_type = tvb_get_uint8(tvb, offset);
6008 offset++;
6009 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
6010 return;
6011 case 1:
6012 /* Instance 1 RANAP Cause */
6013 proto_item_append_text(item, "[RANAP Cause]");
6014 break;
6015 case 2:
6016 /* Instance 2 BSSGP Cause */
6017 proto_item_append_text(item, "[BSSGP Cause]");
6018 break;
6019 default:
6020 break;
6021 }
6022
6023 }/* GTPV2_FORWARD_RELOCATION_RESP */
6024
6025 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length-offset);
6026
6027}
6028
6029/*
6030 * 8.50 PLMN ID
6031 */
6032/*
6033 * The Selected PLMN ID IE contains the core network operator selected for tne UE
6034 * in a shared network. Octets 5-7 shall be encoded as the content part of the
6035 * "Selected PLMN Identity" parameter in 3GPP TS 36.413 [10].
6036 * -The Selected PLMN identity consists of 3 digits from MCC followed by
6037 * either -a filler digit plus 2 digits from MNC (in case of 2 digit MNC) or
6038 * -3 digits from MNC (in case of a 3 digit MNC).
6039 *
6040 * 8 7 6 5 4 3 2 1
6041 * +--+--+--+--+--+--+--+--+
6042 * Octet 5 |MCC digit 2|MCC digit 1|
6043 * +--+--+--+--+--+--+--+--+
6044 * Octet 6 |MNC digit 1|MCC digit 3|
6045 * +--+--+--+--+--+--+--+--+
6046 * Octet 7 |MNC digit 3|MNC digit 2|
6047 * +--+--+--+--+--+--+--+--+
6048 */
6049static void
6050dissect_gtpv2_plmn_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6051{
6052 char *mcc_mnc_str;
6053
6054 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_NONE, false0);
6055 proto_item_append_text(item, "%s", mcc_mnc_str);
6056}
6057
6058/*
6059 * 8.51 Target Identification
6060 */
6061
6062static const value_string gtpv2_target_type_vals[] = {
6063 {0, "RNC ID"},
6064 {1, "Macro eNodeB ID"},
6065 {2, "Cell Identifier"},
6066 {3, "Home eNodeB ID"},
6067 {4, "Extended Macro eNodeB ID"},
6068 {5, "gNodeB ID"},
6069 {6, "Macro ng-eNodeB ID"},
6070 {7, "Extended ng-eNodeB ID"},
6071 {8, "en-gNB ID"},
6072 {0, NULL((void*)0)}
6073};
6074static value_string_ext gtpv2_target_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_target_type_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_target_type_vals
) / sizeof ((gtpv2_target_type_vals)[0]))-1, gtpv2_target_type_vals
, "gtpv2_target_type_vals", ((void*)0) }
;
6075
6076static char*
6077dissect_gtpv2_home_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset)
6078{
6079 char *str = NULL((void*)0);
6080 char *mcc_mnc_str;
6081 uint32_t home_enodeb_id;
6082
6083 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6084 *offset += 3;
6085
6086 /* Octet 10 to 12 Home eNodeB ID
6087 * The Home eNodeB ID consists of 28 bits. See 3GPP TS 36.413 [10].
6088 * Bit 4 of Octet 9 is the most significant bit and bit 1 of Octet 12 is the least significant bit.
6089 * The coding of the Home eNodeB ID is the responsibility of each administration.
6090 * Coding using full hexadecimal representation shall be used.
6091 */
6092 home_enodeb_id = tvb_get_ntohl(tvb, *offset) & 0x0fffffff;
6093 proto_tree_add_item(tree, hf_gtpv2_home_enodeb_id, tvb, *offset, 4 , ENC_BIG_ENDIAN0x00000000);
6094 *offset += 4;
6095
6096 str = wmem_strdup_printf(pinfo->pool, "%s, Home eNodeB ID 0x%x",
6097 mcc_mnc_str,
6098 home_enodeb_id);
6099
6100 return str;
6101}
6102
6103static char*
6104dissect_gtpv2_gnodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int* offset)
6105{
6106 char* str = NULL((void*)0);
6107 char* mcc_mnc_str;
6108 uint32_t gnodeb_id;
6109
6110 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6111 *offset += 3;
6112
6113 /* The gNodeB ID Length field, in bits 1 to 6 of octet 9,
6114 * indicates the length of the gNodeB ID in number of bits
6115 */
6116
6117 proto_tree_add_item(tree, hf_gtpv2_gnodeb_id_len, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
6118 *offset += 1;
6119
6120 proto_tree_add_item_ret_uint(tree, hf_gtpv2_gnodeb_id, tvb, *offset, 4, ENC_BIG_ENDIAN0x00000000, &gnodeb_id);
6121 *offset += 4;
6122
6123 str = wmem_strdup_printf(pinfo->pool, "%s, gNodeB ID 0x%x",
6124 mcc_mnc_str,
6125 gnodeb_id);
6126
6127 return str;
6128}
6129
6130static char*
6131dissect_gtpv2_macro_ng_enodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int* offset)
6132{
6133 char *str = NULL((void*)0);
6134 char *mcc_mnc_str;
6135 uint32_t ng_enodeb_id;
6136
6137 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6138 *offset += 3;
6139
6140 proto_tree_add_item_ret_uint(tree, hf_gtpv2_macro_ng_enodeb_id, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &ng_enodeb_id);
6141 *offset += 3;
6142
6143 str = wmem_strdup_printf(pinfo->pool, "%s, Macro ng-eNodeB ID 0x%x",
6144 mcc_mnc_str,
6145 ng_enodeb_id);
6146
6147 return str;
6148}
6149
6150static void
6151dissect_gtpv2_target_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6152{
6153 tvbuff_t *new_tvb;
6154 int offset = 0;
6155 uint8_t target_type, oct;
6156
6157 proto_tree_add_item(tree, hf_gtpv2_target_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6158 target_type = tvb_get_uint8(tvb, offset);
6159 offset += 1;
6160 switch (target_type) {
6161 case 0:
6162 /* 8.51.2 RNC ID*/
6163 new_tvb = tvb_new_subset_remaining(tvb, offset);
6164 dissect_e212_mcc_mnc(new_tvb, pinfo, tree, 0, E212_NONE, true1);
6165 offset += 3;
6166 /* LAC */
6167 proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6168 offset+=2;
6169
6170 /* RAC (see NOTE 3) */
6171 proto_tree_add_item(tree, hf_gtpv2_rac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6172 offset++;
6173 /* RNC ID
6174 * In this case the Target ID field shall be encoded as the Target
6175 * RNC-ID part of the "Target ID" parameter in 3GPP TS 25.413 [33]. Therefore, the "Choice Target ID" that indicates
6176 * "Target RNC-ID" (numerical value of 0x20) shall not be included (value in octet 5 specifies the target type).
6177 */
6178 proto_tree_add_item(tree, hf_gtpv2_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6179 /* If the optional Extended RNC-ID is not included, then the length variable 'n' = 8 and the overall length of the IE is 11
6180 * octets. Otherwise, 'n' = 10 and the overall length of the IE is 13 octets
6181 */
6182 if(length == 11){
6183 proto_tree_add_item(tree, hf_gtpv2_ext_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6184 }
6185 return;
6186 case 1:
6187 /* Macro eNodeB ID*/
6188 dissect_gtpv2_macro_enodeb_id(tvb, pinfo, tree, &offset);
6189
6190 /* Tracking Area Code (TAC) */
6191 proto_tree_add_item(tree, hf_gtpv2_tai_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6192
6193 return;
6194
6195 case 2:
6196 /* Cell Identifier */
6197 /* Target ID field shall be same as the Octets 3 to 10 of the Cell Identifier IEI
6198 * in 3GPP TS 48.018 [34].
6199 */
6200 new_tvb = tvb_new_subset_remaining(tvb, offset);
6201 de_bssgp_cell_id(new_tvb, tree, pinfo, 0, 0/* not used */, NULL((void*)0), 0);
6202 return;
6203 case 3:
6204 /* Home eNodeB ID */
6205 dissect_gtpv2_home_enodeb_id(tvb, pinfo, tree, &offset);
6206
6207 /* Octet 13 to 14 Tracking Area Code (TAC) */
6208 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2 , ENC_BIG_ENDIAN0x00000000);
6209 return;
6210
6211 case 4:
6212 /* 8.51.5 Extended Macro eNodeB ID */
6213 dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
6214
6215 /* Octet 12 to 13 Tracking Area Code (TAC) */
6216 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6217 return;
6218
6219 case 5:
6220 /* gNodeB ID */
6221 dissect_gtpv2_gnodeb_id(tvb, pinfo, tree, &offset);
6222
6223 /* Octet 14 to 16 5GS Tracking Area Code (TAC) */
6224 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6225 return;
6226
6227 case 6:
6228 /* Macro ng-eNodeB ID */
6229 dissect_gtpv2_macro_ng_enodeb_id(tvb, pinfo, tree, &offset);
6230 /* Octet 14 to 16 5GS Tracking Area Code (TAC) */
6231 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6232 return;
6233
6234 case 7:
6235 /* Extended ng-eNodeB ID */
6236 dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, tree, &offset, hf_gtpv2_ext_macro_ng_enodeb_id);
6237 /* Octet 12 to 14 5GS Tracking Area Code (TAC) */
6238 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6239 return;
6240
6241 case 8:
6242 /* en-gNB ID */
6243 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, true1);
6244 offset += 3;
6245 /* Octet 9 5TAC ETAC en-gNB ID Length */
6246 oct = tvb_get_uint8(tvb, offset);
6247 proto_tree_add_item(tree, hf_gtpv2_5tac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6248 proto_tree_add_item(tree, hf_gtpv2_etac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6249 proto_tree_add_item(tree, hf_gtpv2_en_gnb_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6250 offset++;
6251
6252 /* Octet 10 to 13 en-gNB ID */
6253 proto_tree_add_item(tree, hf_gtpv2_en_gnb_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6254 offset += 4;
6255
6256 if ((oct & 0x40) == 0x40) {
6257 /* ETAC*/
6258 /* p to (p+1 */
6259 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6260 offset += 2;
6261
6262 }
6263 if ((oct & 0x80) == 0x80) {
6264 /* 5 TAC*/
6265 /* q to(q + 2) */
6266 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6267 }
6268 return;
6269
6270 default:
6271 break;
6272 }
6273 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length-offset);
6274
6275}
6276
6277/*
6278 * 8.52 Void
6279 */
6280/*
6281 * 8.53 Packet Flow ID
6282 */
6283static void
6284dissect_gtpv2_pkt_flow_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6285{
6286 int offset = 0;
6287
6288 /* Octet 5 Spare EBI */
6289 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
6290 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6291 offset += 1;
6292
6293 /* Packet Flow ID */
6294 proto_tree_add_item(tree, hf_gtpv2_packet_flow_id, tvb, offset, length - 1, ENC_NA0x00000000);
6295
6296}
6297/*
6298 * 8.54 RAB Context
6299 */
6300static void
6301dissect_gtpv2_rab_context(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6302{
6303 int offset = 0;
6304
6305 /* 5 Spare NSAPI */
6306 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
6307 proto_tree_add_item(tree, hf_gtpv2_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6308 offset++;
6309
6310 /* 6 to 7 DL GTP-U Sequence Number */
6311 proto_tree_add_item(tree, hf_gtpv2_dl_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6312 offset += 2;
6313
6314 /* 8 to 9 UL GTP-U Sequence Number */
6315 proto_tree_add_item(tree, hf_gtpv2_ul_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6316 offset += 2;
6317
6318 /* 10 to 11 DL PDCP Sequence Number */
6319 proto_tree_add_item(tree, hf_gtpv2_dl_pdcp_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6320 offset += 2;
6321
6322 /* 12 to 13 UL PDCP Sequence Number */
6323 proto_tree_add_item(tree, hf_gtpv2_ul_pdcp_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6324
6325}
6326
6327/*
6328 * 8.55 Source RNC PDCP context info
6329 */
6330static void
6331dissect_gtpv2_s_rnc_pdcp_ctx_info(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6332{
6333 proto_tree_add_item(tree, hf_gtpv2_rrc_container, tvb, 0, length, ENC_NA0x00000000);
6334}
6335
6336/*
6337 * 8.56 Port Number
6338 */
6339static void
6340dissect_port_nr(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6341{
6342 proto_tree_add_item(tree, hf_gtpv2_port_number, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000);
6343 proto_item_append_text(item, "%u", tvb_get_ntohs(tvb, 0));
6344}
6345/*
6346 * 8.57 APN Restriction
6347 */
6348
6349/* Table 8.57-1: Valid Combinations of APN Restriction */
6350static const value_string gtpv2_apn_restriction_vals[] = {
6351 {0, "No Existing Contexts or Restriction"},
6352 {1, "Public-1"},
6353 {2, "Public-2"},
6354 {3, "Private-1"},
6355 {4, "Private-2"},
6356 {0, NULL((void*)0)}
6357};
6358static value_string_ext gtpv2_apn_restriction_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_apn_restriction_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_apn_restriction_vals
) / sizeof ((gtpv2_apn_restriction_vals)[0]))-1, gtpv2_apn_restriction_vals
, "gtpv2_apn_restriction_vals", ((void*)0) }
;
6359
6360static void
6361dissect_gtpv2_apn_rest(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6362{
6363 uint8_t type_value;
6364 int offset = 0;
6365
6366 /* APN restriction value octet 5 */
6367 type_value = tvb_get_uint8(tvb, offset);
6368 proto_tree_add_item(tree, hf_gtpv2_apn_rest, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6369
6370 /* Add APN restriction to ie_tree */
6371 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(type_value, &gtpv2_apn_restriction_vals_ext, "Unknown"), type_value);
6372 offset += 1;
6373
6374 if (length > offset)
6375 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
6376}
6377
6378/*
6379 * 8.58 Selection Mode
6380 */
6381static const value_string gtpv2_selec_mode_vals[] = {
6382 {0, "MS or network provided APN, subscribed verified"},
6383 {1, "MS provided APN, subscription not verified"},
6384 {2, "Network provided APN, subscription not verified"},
6385 {3, "Network provided APN, subscription not verified (Basically for Future use"},
6386 {0, NULL((void*)0)}
6387};
6388
6389void
6390dissect_gtpv2_selec_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6391{
6392 int offset = 0;
6393 uint8_t ss_mode;
6394
6395 ss_mode = tvb_get_uint8(tvb, offset) & 0x03;
6396 proto_tree_add_item(tree, hf_gtpv2_selec_mode, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6397 proto_item_append_text(item, "%s", val_to_str_const(ss_mode, gtpv2_selec_mode_vals, "Unknown"));
6398}
6399
6400
6401/*
6402 * 8.59 Source Identification
6403 */
6404#if 0
6405static const value_string gtpv2_source_ident_types[] = {
6406 {0, "Cell ID"},
6407 {1, "RNC ID"},
6408 {2, "eNodeB ID(Reserved, used in earlier v of proto.)"},
6409 {0, NULL((void*)0)}
6410};
6411#endif
6412static void
6413dissect_gtpv2_source_ident(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6414{
6415 int offset = 0;
6416 uint8_t source_type;
6417
6418 /* Octet 5 to 12 Target Cell ID */
6419 de_cell_id(tvb, tree, pinfo, offset, 8, NULL((void*)0), 0);
6420 offset += 8;
6421 /* Octet 13 Source Type */
6422 source_type = tvb_get_uint8(tvb, offset);
6423 proto_tree_add_item(tree, hf_gtpv2_source_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6424 offset += 1;
6425 /* Octet 14 to (n+4) Source ID */
6426 switch (source_type) {
6427 case 0:
6428 /* The Source Type is Cell ID for PS handover from GERAN A/Gb mode. In this case the coding of the Source ID field
6429 * shall be same as the Octets 3 to 10 of the Cell Identifier IEI in 3GPP TS 48.018 [34].
6430 */
6431 de_cell_id(tvb, tree, pinfo, offset, 8, NULL((void*)0), 0);
6432 break;
6433 case 1:
6434 /* The Source Type is RNC ID for PS handover from GERAN Iu mode or for inter-RAT handover from UTRAN. In this
6435 * case the Source ID field shall be encoded as the Source RNC-ID part of the "Source ID" parameter in 3GPP TS
6436 * 25.413 [33].
6437 */
6438 /* RNC-ID M INTEGER (0..4095) */
6439 break;
6440 case 2:
6441 break;
6442 default:
6443 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_source_type_unknown, tvb, offset-1, 1);
6444 break;
6445 }
6446
6447}
6448
6449 /*
6450 * 8.60 Bearer Control Mode
6451 */
6452static const value_string gtpv2_bearer_control_mode_vals[] = {
6453 {0, "Selected Bearer Control Mode-'MS_only'"},
6454 {1, "Selected Bearer Control Mode-'Network_only'"},
6455 {2, "Selected Bearer Control Mode-'MS/NW'"},
6456 {0, NULL((void*)0)}
6457};
6458
6459static const value_string gtpv2_bearer_control_mode_short_vals[] = {
6460 {0, "MS_only"},
6461 {1, "Network_only"},
6462 {2, "MS/NW"},
6463 {0, NULL((void*)0)}
6464};
6465
6466static void
6467dissect_gtpv2_bearer_control_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6468{
6469 uint8_t bcm;
6470
6471 proto_tree_add_item(tree, hf_gtpv2_bearer_control_mode, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6472 /* Add Bearer Control Mode to tree */
6473 bcm = tvb_get_uint8(tvb, 0);
6474 proto_item_append_text(item, "%s", val_to_str_const(bcm, gtpv2_bearer_control_mode_short_vals, "Unknown"));
6475
6476}
6477/*
6478 * 8.61 Change Reporting Action
6479 */
6480static const value_string gtpv2_cng_rep_act_vals[] = {
6481 {0, "Stop Reporting"},
6482 {1, "Start Reporting CGI/SAI"},
6483 {2, "Start Reporting RAI"},
6484 {3, "Start Reporting TAI"},
6485 {4, "Start Reporting ECGI"},
6486 {5, "Start Reporting CGI/SAI and RAI"},
6487 {6, "Start Reporting TAI and ECGI"},
6488 {0, NULL((void*)0)}
6489};
6490
6491static void
6492dissect_gtpv2_cng_rep_act(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6493{
6494 uint8_t action;
6495
6496 /* Add Action to tree */
6497 action = tvb_get_uint8(tvb, 0);
6498 proto_tree_add_item(tree, hf_gtpv2_cng_rep_act, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6499
6500 proto_item_append_text(item, "%s", val_to_str_const(action, gtpv2_cng_rep_act_vals, "Unknown"));
6501}
6502/*
6503 * 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID)
6504 */
6505#if 0
6506static const value_string gtpv2_fq_csid_type_vals[] = {
6507 {0, "Global unicast IPv4 address"},
6508 {1, "Global unicast IPv6 address"},
6509 {2, "4 octets long field"},
6510 {0, NULL((void*)0)}
6511};
6512#endif
6513
6514void
6515dissect_gtpv2_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6516{
6517 int offset = 0;
6518 uint8_t octet, node_id_type, csids;
6519
6520 /* Octet 5 Node-ID Type Number of CSIDs= m */
6521
6522 octet = tvb_get_uint8(tvb, offset);
6523 node_id_type = octet >> 4;
6524 csids = octet & 0x0f;
6525 proto_tree_add_item(tree, hf_gtpv2_fq_csid_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6526 proto_tree_add_item(tree, hf_gtpv2_fq_csid_nr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6527 offset += 1;
6528
6529 switch (node_id_type) {
6530 case 0:
6531 /* Indicates that Node-ID is a global unicast IPv4 address and p = 9 */
6532 proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6533 offset += 4;
6534 break;
6535 case 1:
6536 /* Indicates that Node-ID is a global unicast IPv6 address and p = 21 */
6537 proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
6538 offset += 16;
6539 break;
6540 case 2:
6541 /* Node-ID is a 4 octets long field with a 32 bit value stored in network order, and p= 9. The coding
6542 * of the field is specified below:
6543 * - Most significant 20 bits are the binary encoded value of (MCC * 1000 + MNC).
6544 * - Least significant 12 bits is a 12 bit integer assigned by an operator to an MME, SGW or PGW. Other values of
6545 * Node-ID Type are reserved.
6546 */
6547 proto_tree_add_item(tree, hf_gtpv2_fq_csid_node_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6548 proto_tree_add_item(tree, hf_gtpv2_fq_csid_mcc_mnc, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6549 offset += 4;
6550 break;
6551 default:
6552 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_fq_csid_type_bad, tvb, offset-1, 1,
6553 "Wrong Node-ID Type %u, should be 0-2(Or this is a newer spec)", node_id_type);
6554 return;
6555 }
6556
6557 /* First PDN Connection Set Identifier (CSID)
6558 * Second PDN Connection Set Identifier (CSID)
6559 * :
6560 * m-th PDN Connection Set Identifier (CSID)
6561 */
6562 while ( csids-- ) {
6563 proto_tree_add_item(tree, hf_gtpv2_fq_csid_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6564 offset += 2;
6565 }
6566
6567}
6568
6569/*
6570 * 8.63 Channel needed
6571 */
6572static void
6573dissect_gtpv2_channel_needed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6574{
6575 /* The Channel needed shall be coded as depicted in Figure 8.63-1. Channel needed is coded as the IEI part and the value
6576 * part of the Channel Needed IE defined in 3GPP TS 44.018[28]
6577 */
6578 de_rr_chnl_needed(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
6579}
6580
6581/*
6582 * 8.64 eMLPP Priority
6583 * The eMLPP-Priority shall be coded as depicted in Figure 8.64-1. The eMLPP Priority is coded as the value part of the
6584 * eMLPP-Priority IE defined in 3GPP TS 48.008 [29] (not including 3GPP TS 48.008 IEI and 3GPP TS 48.008 [29]
6585 * length indicator).
6586 */
6587static void
6588dissect_gtpv2_emlpp_pri(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6589{
6590 be_emlpp_prio(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
6591
6592}
6593
6594/*
6595 * 8.65 Node Type
6596 */
6597static const value_string gtpv2_node_type_vals[] = {
6598 {0, "MME"},
6599 {1, "SGSN"},
6600 {0, NULL((void*)0)}
6601};
6602
6603static void
6604dissect_gtpv2_node_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6605{
6606 uint8_t node_type;
6607
6608 proto_tree_add_item(tree, hf_gtpv2_node_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6609 /* Append Node Type to tree */
6610 node_type = tvb_get_uint8(tvb, 0);
6611 proto_item_append_text(item, "%s", val_to_str_const(node_type, gtpv2_node_type_vals, "Unknown"));
6612
6613}
6614
6615 /*
6616 * 8.66 Fully Qualified Domain Name (FQDN)
6617 */
6618static int
6619decode_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int offset, uint16_t length)
6620{
6621 int name_len;
6622 const uint8_t *fqdn = NULL((void*)0);
6623
6624 /* The FQDN field encoding shall be identical to the encoding of
6625 * a FQDN within a DNS message of section 3.1 of IETF
6626 * RFC 1035 [31] but excluding the trailing zero byte.
6627 *
6628 * XXX: is compression possible?
6629 */
6630 if (offset < length) {
6631 name_len = tvb_get_uint8(tvb, offset);
6632
6633 /* "NOTE 1: The FQDN field in the IE is not encoded as a dotted string"
6634 * but if the first byte is large (in the letter range or higher),
6635 * assume that it is so encoded incorrectly.
6636 */
6637 if (name_len < 0x40) {
6638 proto_tree_add_item_ret_string(tree, hf_gtpv2_fqdn, tvb, offset, length, ENC_APN_STR0x00000054, pinfo->pool, &fqdn);
6639 } else {
6640 proto_tree_add_item_ret_string(tree, hf_gtpv2_fqdn, tvb, offset, length, ENC_ASCII0x00000000, pinfo->pool, &fqdn);
6641 }
6642 proto_item_append_text(item, "%s", fqdn);
6643 }
6644
6645 return length; //TODO return length of fqdn
6646}
6647
6648static void
6649dissect_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6650{
6651 int offset = 0;
6652 decode_gtpv2_fqdn(tvb, pinfo, tree, item, offset, length);
6653}
6654
6655/*
6656 * 8.67 Private Extension
6657 */
6658static void
6659dissect_gtpv2_private_ext(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance, session_args_t * args _U___attribute__((unused)))
6660{
6661 int offset = 0;
6662 tvbuff_t *next_tvb;
6663 uint16_t ext_id;
6664 gtpv2_priv_ext_info_t gtpv2_inf;
6665
6666 gtpv2_inf.instance = instance;
6667 gtpv2_inf.item = item;
6668
6669 /* oct 5 -7 Enterprise ID */
6670 ext_id = tvb_get_ntohs(tvb, offset);
6671 proto_tree_add_item(tree, hf_gtpv2_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6672 offset += 2;
6673
6674 proto_item_append_text(item, "%s (%u)", enterprises_lookup(ext_id, "Unknown"), ext_id);
6675
6676 next_tvb = tvb_new_subset_length(tvb, offset, length-2);
6677 if (dissector_try_uint_with_data(gtpv2_priv_ext_dissector_table, ext_id, next_tvb, pinfo, tree, false0, &gtpv2_inf)){
6678 return;
6679 }
6680
6681 proto_tree_add_item(tree, hf_gtpv2_proprietary_value, tvb, offset, length-2, ENC_NA0x00000000);
6682}
6683
6684/*
6685 * 8.68 Transaction Identifier (TI)
6686 */
6687static void
6688dissect_gtpv2_ti(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6689{
6690 /* 5 to (n+4) Transaction Identifier */
6691 proto_tree_add_item(tree, hf_gtpv2_ti, tvb, 0, length, ENC_NA0x00000000);
6692
6693}
6694
6695/*
6696 * 8.69 MBMS Session Duration
6697 */
6698void
6699dissect_gtpv2_mbms_session_duration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6700{
6701 int offset = 0;
6702 int bit_offset = 0;
6703 uint8_t days;
6704 uint32_t hours;
6705 uint32_t minutes;
6706 uint32_t seconds;
6707 uint32_t durations_seconds;
6708 proto_item *day_item, *sec_item;
6709
6710 /* From 3GPP TS 29.061 17.7.7 MBMS-Session-Duration AVP */
6711 /* Bits: ssss ssss ssss ssss sddd dddd where s bits = seconds, d bits = days */
6712 durations_seconds = tvb_get_bits32(tvb, bit_offset, 17, ENC_BIG_ENDIAN0x00000000);
6713 bit_offset += 17;
6714
6715 days = tvb_get_bits8(tvb, bit_offset, 7);
6716
6717 /* 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. */
6718 if ((durations_seconds == 0) && (days == 0)) {
6719 day_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6720 sec_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6721 proto_item_append_text(item, "Indefinite (always-on)");
6722 } else {
6723 hours = durations_seconds / 3600;
6724 minutes = (durations_seconds % 3600) / 60;
6725 seconds = (durations_seconds % 3600) % 60;
6726
6727 day_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6728 sec_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6729 proto_item_append_text(item, "%d days %02d:%02d:%02d (DD days HH:MM:SS)", days, hours, minutes, seconds);
6730 }
6731
6732 /* Maximum allowed value for days: 18.
6733 * Maximum allowed value for seconds: 86,400 */
6734 if (days > 18) {
6735 expert_add_info(pinfo, day_item, &ei_gtpv2_mbms_session_duration_days);
6736 }
6737 if (durations_seconds > 86400) {
6738 expert_add_info(pinfo, sec_item, &ei_gtpv2_mbms_session_duration_secs);
6739 }
6740
6741 offset += 3;
6742 if (length > 3)
6743 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-3, ENC_NA0x00000000);
6744}
6745
6746/*
6747 * 8.70 MBMS Service Area
6748 */
6749void
6750dissect_gtpv2_mbms_service_area(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6751{
6752 int offset = 0;
6753 proto_item *sai_item;
6754 uint8_t binary_nr;
6755 uint16_t real_nr;
6756 uint16_t sai;
6757
6758 binary_nr = tvb_get_uint8(tvb, offset);
6759 real_nr = (uint16_t)binary_nr + 1;
6760
6761 /* 3GPP TS 29.061 17.7.6 MBMS-Service-Area AVP */
6762 proto_tree_add_uint(tree, hf_gtpv2_mbms_service_area_nr, tvb, offset, 1, real_nr);
6763 offset += 1;
6764
6765 /* A consecutive list of MBMS Service Area Identities follow, each with a length of two octets. */
6766 while (offset < length) {
6767 /* 3GPP TS 23.003 15.3 Structure of MBMS SAI */
6768 sai = tvb_get_ntohs(tvb, offset);
6769 sai_item = proto_tree_add_item(tree, hf_gtpv2_mbms_service_area_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6770 /* The value 0 denotes the whole of PLMN as the MBMS Service Area */
6771 if (sai == 0) {
6772 proto_item_append_text(sai_item, " Entire PLMN");
6773 }
6774 proto_item_append_text(item, " %u", sai);
6775 offset += 2;
6776 }
6777}
6778
6779/*
6780 * 8.71 MBMS Session Identifier
6781 */
6782static void
6783dissect_gtpv2_mbms_session_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, _U___attribute__((unused)) uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6784{
6785 int offset = 0;
6786 /* One octet OctetString. */
6787 proto_tree_add_item(tree, hf_gtpv2_mbms_session_id, tvb, offset, 1, ENC_NA0x00000000);
6788
6789 offset += 1;
6790 if (length > 1)
6791 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
6792}
6793
6794/*
6795 * 8.72 MBMS Flow Identifier
6796 */
6797static void
6798dissect_gtpv2_mbms_flow_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6799{
6800 int offset = 0;
6801 /* Two octets OctetString. */
6802 proto_tree_add_item(tree, hf_gtpv2_mbms_flow_id, tvb, offset, 2, ENC_NA0x00000000);
6803 proto_item_append_text(item, " %s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 2));
6804
6805 offset += 2;
6806 if (length > 2)
6807 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-2, ENC_NA0x00000000);
6808}
6809
6810/*
6811 * 8.73 MBMS IP Multicast Distribution
6812 */
6813static const value_string gtpv2_mbms_hc_indicator_vals[] = {
6814 {0, "Uncompressed header"},
6815 {1, "Compressed header"},
6816 {0, NULL((void*)0)}
6817};
6818
6819static void
6820dissect_gtpv2_mbms_ip_mc_dist(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6821{
6822 int offset = 0;
6823
6824 proto_tree_add_item(tree, hf_gtpv2_cteid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6825 offset += 4;
6826
6827 proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6828 proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6829 /* IP Multicast Distribution Address */
6830 if ((tvb_get_uint8(tvb, offset) & 0x3f) == 4) {
6831 offset += 1;
6832 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6833 proto_item_append_text(item, " IPv4 Dist %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
6834 offset += 4;
6835 } else if ((tvb_get_uint8(tvb, offset) & 0x3f) == 16) {
6836 offset += 1;
6837 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv6, tvb, offset, 16, ENC_NA0x00000000);
6838 proto_item_append_text(item, " IPv6 Dist %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
6839 offset += 16;
6840 }
6841
6842 proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6843 proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6844 /* IP Multicast Source Address */
6845 if ((tvb_get_uint8(tvb, offset) & 0x3f) == 4) {
6846 offset += 1;
6847 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6848 proto_item_append_text(item, " IPv4 Src %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
6849 offset += 4;
6850 } else if ((tvb_get_uint8(tvb, offset) & 0x3f) == 16) {
6851 offset += 1;
6852 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv6, tvb, offset, 16, ENC_NA0x00000000);
6853 proto_item_append_text(item, " IPv6 Src %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
6854 offset += 16;
6855 }
6856
6857 proto_tree_add_item(tree, hf_gtpv2_mbms_hc_indicator, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6858
6859 offset += 1;
6860 if (length > offset)
6861 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
6862
6863}
6864
6865/*
6866 * 8.74 MBMS Distribution Acknowledge
6867 */
6868static const value_string gtpv2_mbms_dist_indication_vals[] = {
6869 {0, "No RNCs have accepted IP multicast distribution"},
6870 {1, "All RNCs have accepted IP multicast distribution"},
6871 {2, "Some RNCs have accepted IP multicast distribution"},
6872 {3, "Spare. For future use."},
6873 {0, NULL((void*)0)}
6874};
6875
6876static void
6877dissect_gtpv2_mbms_dist_ack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6878{
6879 int offset = 0;
6880
6881 proto_tree_add_item(tree, hf_gtpv2_mbms_dist_indication, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6882
6883 offset += 1;
6884 if (length > 1)
6885 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
6886}
6887
6888/*
6889 * 8.75 User CSG Information (UCI)
6890 */
6891static const value_string gtpv2_uci_csg_membership_status[] = {
6892 {0, "Non CSG membership"},
6893 {1, "CSG membership"},
6894 {0, NULL((void*)0) }
6895};
6896
6897static const value_string gtpv2_uci_access_mode[] = {
6898 {0, "Closed Mode"},
6899 {1, "Hybrid Mode"},
6900 {2, "Reserved" },
6901 {3, "Reserved"},
6902 {0, NULL((void*)0) }
6903};
6904
6905static const value_string gtpv2_uci_leave_csg[] = {
6906 {0, "Access CSG cell/Hybrid cell"},
6907 {1, "Leaves CSG cell/Hybrid cell"},
6908 {0, NULL((void*)0) }
6909};
6910
6911static void
6912dissect_gtpv2_uci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6913{
6914 int offset = 0;
6915
6916 /* Value of MCC & MNC */
6917 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
6918 offset += 3;
6919 /* Value of CSG ID */
6920 proto_tree_add_item(tree, hf_gtpv2_uci_csg_id_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6921 proto_tree_add_item(tree, hf_gtpv2_uci_csg_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6922 offset += 4;
6923
6924 /* Value of access mode */
6925 proto_tree_add_item(tree, hf_gtpv2_uci_access_mode, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6926
6927 /* Value of LCSG */
6928 proto_tree_add_item(tree, hf_gtpv2_uci_lcsg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6929
6930 /* Value of CSG membership */
6931 proto_tree_add_item(tree, hf_gtpv2_uci_csg_membership, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6932
6933}
6934
6935/* 8.76 CSG Information Reporting Action */
6936static void
6937dissect_gtpv2_csg_info_rep_action(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6938{
6939 int offset = 0;
6940
6941 static int * const flags[] = {
6942 &hf_gtpv2_csg_info_rep_action_b2,
6943 &hf_gtpv2_csg_info_rep_action_b1,
6944 &hf_gtpv2_csg_info_rep_action_b0,
6945 NULL((void*)0)
6946 };
6947 if (length == 0) {
6948 expert_add_info(pinfo, item, &ei_gtpv2_ie_len_invalid);
6949 return;
6950 }
6951 /* Spare UCIUHC UCISHC UCICSG */
6952
6953 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN0x00000000);
6954
6955}
6956
6957/* 8.77 RFSP Index */
6958static void
6959dissect_gtpv2_rfsp_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6960{
6961 int offset = 0;
6962
6963 if(instance == 0){
6964 proto_tree_add_item(tree, hf_gtpv2_subscriber_rfsp, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6965 }else if(instance == 1){
6966 proto_tree_add_item(tree, hf_gtpv2_rfsp_inuse, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6967 }
6968}
6969
6970/* 8.78 CSG ID */
6971static void
6972dissect_gtpv2_csg_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6973{
6974 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 5, ENC_BIG_ENDIAN0x00000000);
6975 proto_tree_add_item(tree, hf_gtpv2_csg_id, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
6976 if (length > 1) {
6977 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA0x00000000);
6978 }
6979}
6980
6981/* 8.79 CSG Membership Indication (CMI) */
6982static void
6983dissect_gtpv2_cmi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
6984{
6985 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 7, ENC_BIG_ENDIAN0x00000000);
6986 proto_tree_add_item(tree, hf_gtpv2_cmi, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6987 if (length > 1) {
6988 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA0x00000000);
6989 }
6990}
6991
6992/* 8.80 Service indicator */
6993static const value_string gtpv2_service_indicator_vals[] = {
6994 { 1, "CS call indicator" },
6995 { 2, "SMS indicator" },
6996 { 0, NULL((void*)0) }
6997};
6998
6999static void
7000dissect_gtpv2_service_indicator(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7001{
7002 proto_tree_add_item(tree, hf_gtpv2_service_indicator, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7003}
7004
7005/* 8.81 Detach Type */
7006static const value_string gtpv2_detach_type_vals[] = {
7007 { 1, "PS Detach" },
7008 { 2, "Combined PS/CS Detach" },
7009 { 0, NULL((void*)0) }
7010};
7011
7012static void
7013dissect_gtpv2_detach_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7014{
7015 proto_tree_add_item(tree, hf_gtpv2_detach_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7016}
7017
7018/* 8.82 Local Distinguished Name (LDN) */
7019static void
7020dissect_gtpv2_ldn(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7021{
7022 proto_tree_add_item(tree, hf_gtpv2_ldn, tvb, 0, length, ENC_ASCII0x00000000);
7023}
7024
7025/* 8.83 Node Features */
7026static void
7027dissect_gtpv2_node_features(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7028{
7029 int offset = 0;
7030 static int * const features[] = {
7031 &hf_gtpv2_node_features_psset,
7032 &hf_gtpv2_node_features_mtedt,
7033 &hf_gtpv2_node_features_eth,
7034 &hf_gtpv2_node_features_s1un,
7035 &hf_gtpv2_node_features_ciot,
7036 &hf_gtpv2_node_features_ntsr,
7037 &hf_gtpv2_node_features_mabr,
7038 &hf_gtpv2_node_features_prn,
7039 NULL((void*)0)
7040 };
7041
7042 proto_tree_add_bitmask_list(tree, tvb, offset, 1, features, ENC_BIG_ENDIAN0x00000000);
7043 offset++;
7044 if (length > offset)
7045 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7046}
7047
7048/* 8.84
7049 * MBMS Time to Data Transfer
7050 */
7051void
7052dissect_gtpv2_mbms_time_to_data_xfer(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7053{
7054 int offset = 0;
7055 uint8_t binary_secs;
7056 uint16_t real_secs;
7057
7058 binary_secs = tvb_get_uint8(tvb, offset);
7059 real_secs = (uint16_t)binary_secs + 1;
7060
7061 proto_tree_add_string_format_value(tree, hf_gtpv2_time_to_data_xfer, tvb, offset, 1, "", "%d second(s)", real_secs);
7062 proto_item_append_text(item, " %u second(s)", real_secs);
7063 offset += 1;
7064 if (length > 1)
7065 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7066}
7067
7068static const value_string gtpv2_throttling_delay_unit_vals[] = {
7069 { 0, "value is incremented in multiples of 2 seconds" },
7070 { 1, "value is incremented in multiples of 1 minute" },
7071 { 2, "value is incremented in multiples of 10 minutes" },
7072 { 3, "value is incremented in multiples of 1 hour" },
7073 { 4, "value is incremented in multiples of 10 hour" },
7074 { 7, "value indicates that the timer is deactivated" },
7075 { 0, NULL((void*)0) }
7076};
7077
7078/* 8.85 Throttling */
7079static void
7080dissect_gtpv2_throttling(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7081{
7082 int offset = 0;
7083 uint8_t oct;
7084
7085 proto_tree_add_item(tree, hf_gtpv2_throttling_delay_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7086 proto_tree_add_item(tree, hf_gtpv2_throttling_delay_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7087 offset++;
7088
7089 oct = tvb_get_uint8(tvb, offset);
7090 proto_tree_add_item(tree, hf_gtpv2_throttling_factor, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7091 if (oct > 0x64)
7092 proto_item_append_text(item, "Throttling factor: value beyond (0,100) is considered as 0");
7093 offset++;
7094
7095 if (length > 2)
7096 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length - 2, ENC_NA0x00000000);
7097
7098
7099}
7100
7101/* 8.86 Allocation/Retention Priority (ARP) */
7102void
7103dissect_gtpv2_arp(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7104{
7105 int offset = 0;
7106
7107 proto_tree_add_item(tree, hf_gtpv2_arp_pci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7108 proto_tree_add_item(tree, hf_gtpv2_arp_pl, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7109 proto_tree_add_item(tree, hf_gtpv2_arp_pvi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7110
7111 offset += 1;
7112 if (length > 1)
7113 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7114}
7115
7116/* 8.87 EPC Timer */
7117static const value_string gtpv2_timer_unit_vals[] = {
7118 {0, "value is incremented in multiples of 2 seconds"},
7119 {1, "value is incremented in multiples of 1 minute"},
7120 {2, "value is incremented in multiples of 10 minutes"},
7121 {3, "value is incremented in multiples of 1 hour"},
7122 {4, "value is incremented in multiples of 10 hour"},
7123 {5, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
7124 {6, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
7125 {7, "value indicates that the timer is infinite"},
7126 {0, NULL((void*)0)}
7127};
7128
7129void
7130dissect_gtpv2_epc_timer(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type, uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7131{
7132 switch (message_type) {
7133 case GTPV2_DL_DATA_NOTIF_ACK177:
7134 proto_item_append_text(item, "DL Buffering Duration");
7135 break;
7136 }
7137 /* XXX Todo: use code from packet-gsm_a_gm.c ? 10.5.7.4a GPRS TIMER 3*/
7138 proto_tree_add_item(tree, hf_gtpv2_timer_unit, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7139 proto_tree_add_item(tree, hf_gtpv2_timer_value, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7140
7141}
7142
7143/* 8.88 Signalling Priority Indication */
7144static void
7145dissect_gtpv2_sig_prio_ind(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7146{
7147 proto_tree_add_item(tree, hf_gtpv2_lapi, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7148}
7149
7150/* 8.89 Temporary Mobile Group Identity (TMGI) */
7151static void
7152dissect_gtpv2_tmgi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7153{
7154 int offset = 0;
7155 uint64_t tmgi;
7156
7157 tmgi = tvb_get_ntoh48(tvb, offset);
7158
7159 proto_item_append_text(item, "%012" PRIx64"l" "x", tmgi);
7160
7161 proto_tree_add_item(tree, hf_gtpv2_mbms_service_id, tvb, offset, 3, ENC_NA0x00000000);
7162 offset += 3;
7163
7164 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true1);
7165 offset += 3;
7166
7167 if (length > offset)
7168 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7169}
7170
7171/*
7172 * 8.90 Additional MM context for SRVCC
7173 * 3GPP TS 29.274 Figure 8.90-1
7174 */
7175static void
7176dissect_gtpv2_add_mm_cont_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7177{
7178 int offset = 0;
7179 proto_item *ms_cm_item;
7180 proto_tree *ms_cm_tree;
7181 uint8_t elm_len;
7182
7183 /* Length of Mobile Station Classmark 2 */
7184 elm_len = tvb_get_uint8(tvb, offset);
7185 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7186 offset += 1;
7187
7188 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters,
7189 * if they are not available, then the associated length field shall be set to zero, and the particular
7190 * parameter field shall not be present.
7191 */
7192 if(elm_len > 0){
7193 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
7194 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
7195 /* Mobile Station Classmark 2 */
7196 de_ms_cm_2(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7197 offset += elm_len;
7198 }
7199
7200 /* Length of Mobile Station Classmark 3 */
7201 elm_len = tvb_get_uint8(tvb, offset);
7202 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7203 offset += 1;
7204 if (elm_len > 0) {
7205 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
7206 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
7207 /* Mobile Station Classmark 3 */
7208 de_ms_cm_3(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7209 offset += elm_len;
7210 }
7211
7212 /* Length of Supported Codec List */
7213 elm_len = tvb_get_uint8(tvb, offset);
7214 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7215 offset += 1;
7216 if (elm_len > 0) {
7217 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
7218 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_supp_codec_list);
7219 /* Supported Codec List */
7220 de_sup_codec_list(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7221 offset += elm_len;
7222 }
7223
7224 if (length > offset)
7225 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7226}
7227
7228/* 8.91 Additional flags for SRVCC */
7229static void
7230dissect_gtpv2_add_flags_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7231{
7232 int offset = 0;
7233
7234 proto_tree_add_item(tree, hf_gtpv2_add_flags_for_srvcc_ics, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7235 proto_tree_add_item(tree, hf_gtpv2_vsrvcc_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7236 offset += 1;
7237
7238 if (length > 1)
7239 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7240}
7241
7242/* 8.92 Max MBR/APN-AMBR (MMBR) */
7243static void
7244dissect_gtpv2_mmbr(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7245{
7246 int offset = 0;
7247 uint32_t max_ul;
7248 uint32_t max_dl;
7249
7250 max_ul = tvb_get_ntohl(tvb, offset);
7251 proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_ul, tvb, offset, 4, max_ul, "%u %s",
7252 (max_ul) > 1000 ? max_ul/1000 : max_ul,
7253 (max_ul) > 1000 ? "Mbps" : "kbps");
7254
7255 offset += 4;
7256
7257 max_dl = tvb_get_ntohl(tvb, offset);
7258 proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_dl, tvb, offset, 4, max_dl, "%u %s",
7259 (max_dl) > 1000 ? max_dl/1000 : max_dl,
7260 (max_dl) > 1000 ? "Mbps" : "kbps");
7261}
7262
7263/* 8.93 MDT Configuration */
7264static void
7265dissect_gtpv2_mdt_config(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7266{
7267 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7268}
7269
7270/* 8.94 Additional Protocol Configuration Options (APCO) */
7271static void
7272dissect_gtpv2_apco(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7273{
7274 switch (message_type) {
7275 case GTPV2_CREATE_SESSION_REQUEST32:
7276 case GTPV2_DELETE_SESSION_REQUEST36:
7277 case GTPV2_BEARER_RESOURCE_COMMAND68:
7278 case GTPV2_CREATE_BEARER_RESPONSE96:
7279 case GTPV2_UPDATE_BEARER_RESPONSE98:
7280 case GTPV2_DELETE_BEARER_RESPONSE100:
7281 /* PCO options as MS to network direction */
7282 pinfo->link_dir = P2P_DIR_UL0;
7283 break;
7284 case GTPV2_CREATE_SESSION_RESPONSE33:
7285 case GTPV2_MODIFY_BEARER_RESPONSE35:
7286 case GTPV2_DELETE_SESSION_RESPONSE37:
7287 case GTPV2_CREATE_BEARER_REQUEST95:
7288 case GTPV2_UPDATE_BEARER_REQUEST97:
7289 case GTPV2_DELETE_BEARER_REQUEST99:
7290 /* PCO options as Network to MS direction: */
7291 pinfo->link_dir = P2P_DIR_DL1;
7292 break;
7293 default:
7294 break;
7295 }
7296 de_sm_pco(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
7297}
7298
7299/* 8.95 Absolute Time of MBMS Data Transfer */
7300static void
7301dissect_gtpv2_abs_mbms_data_tf_time(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7302{
7303 int offset = 0;
7304 char *time_str;
7305
7306 proto_tree_add_item_ret_time_string(tree, hf_gtpv2_abs_time_mbms_data, tvb, offset, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
7307 proto_item_append_text(item, "%s", time_str);
7308
7309 offset += 8;
7310 if (length > offset)
7311 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7312}
7313
7314/* 8.96 H(e)NB Information Reporting */
7315static const true_false_string gtpv2_henb_info_report_fti_vals = {
7316 "Start reporting H(e)NB local IP address and UDP port number information change",
7317 "Stop reporting H(e)NB local IP address and UDP port number information change",
7318};
7319
7320static void
7321dissect_gtpv2_henb_info_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7322{
7323 int offset = 0;
7324
7325 proto_tree_add_item(tree, hf_gtpv2_henb_info_report_fti, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7326 offset += 1;
7327
7328 if (length > 1)
7329 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7330}
7331
7332/* 8.97 IPv4 Configuration Parameters (IP4CP) */
7333static void
7334dissect_gtpv2_ip4cp(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7335{
7336 int offset = 0;
7337
7338 proto_tree_add_item(tree, hf_gtpv2_ip4cp_subnet_prefix_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7339 offset += 1;
7340 proto_tree_add_item(tree, hf_gtpv2_ip4cp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7341 offset += 4;
7342
7343 if (length > offset)
7344 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7345}
7346
7347/* 8.98 Change to Report Flags */
7348static void
7349dissect_gtpv2_change_report_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7350{
7351 int offset = 0;
7352
7353 proto_tree_add_item(tree, hf_gtpv2_change_report_flags_sncr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7354 proto_tree_add_item(tree, hf_gtpv2_change_report_flags_tzcr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7355 offset += 1;
7356
7357 if (length > 1)
7358 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7359}
7360
7361/* 8.99 Action Indication */
7362static const value_string gtpv2_action_indication_vals[] = {
7363 { 0, "No Action"},
7364 { 1, "Deactivation Indication"},
7365 { 2, "Paging Indication"},
7366 { 3, "Spare"},
7367 { 4, "Spare"},
7368 { 5, "Spare"},
7369 { 6, "Spare"},
7370 { 7, "Spare"},
7371 { 0, NULL((void*)0)}
7372};
7373static value_string_ext gtpv2_action_indication_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_action_indication_vals){ _try_val_to_str_ext_init, 0, (sizeof (gtpv2_action_indication_vals
) / sizeof ((gtpv2_action_indication_vals)[0]))-1, gtpv2_action_indication_vals
, "gtpv2_action_indication_vals", ((void*)0) }
;
7374
7375static void
7376dissect_gtpv2_action_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7377{
7378 int offset = 0;
7379
7380 proto_tree_add_item(tree, hf_gtpv2_action_indication_val, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7381 offset += 1;
7382
7383 if (length > 1)
7384 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7385}
7386
7387/*
7388 * 8.100 TWAN Identifier
7389 */
7390static const value_string gtpv2_twan_relay_id_type_vals[] = {
7391 { 0, "IPv4 or IPv6 Address" },
7392 { 1, "FQDN" },
7393 { 0, NULL((void*)0) }
7394};
7395
7396void
7397dissect_gtpv2_twan_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7398{
7399 int offset = 0;
7400 uint8_t flags=0;
7401 uint32_t ssid_len, civa_len, op_name_len, relay_id_type, relay_id_len, circuit_id_id_len;
7402 static int* const twan_id_flags[] = {
7403 &hf_gtpv2_twan_laii,
7404 &hf_gtpv2_twan_opnai,
7405 &hf_gtpv2_twan_plmni,
7406 &hf_gtpv2_twan_civai,
7407 &hf_gtpv2_twan_bssidi,
7408 NULL((void*)0)
7409 };
7410
7411 /* Octet 5 Spare LAII OPNAI PLMNI CIVAI BSSIDI */
7412 flags = tvb_get_uint8(tvb, offset);
7413 proto_tree_add_bitmask(tree, tvb, offset, hf_gtpv2_twan_flags, ett_gtpv2_twan_flags, twan_id_flags, ENC_BIG_ENDIAN0x00000000);
7414 offset++;
7415 /* Octet 6 SSID Length */
7416 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_ssid_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ssid_len);
7417 offset += 1;
7418 /* 7 to k SSID */
7419 proto_tree_add_item(tree, hf_gtpv2_twan_ssid, tvb, offset, ssid_len, ENC_NA0x00000000);
7420 offset += ssid_len;
7421 /* (k+1) to (k+6) BSSID The BSSIDI flag in octet 5 indicates whether the BSSID in octets 'k+1' to 'k+6' shall be present.*/
7422 if (flags & 0x01) {
7423 proto_tree_add_item(tree, hf_gtpv2_twan_bssid, tvb, offset, 6, ENC_NA0x00000000);
7424 offset += 6;
7425 }
7426 /* q Civic Address Length The CIVAI flag in octet 5 indicates whether the Civic Address Length
7427 * and Civic Address Information in octets 'q' and 'q+1' to 'q+r' shall be present.
7428 */
7429 if (flags & 0x02) {
7430 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_civa_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &civa_len);
7431 offset += 1;
7432 /* (q+1) to (q+r) Civic Address Information
7433 * ...it shall be encoded as defined in subclause 3.1 of IETF RFC 4776 [59] excluding the first 3 octets.
7434 * RFC 4776:
7435 * 3.1. Overall Format for DHCPv4
7436
7437 * 0 1 2 3
7438 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
7439 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7440 * | GEOCONF_CIVIC | N | what | country |
7441 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7442 * | code | civic address elements ...
7443 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7444 */
7445 proto_tree_add_item(tree, hf_gtpv2_twan_civa, tvb, offset, civa_len, ENC_NA0x00000000);
7446 offset += civa_len;
7447 }
7448 /* s to (s+3) TWAN PLMN-ID The PLMNI flag in octet 5 indicates whether the TWAN PLMN-ID
7449 * in octets 's' to 's+3' shall be present
7450 */
7451 if (flags & 0x04) {
7452 proto_tree_add_item(tree, hf_gtpv2_twan_plmnid, tvb, offset, 3, ENC_NA0x00000000);
7453 offset += 3;
7454 /* (q+1) to (q+r) Civic Address Information
7455 * ...it shall be encoded as defined in subclause 3.1 of IETF RFC 4776 [59] excluding the first 3 octets.
7456 */
7457 }
7458 /* t TWAN Operator Name Length, The OPNAI flag in octet 5 indicates whether the TWAN Operator Name Length and
7459 * TWAN Operator Name in octets 't' and 't+1' to 't+u' shall be present.
7460 */
7461 if (flags & 0x08) {
7462 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_op_name_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &op_name_len);
7463 offset += 1;
7464 /* (t+1) to (t+u) TWAN Operator Name. The TWAN Operator Name shall be encoded as specified in subclause 19. 8 of 3GPP TS 23.003 */
7465 proto_tree_add_item(tree, hf_gtpv2_twan_op_name, tvb, offset, op_name_len, ENC_NA0x00000000);
7466 offset += op_name_len;
7467 }
7468 /* The LAII flag in octet 5 indicates whether the Logical Access ID information is present in the TWAN Identifier */
7469 if (flags & 0x10) {
7470 /* v Relay Identity Type */
7471 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_relay_id_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &relay_id_type);
7472 offset += 1;
7473 /* (v+1) Relay Identity Length*/
7474 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_relay_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &relay_id_len);
7475 offset += 1;
7476 /* (v+2) to (v+w) Relay Identity */
7477 switch (relay_id_type) {
7478 case 0:
7479 /* IPv4 or IPv6 Address */
7480 if (relay_id_len == 4) {
7481 /* IPv4 */
7482 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7483 offset += 4;
7484 } else {
7485 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7486 offset += 16;
7487 }
7488 break;
7489 case 1:
7490 /* fall trough */
7491 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id, tvb, offset, relay_id_len, ENC_ASCII0x00000000);
7492 offset += relay_id_len;
7493 default:
7494 break;
7495 }
7496 /* X Circuit-ID Length */
7497 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_circuit_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &circuit_id_id_len);
7498 offset += 1;
7499 /* (x+1) to (x+y) Circuit-ID */
7500 proto_tree_add_item(tree, hf_gtpv2_twan_circuit_id, tvb, offset, circuit_id_id_len, ENC_NA0x00000000);
7501 offset += circuit_id_id_len;
7502 }
7503
7504 if (offset < (int)length) {
7505 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
7506 }
7507
7508}
7509/*
7510 * 8.101 ULI Timestamp
7511 */
7512static void
7513dissect_gtpv2_uli_timestamp(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7514{
7515 char *time_str;
7516
7517 /* Octets 5 to 8 are encoded in the same format as the first four octets of the 64-bit timestamp
7518 * format as defined in section 6 of IETF RFC 5905
7519 */
7520
7521 proto_tree_add_item_ret_time_string(tree, hf_gtpv2_uli_timestamp, tvb, 0, 4, ENC_TIME_NTP0x00000002|ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
7522 proto_item_append_text(item, "%s", time_str);
7523
7524}
7525/*
7526 * 8.102 MBMS Flags
7527 */
7528static void
7529dissect_gtpv2_mbms_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7530{
7531 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7532}
7533/*
7534 * 8.103 RAN/NAS Cause
7535 */
7536static const value_string ran_nas_prot_type_vals[] = {
7537 { 1, "S1AP Cause" },
7538 { 2, "EMM Cause" },
7539 { 3, "ESM Cause" },
7540 { 4, "Diameter Cause" },
7541 { 5, "IKEv2 Cause" },
7542 { 0, NULL((void*)0) },
7543};
7544
7545static void
7546dissect_gtpv2_ran_nas_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7547{
7548 int offset = 0;
7549 uint8_t octet = tvb_get_uint8(tvb, offset);
7550 uint8_t proto_type = (octet >> 4);
7551 int cause_type = 0;
7552
7553 proto_tree_add_item(tree, hf_gtpv2_ran_nas_protocol_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7554
7555 if (proto_type == 1) {
7556 proto_tree_add_item(tree, hf_gtpv2_ran_nas_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7557 cause_type = octet & 0x0F;
7558 }
7559 offset += 1;
7560
7561 switch (proto_type) {
7562 case 1:
7563 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
7564 break;
7565 case 2:
7566 proto_tree_add_item(tree, hf_gtpv2_emm_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7567 break;
7568 case 3:
7569 proto_tree_add_item(tree, hf_gtpv2_esm_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7570 break;
7571 case 4:
7572 proto_tree_add_item(tree, hf_gtpv2_diameter_cause, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7573 break;
7574 case 5:
7575 proto_tree_add_item(tree, hf_gtpv2_ikev2_cause, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7576 break;
7577 default:
7578 proto_tree_add_item(tree, hf_gtpv2_ran_nas_cause_value, tvb, offset, length - offset, ENC_BIG_ENDIAN0x00000000);
7579 break;
7580 }
7581}
7582/*
7583 * 8.104 CN Operator Selection Entity
7584 */
7585static void
7586dissect_gtpv2_cn_operator_selection_entity(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7587{
7588 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7589}
7590/*
7591 * 8.105 Trusted WLAN Mode Indication
7592 */
7593static void
7594dissect_gtpv2_trust_wlan_mode_ind(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7595{
7596 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7597}
7598/*
7599 * 8.106 Node Number
7600 */
7601static void
7602dissect_gtpv2_node_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7603{
7604 int offset = 0;
7605 uint32_t len;
7606 tvbuff_t* new_tvb;
7607
7608 /* Octet 5 Length of Node Number*/
7609 proto_tree_add_item_ret_uint(tree, hf_gtpv2_node_number_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &len);
7610 offset += 1;
7611
7612 /* The Node number shall carry an ISDN number...
7613 * shall be coded according to the contents of ISDN-AddressString data type
7614 * defined in 3GPP TS 29.002
7615 */
7616 new_tvb = tvb_new_subset_length(tvb, offset, len);
7617 dissect_gsm_map_msisdn(new_tvb, pinfo, tree);
7618}
7619/*
7620 * 8.107 Node Identifier
7621 */
7622static void
7623dissect_gtpv2_node_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7624{
7625 int offset = 0;
7626 uint32_t name_len;
7627
7628 /*
7629 RFC 6733
7630 DiameterIdentity
7631
7632 The DiameterIdentity format is derived from the OctetString Basic
7633 AVP Format....In this document, note that DiameterIdentity is
7634 in ASCII form.
7635
7636 TS 29.274
7637
7638 If the Node Identifier contains a SGSN Identifier then:
7639 - the Node Name shall be coded as the Diameter identity of the SGSN as defined in subclause 6.4.13 of 3GPP TS 29.173 [57] and;
7640 - the Node Realm shall be coded as the Diameter realm identity of the SGSN and as defined in subclause 6.4.14 of 3GPP TS 29.173 [57] and;
7641 - Both the Node Name and the Node Realm shall be present and neither the Length of Node Name nor the Length of Node Realm shall be zero.
7642 6.4.13 SGSN-Name
7643 The SGSN-Name AVP is of type DiameterIdentity...see IETF RFC 6733
7644 6.4.14 SGSN-Realm
7645 The SGSN-Realm AVP is of type DiameterIdentity...see IETF RFC 6733
7646
7647 If the Node Identifier contains a MME Identifier then:
7648 - the Node Name shall be coded as the Diameter identity of the MME as defined in subclause 6.4.4 of 3GPP TS 29.173 [57] and;
7649 - the Node Realm shall be coded as the Diameter realm identity of the MME as defined in subclause 6.4.12 of 3GPP TS 29.173 [57] and;
7650 - Both the Node Name and the Node Realm shall be present and neither the Length of Node Name nor the Length of Node Realm shall be zero.
7651 6.4.4 MME-Name
7652 The MME-Name AVP is of type DiameterIdentity...see IETF RFC 6733
7653 6.4.12 MME-Realm
7654 The MME-Realm AVP is of type DiameterIdentity...see IETF RFC 6733
7655
7656 If the Node Identifer contains a 3GPP AAA Server Identifier then:
7657 - the Node Name shall be coded as the 3GPP-AAA-Server-Name as defined in subclause 8.2.3.24 of 3GPP TS 29.273 [68] and;
7658 8.2.3.24 3GPP-AAA-Server-Name
7659 The 3GPP-AAA-Server-Name AVP is of type DiameterIdentity
7660 - the Node Realm shall be coded as the Diameter realm of the 3GPP AAA server in the format of a Diameter identity as defined in IETF RFC 3588 [39].
7661
7662 If the Node Identifier contains an SCEF/IWK-SCEF information, then:
7663 - the Node Name shall be coded as the SCEF-ID as defined in subclause 8.4.5 of 3GPP TS 29.336 [69] and;
7664 8.4.5 SCEF-ID
7665 The SCEF- ID AVP is of type DiameterIdentity
7666 - the Node Realm shall be coded as the Diameter realm of the SCEF as defined in subclause 7.3.207 of 3GPP TS 29.272 [70].
7667
7668 */
7669 /* Octet 5 Length of Node Name */
7670 proto_tree_add_item_ret_uint(tree, hf_gtpv2_length_of_node_name, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &name_len);
7671 offset++;
7672 /* Node Name */
7673 proto_tree_add_item(tree, hf_gtpv2_node_name, tvb, offset, name_len, ENC_UTF_80x00000002);
7674 offset = offset + name_len;
7675 /* Length of Node Realm */
7676 proto_tree_add_item_ret_uint(tree, hf_gtpv2_length_of_node_realm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &name_len);
7677 offset++;
7678 /* Node Realm */
7679 proto_tree_add_item(tree, hf_gtpv2_node_realm, tvb, offset, name_len, ENC_UTF_80x00000002);
7680 offset = offset + name_len;
7681 if(offset < length){
7682 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
7683 }
7684}
7685/*
7686 * 8.108 Presence Reporting Area Action
7687 */
7688
7689/*
7690 * The Presence-Reporting-Area-Elements-List AVP (AVP code 2820)
7691 * is of type Octetstring and is coded as specified in 3GPP TS 29.274 [22]
7692 * in Presence Reporting Area Action IE, starting from octet 9.
7693 */
7694
7695static int
7696dissect_diameter_3gpp_presence_reporting_area_elements_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
7697{
7698 /*diam_sub_dis_t *diam_sub_dis = (diam_sub_dis_t*)data;*/
7699 proto_tree *sub_tree;
7700 proto_item *item;
7701 int offset = 0, i;
7702 unsigned length;
7703 uint32_t no_tai, no_rai, no_mENB, no_hENB, no_ECGI, no_sai, no_cgi, no_ext_mENB;
7704 char *append_str;
7705 length = tvb_reported_length(tvb);
7706
7707 /* Octet 9 Number of TAI Number of RAI */
7708 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_tai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_tai);
7709 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_rai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_rai);
7710 offset++;
7711 /* Octet 10 Spare Number of Macro eNodeB */
7712 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_m_enodeb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_mENB);
7713 offset++;
7714 /* Octet 11 Spare Number of Home eNodeB */
7715 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_h_enodeb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_hENB);
7716 offset++;
7717 /* Octet 12 Spare Number of ECGI */
7718 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_ecgi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_ECGI);
7719 offset++;
7720 /* Octet 13 Spare Number of SAI */
7721 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_sai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_sai);
7722 offset++;
7723 /* Octet 14 Spare Number of CGI */
7724 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_cgi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_cgi);
7725 offset++;
7726 /* Octet 15 to k TAIs [1..15] */
7727 i = 1;
7728 while (no_tai > 0){
7729 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 5, ett_gtpv2_preaa_tais, &item, "Tracking Area Identity (TAI) Number %u",i);
7730 append_str = dissect_gtpv2_tai(tvb, pinfo, sub_tree, &offset, false0);
7731 proto_item_append_text(item, " %s",append_str);
7732 i++;
7733 no_tai--;
7734 }
7735 /* Octet (k+1) to m Macro eNB IDs [1..63]
7736 * Macro eNB IDs in octets 'k+1' to 'm', if any, shall be encoded as per octets 6 to 11 of the Target ID for type Macro eNodeB in figure 8.51-2.
7737 * Octets 'k+1' to 'm' shall be absent if the field 'Number of Macro eNodeB' is set to the value '0'.
7738 */
7739 i = 1;
7740 while (no_mENB > 0){
7741 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 6, ett_gtpv2_preaa_menbs, &item, "Macro eNB ID %u",i);
7742 append_str = dissect_gtpv2_macro_enodeb_id(tvb, pinfo, sub_tree, &offset);
7743 proto_item_append_text(item, " %s",append_str);
7744 i++;
7745 no_mENB--;
7746 }
7747 /* Octet (m+1) to p Home eNB IDs [1..63]
7748 * Home eNB IDs in octets 'm+1' to 'p', if any, shall be encoded as per octets 6 to 12 of the Target ID for type Home eNodeB in figure 8.51-3.
7749 * Octets 'm+1' to 'p' shall be absent if the field 'Number of Home eNodeB' is set to the value '0'.
7750 */
7751 i = 1;
7752 while (no_hENB > 0){
7753 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_henbs, &item, "Home eNB ID %u",i);
7754 append_str = dissect_gtpv2_home_enodeb_id(tvb, pinfo, sub_tree, &offset);
7755 proto_item_append_text(item, " %s",append_str);
7756 i++;
7757 no_hENB--;
7758 }
7759 /* Octet (p+1) to q ECGIs [1..63]
7760 * ECGIs in octets 'p+1' to 'q', if any, shall be encoded as per the ECGI field in subclause 8.21.5.
7761 * Octets 'p+1' to 'q' shall be absent if the field 'Number of ECGI' is set to the value '0'.
7762 */
7763 i = 1;
7764 while (no_ECGI > 0){
7765 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_ecgis, &item, "ECGI ID %u",i);
7766 append_str = dissect_gtpv2_ecgi(tvb, pinfo, sub_tree, &offset);
7767 proto_item_append_text(item, " %s",append_str);
7768 i++;
7769 no_ECGI--;
7770 }
7771 /* Octet (q+1) to r RAIs [1..15]
7772 * RAIs in octets 'q+1' to 'r', if any, shall be encoded as per the RAI field in subclause 8.21.3.
7773 * Octets 'q+1' to 'r' shall be absent if the field 'Number of RAI' is set to the value '0'.
7774 */
7775 i = 1;
7776 while (no_rai > 0){
7777 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_rais, &item, "RAI ID %u",i);
7778 append_str = dissect_gtpv2_rai(tvb, pinfo, sub_tree, &offset);
7779 proto_item_append_text(item, " %s",append_str);
7780 i++;
7781 no_rai--;
7782 }
7783 /* Octet (r+1) to s SAIs [1..63]
7784 * SAIs in octets 'r+1' to 's', if any, shall be encoded as per the SAI field in subclause 8.21.2.
7785 * Octets 'r+1' to 's' shall be absent if the field 'Number of SAI' is set to the value '0'.
7786 */
7787 i = 1;
7788 while (no_sai > 0){
7789 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_sais, &item, "SAI ID %u",i);
7790 append_str = dissect_gtpv2_sai_common(tvb, pinfo, sub_tree, &offset);
7791 proto_item_append_text(item, " %s",append_str);
7792 i++;
7793 no_sai--;
7794 }
7795 /* Octet (s+1) to t CGIs [1..63]
7796 * CGIs in octets 's+1' to 't', if any, shall be encoded as per the CGI field in subclause 8.21.1.
7797 * Octets 's+1' to 't' shall be absent if the field 'Number of CGI' is set to the value '0'.
7798 */
7799 i = 1;
7800 while (no_cgi > 0){
7801 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_cgis, &item, "CGI ID %u",i);
7802 append_str = dissect_gtpv2_cgi(tvb, pinfo, sub_tree, &offset);
7803 proto_item_append_text(item, " %s",append_str);
7804 i++;
7805 no_cgi--;
7806 }
7807 if (offset >= (int) length)
7808 return length;
7809 /* Octet t+1 Spare Number of Extended Macro eNodeB */
7810 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_ext_mENB);
7811 offset++;
7812 /* Octet (t+2) to v Extended Macro eNB IDs [1..63]
7813 * Extended Macro eNB IDs in octets 't+2' to 'v', if any, shall be encoded as per octets 6 to 11 of the Target ID for type Extended Macro eNodeB in figure 8.51-5.
7814 * Octets 'k+1' to 'm' shall be absent if the field 'Number of Extended Macro eNodeB' is set to the value '0'.
7815 */
7816 i = 1;
7817 while (no_ext_mENB > 0){
7818 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 6, ett_gtpv2_preaa_ext_menbs, &item, "Extended Macro eNB ID %u",i);
7819 append_str = dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, sub_tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
7820 proto_item_append_text(item, " %s",append_str);
7821 i++;
7822 no_ext_mENB--;
7823 }
7824
7825 return length;
7826}
7827
7828static const value_string gtpv2_pres_rep_area_action_vals[] = {
7829 { 1, "Start Reporting change"},
7830 { 2, "Stop Reporting change"},
7831 { 3, "Modify Presence Reporting Area elements"},
7832 { 0, NULL((void*)0)}
7833};
7834
7835static void
7836dissect_gtpv2_pres_rep_area_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7837{
7838 int offset = 0;
7839 tvbuff_t * new_tvb;
7840
7841 static int * const flags[] = {
7842 &hf_gtpv2_pres_rep_area_act_inapra,
7843 &hf_gtpv2_pres_rep_area_action,
7844 NULL((void*)0)
7845 };
7846
7847 /* Octet 5 Spare INAPRA Action */
7848 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN0x00000000);
7849 offset++;
7850
7851 if (length == 1)
7852 return;
7853 /* Octet 6 to 8 Presence Reporting Area Identifier */
7854 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7855 offset+=3;
7856 if (length == 4)
7857 return;
7858
7859 new_tvb = tvb_new_subset_length(tvb, offset, length-4);
7860
7861 /* Share the rest of the dissection with the AVP dissector */
7862 dissect_diameter_3gpp_presence_reporting_area_elements_list(new_tvb, pinfo, tree, NULL((void*)0));
7863
7864}
7865/*
7866 * 8.109 Presence Reporting Area Information
7867 */
7868static void
7869dissect_gtpv2_pres_rep_area_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7870{
7871 int offset = 0;
7872 uint64_t gtpv2_pres_rep_area_info_flags_val = 0;
7873
7874 /*Octet 5 to 7 Presence Reporting Area Identifier */
7875 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_id, tvb, offset, 3 , ENC_BIG_ENDIAN0x00000000);
7876 offset+=3;
7877
7878 /*Octet 8 Spare Spare Spare Spare INAPRA APRA OPRA IPRA */
7879 static int * const gtpv2_pres_rep_area_info_flags[] = {
7880 &hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare,
7881 &hf_gtpv2_pres_rep_area_info_flags_b3_inapra,
7882 &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
7883 &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
7884 &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
7885 NULL((void*)0)
7886 };
7887
7888 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_gtpv2_pres_rep_area_info_flags, ett_gtpv2_pres_rep_area_info,
7889 gtpv2_pres_rep_area_info_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08, &gtpv2_pres_rep_area_info_flags_val);
7890 offset+=1;
7891
7892 /* 3GPP TS 29.212 v14.7.0:
7893 * If the Additional PRA (APRA) flag is set to 1, [...]
7894 * subsequent 4 octets shall then be present
7895 * and shall contain the identifier of the individual PRA
7896 */
7897 if(gtpv2_pres_rep_area_info_flags_val & 0x04){
7898 /* Octets a to (a+2) Additional PRA Identifier */
7899 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_additional_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7900 offset+=3;
7901
7902 /*Octet a+3 Spare Spare Spare Spare Spare APRA OPRA IPRA */
7903 static int * const gtpv2_pres_rep_area_info_flags_no_inapra[] = {
7904 &hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare,
7905 &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
7906 &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
7907 &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
7908 NULL((void*)0)
7909 };
7910
7911 while(offset < length){
7912 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_gtpv2_pres_rep_area_info_flags_no_inapra, ett_gtpv2_pres_rep_area_info,
7913 gtpv2_pres_rep_area_info_flags_no_inapra, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08, &gtpv2_pres_rep_area_info_flags_val);
7914 offset+=1;
7915
7916 if(gtpv2_pres_rep_area_info_flags_val & 0x04){
7917 /* Octets b to (b+2) Additional PRA Identifier */
7918 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_additional_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7919 offset+=3;
7920 }
7921 }
7922 }
7923}
7924/*
7925 * 8.110 TWAN Identifier Timestamp
7926 */
7927static void
7928dissect_gtpv2_twan_identifier_timestamp(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7929{
7930 char *time_str;
7931
7932 /* TWAN Identifier Timestamp value */
7933 /* Octets 5 to 8 are encoded in the same format as the first four octets of the 64-bit timestamp
7934 * format as defined in section 6 of IETF RFC 5905
7935 */
7936
7937 proto_tree_add_item_ret_time_string(tree, hf_gtpv2_twan_id_ts, tvb, 0, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
7938 proto_item_append_text(item, "%s", time_str);
7939
7940}
7941/*
7942 * 8.111 Overload Control Information
7943 */
7944static void
7945
7946dissect_gtpv2_overload_control_inf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7947{
7948
7949 int offset = 0;
7950 proto_tree *grouped_tree;
7951 tvbuff_t *new_tvb;
7952
7953 proto_item_append_text(item, "[Grouped IE]");
7954 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_overload_control_information);
7955 new_tvb = tvb_new_subset_length(tvb, offset, length);
7956
7957 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_OVERLOAD_CONTROL_INF180);
7958}
7959/*
7960 * 8.112 Load Control Information
7961 */
7962static void
7963dissect_gtpv2_load_control_inf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7964{
7965 int offset = 0;
7966 tvbuff_t *new_tvb;
7967 proto_tree *grouped_tree;
7968
7969 proto_item_append_text(item, "[Grouped IE]");
7970 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_load_control_inf);
7971
7972 new_tvb = tvb_new_subset_length(tvb, offset, length);
7973 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, 0, message_type, args, GTPV2_IE_LOAD_CONTROL_INF181);
7974}
7975/*
7976 * 8.113 Metric
7977 */
7978static void
7979dissect_gtpv2_metric(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7980{
7981 uint32_t oct;
7982
7983 proto_tree_add_item_ret_uint(tree, hf_gtpv2_metric, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &oct);
7984 if (oct > 0x64) {
7985 proto_item_append_text(item, "Metric: value beyond 100 is considered as 0");
7986 } else {
7987 proto_item_append_text(item, "%u", oct);
7988
7989 }
7990}
7991/*
7992 * 8.114 Sequence Number
7993 */
7994static void
7995dissect_gtpv2_seq_no(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
7996{
7997 uint32_t seq;
7998 proto_tree_add_item_ret_uint(tree, hf_gtpv2_sequence_number, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &seq);
7999 proto_item_append_text(item, "%u", seq);
8000}
8001/*
8002 * 8.115 APN and Relative Capacity
8003 */
8004static void
8005dissect_gtpv2_apn_and_relative_capacity(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8006{
8007 int offset = 0;
8008 uint8_t oct, apn_length;
8009 const uint8_t *apn = NULL((void*)0);
8010
8011 oct = tvb_get_uint8(tvb, offset);
8012 proto_tree_add_item(tree, hf_gtpv2_relative_capacity, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8013 if((oct > 0x64) || (oct < 0x01))
8014 proto_item_append_text(item, "Relative Capacity: value beyond (1,100) is considered as 0");
8015 offset += 1;
8016 apn_length = tvb_get_uint8(tvb, offset);
8017 proto_tree_add_item(tree, hf_gtpv2_apn_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8018 offset += 1;
8019
8020 if (apn_length > 0) {
8021 proto_item* pi;
8022 pi = proto_tree_add_item_ret_string(tree, hf_gtpv2_apn, tvb, offset, apn_length, ENC_APN_STR0x00000054 | ENC_NA0x00000000, pinfo->pool, &apn);
8023 if (apn_length > 100)
8024 expert_add_info(pinfo, pi, &ei_gtpv2_apn_too_long);
8025 }
8026}
8027/*
8028 * 8.117 Paging and Service Information
8029 */
8030static void
8031dissect_gtpv2_paging_and_service_inf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8032{
8033 int offset = 0;
8034 uint8_t ppi_flag;
8035
8036 /* Spare (all bits set to 0) B8 - B5 */
8037 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8038 /* EPS Bearer ID (EBI) B4 - B1 */
8039 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8040 offset += 1;
8041
8042 /* Spare B8 - B2 */
8043 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN0x00000000);
8044 /* Paging Policy Indication flag (PPI) */
8045 ppi_flag = tvb_get_uint8(tvb, offset);
8046 proto_tree_add_item(tree, hf_gtpv2_ppi_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8047 offset += 1;
8048
8049 if(ppi_flag & 1){
8050 /* Spare B8 - B7 */
8051 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 2, ENC_BIG_ENDIAN0x00000000);
8052 /* Paging Policy Indication Value */
8053 proto_item_append_text(tree, " (PPI Value: %s)", val_to_str_ext_const(tvb_get_uint8(tvb, offset), &dscp_vals_ext, "Unknown"));
8054 proto_tree_add_item(tree, hf_gtpv2_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8055 }
8056}
8057/*
8058 * 8.118 Integer Number
8059 */
8060static void
8061dissect_gtpv2_integer_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8062{
8063 int offset = 0;
8064 /* The Integer Number value shall be encoded as further described below for the following information elements:
8065 * Maximum Wait Time IE: the length shall be set to 2, i.e. the integer number value shall be encoded as a 16 bit unsigned integer.
8066 * DL Buffering Suggested Packet Count IE: the length shall be set to 1 or 2;
8067 * UE Usage Type IE: the length shall be set to 1, i.e. the integer number value shall be encoded as a 8 bit unsigned integer as specified in subclause 7.3.202 of 3GPP TS 29.272 [70].
8068 */
8069 if (length <= 4) {
8070 /* Only handle up to 32 bits for now */
8071 switch (message_type) {
8072 case GTPV2_CREATE_SESSION_REQUEST32:
8073 proto_item_append_text(item, "Maximum Wait Time");
8074 proto_tree_add_item(tree, hf_gtpv2_maximum_wait_time, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8075 break;
8076 case GTPV2_DL_DATA_NOTIF_ACK177:
8077 proto_item_append_text(item, "DL Buffering Suggested Packet Count");
8078 proto_tree_add_item(tree, hf_gtpv2_dl_buf_sug_pkt_cnt, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8079 break;
8080 case GTPV2_FORWARD_RELOCATION_REQ133:
8081 case GTPV2_CONTEXT_RESPONSE131:
8082 case GTPV2_IDENTIFICATION_RESPONSE129:
8083 switch (instance) {
8084 case 0:
8085 /* If the UE Usage Type is not available in the old MME/SGSN/AMF, the length field of this IE shall be set to 0. */
8086 proto_item_append_text(item, "UE Usage Type");
8087 if (length > 0) {
8088 proto_tree_add_item(tree, hf_gtpv2_ue_usage_type, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8089 } else {
8090 proto_item_append_text(item, " not available in the old MME/SGSN/AMF");
8091 }
8092 break;
8093 case 1:
8094 /* Remaining Running Service Gap Timer */
8095 proto_tree_add_item(tree, hf_gtpv2_rem_run_serv_gap_t, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8096 break;
8097 default:
8098 proto_tree_add_item(tree, hf_gtpv2_integer_number_val, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8099 break;
8100 }
8101 break;
8102 default:
8103 proto_tree_add_item(tree, hf_gtpv2_integer_number_val, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8104 break;
8105 }
8106 } else {
8107 /* value not handled, yet*/
8108 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_int_size_not_handled, tvb, offset, length);
8109
8110 }
8111
8112}
8113/*
8114 * 8.119 Millisecond Time Stamp
8115 */
8116
8117static void
8118dissect_gtpv2_ms_ts(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type, uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8119{
8120 int offset = 0;
8121 /* Octets 5 to 10 represent a 48 bit unsigned integer in network order format and are encoded as
8122 * the number of milliseconds since 00:00:00 January 1, 1900 00:00 UTC, i.e. as the
8123 * rounded value of 1000 x the value of the 64-bit timestamp (Seconds + (Fraction / (1<<32)))
8124 * defined in section 6 of IETF RFC 5905
8125 */
8126 switch (message_type) {
8127 case GTPV2_CREATE_SESSION_REQUEST32:
8128 /*proto_item_append_text(item, "Origination time stamp");*/
8129 proto_tree_add_item(tree, hf_gtpv2_origination_ts, tvb, offset, length, ENC_TIME_MSEC_NTP0x00000022 | ENC_BIG_ENDIAN0x00000000);
8130 break;
8131 default:
8132 proto_tree_add_item(tree, hf_gtpv2_ms_ts, tvb, offset, 6, ENC_TIME_MSEC_NTP0x00000022 | ENC_BIG_ENDIAN0x00000000);
8133 break;
8134 }
8135}
8136
8137/*
8138 * 8.120 Monitoring Event Information
8139 */
8140static void
8141dissect_gtpv2_mon_event_inf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8142{
8143 int offset = 0;
8144 bool_Bool srie;
8145 uint32_t scef_id_len;
8146
8147 /* Octet 4 higher four bits flags SIRE, NSCF, NSUI and NSUR */
8148 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_inf_srie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srie);
8149 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nscf, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8150 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nsui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8151 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nsur, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8152
8153 /* Octet 4 lower four bits Instance */
8154 proto_tree_add_item(tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8155 offset++;
8156
8157 /* Octet 5 to 8 SCEF Reference ID */
8158 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_reference_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8159 offset += 4;
8160 /* Octet 9 Length of SCEF ID */
8161 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mon_event_inf_scef_id_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &scef_id_len);
8162 offset++;
8163 /* Octet 10 to k SCEF ID */
8164 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_id, tvb, offset, scef_id_len, ENC_UTF_80x00000002);
8165 offset = offset + scef_id_len;
8166 /* Octet (k+1) to (k+2) Remaining Number of Reports */
8167 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_remaining_number_of_reports, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000 );
8168 offset += 2;
8169
8170 if (srie) {
8171 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_reference_id_ext, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8172 offset += 8;
8173 }
8174
8175 if(offset < length){
8176 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length - offset);
8177 }
8178}
8179
8180/*
8181 * 8.125 CIoT Optimizations Support Indication
8182 */
8183static void
8184dissect_gtpv2_ciot_opt_support_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8185{
8186 int offset;
8187 static int * const ciot_flags[] = {
8188 &hf_gtpv2_ciot_support_ind_spare_bits,
8189 &hf_gtpv2_ciot_support_ind_bit4,
8190 &hf_gtpv2_ciot_support_ind_bit3,
8191 &hf_gtpv2_ciot_support_ind_bit2,
8192 &hf_gtpv2_ciot_support_ind_bit1,
8193 NULL((void*)0)
8194 };
8195
8196 offset = 0;
8197 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_gtpv2_ciot_support_ind, ett_gtpv2_ciot_support_ind, ciot_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
8198
8199 offset += 1;
8200 if (length - offset) {
8201 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8202 }
8203}
8204
8205/*
8206 * 8.126 SCEF PDN Connection
8207 */
8208static void
8209dissect_gtpv2_scef_pdn_connection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args)
8210{
8211 int offset = 0;
8212 proto_tree *grouped_tree;
8213 tvbuff_t *new_tvb;
8214
8215 proto_item_append_text(item, "[Grouped IE]");
8216 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
8217 new_tvb = tvb_new_subset_length(tvb, offset, length);
8218
8219 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_SCEF_PDN_CONNECTION195);
8220
8221}
8222
8223
8224/*
8225 * 8.127 Header Compression Configuration
8226 */
8227static void
8228dissect_gtpv2_header_comp_comf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8229{
8230 int offset = 0;
8231
8232 static int * const gtpv2_rohc_profile_flags_flags[] = {
8233 &hf_gtpv2_rohc_profiles_bit7,
8234 &hf_gtpv2_rohc_profiles_bit6,
8235 &hf_gtpv2_rohc_profiles_bit5,
8236 &hf_gtpv2_rohc_profiles_bit4,
8237 &hf_gtpv2_rohc_profiles_bit3,
8238 &hf_gtpv2_rohc_profiles_bit2,
8239 &hf_gtpv2_rohc_profiles_bit1,
8240 &hf_gtpv2_rohc_profiles_bit0,
8241 NULL((void*)0)
8242 };
8243
8244 /* Octet 5 to 6 ROHC Profiles */
8245
8246 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_gtpv2_rohc_profile_flags,
8247 ett_gtpv2_rohc_profile_flags, gtpv2_rohc_profile_flags_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
8248 offset++;
8249 proto_tree_add_item(tree, hf_gtpv2_spare_w0, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8250 offset++;
8251 /* Octet 7 to 8 MAX_CID*/
8252 proto_tree_add_item(tree, hf_gtpv2_max_cid, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8253
8254}
8255
8256/*
8257 * 8.129 Serving PLMN Rate Control
8258 */
8259static void
8260dissect_gtpv2_serv_plmn_rate_control(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8261{
8262 int offset = 0;
8263 proto_tree_add_item(tree, hf_gtpv2_uplink_rate_limit, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8264 offset += 2;
8265 proto_tree_add_item(tree, hf_gtpv2_downlink_rate_limit, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8266}
8267
8268/*
8269 * 8.130 Counter
8270 */
8271static void
8272dissect_gtpv2_counter(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8273{
8274 int offset = 0;
8275
8276 /* Timestamp value */
8277 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
8278 *format as defined in section 6 of IETF RFC 5905
8279 */
8280
8281 proto_tree_add_item(tree, hf_gtpv2_timestamp_value, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8282 offset += 4;
8283 proto_tree_add_item(tree, hf_gtpv2_counter_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8284}
8285
8286/*
8287 * 8.131 Mapped UE Usage Type
8288 */
8289
8290static void
8291dissect_gtpv2_mapped_ue_usage_type(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8292{
8293 int offset = 0;
8294
8295 proto_tree_add_item(tree, hf_gtpv2_mapped_ue_usage_type, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8296 offset += 2;
8297 if (length > offset) {
8298 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8299 }
8300}
8301
8302/*
8303 * 8.132 Secondary RAT Usage Data Report
8304 */
8305static const value_string gtpv2_secondary_rat_type_vals[] = {
8306 { 0, "NR" },
8307 { 1, "Unlicensed Spectrum"},
8308 { 0, NULL((void*)0) }
8309};
8310
8311static void
8312dissect_gtpv2_secondary_rat_usage_data_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8313{
8314 tvbuff_t *new_tvb;
8315 proto_tree *sub_tree;
8316 int offset = 0;
8317 uint32_t srudn_len;
8318 uint64_t gtpv2_secondary_rat_usage_data_report_flags_val = 0;
8319
8320 static int * const secondary_rat_usage_data_report_flags[] = {
8321 &hf_gtpv2_secondary_rat_usage_data_report_spare_bits,
8322 &hf_gtpv2_secondary_rat_usage_data_report_bit3,
8323 &hf_gtpv2_secondary_rat_usage_data_report_bit2,
8324 &hf_gtpv2_secondary_rat_usage_data_report_bit1,
8325 NULL((void*)0)
8326 };
8327
8328 /*
8329 * The following bits within Octet 5 shall indicate:
8330 * Bit 8 to 3 - Spare, for future use and set to zero.
8331 * Bit 3 - SRUDN (Secondary RAT Usage Report from NG-RAN)
8332 * Bit 2 - IRSGW (Intended Receiver SGW)
8333 * Bit 1 - IRPGW (Intended Receiver PGW)
8334 */
8335 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, 0, hf_gtpv2_secondary_rat_usage_data_report, ett_gtpv2_secondary_rat_usage_data_report,
8336 secondary_rat_usage_data_report_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01, &gtpv2_secondary_rat_usage_data_report_flags_val);
8337 offset += 1;
8338
8339 /* Octet 6 RAT Type */
8340 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_rat_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8341 offset += 1;
8342
8343 /* Octet 7 EPS Bearer ID */
8344 /* Spare (all bits set to 0) B8 - B5 */
8345 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
8346 /* EPS Bearer ID (EBI) B4 - B1 */
8347 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8348 offset += 1;
8349
8350 /*
8351 * Octets 8 to 11 and 12 to 15 shall be encoded in the same format as the first four octets of the 64-bit timestamp
8352 * format as defined in section 6 of IETF RFC 5905
8353 */
8354
8355 /* Octets 8 to 11 Start timestamp */
8356 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_start_timestamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8357 offset += 4;
8358
8359 /* Octets 12 to 15 End timestamp */
8360 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_end_timestamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8361 offset += 4;
8362
8363 /* 16 to 23 Usage Data DL */
8364 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8365 offset += 8;
8366
8367 /* 24 to 32 Usage Data UL */
8368 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8369 offset += 8;
8370
8371 if(gtpv2_secondary_rat_usage_data_report_flags_val & 0x04) {
8372 /* Octet k Length of Secondary RAT Data Usage Report Transfer */
8373 proto_tree_add_item_ret_uint(tree, hf_gtpv2_secondary_rat_usage_data_report_srudn_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srudn_len);
8374 offset++;
8375 /* Octet (k+1) to a SRUDN */
8376 sub_tree = proto_tree_add_subtree(tree, tvb, offset, srudn_len, ett_gtpv2_son_con, NULL((void*)0), "SecondaryRATDataUsageReportTransfer");
8377 new_tvb = tvb_new_subset_length(tvb, offset, srudn_len);
8378 asn1_ctx_t asn1_ctx;
8379 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true1, pinfo);
8380 dissect_ngap_SecondaryRATDataUsageReportTransfer(new_tvb, 0, &asn1_ctx, sub_tree, hf_gtpv2_secondary_rat_usage_data_report_srudn_value);
8381 offset = offset + srudn_len;
8382 }
8383
8384 if (length - offset) {
8385 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8386 }
8387}
8388
8389
8390
8391/*
8392 * 8.133 UP Function Selection Indication Flags
8393 */
8394
8395static void
8396dissect_gtpv2_up_func_slec_indic_flg(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t * args _U___attribute__((unused)))
8397{
8398 int offset = 0;
8399
8400 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN0x00000000);
8401 proto_tree_add_item(tree, hf_gtpv2_dcnr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8402
8403}
8404
8405/* 8.134 Maximum Packet Loss Rate */
8406static void
8407dissect_gtpv2_max_pkt_loss_rte(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8408{
8409 int offset = 0;
8410 uint8_t oct;
8411
8412 static int* const flags_oct1[] = {
8413 &hf_gtpv2_spare_b7_b2,
8414 &hf_gtpv2_max_pkt_loss_rte_dl_flg,
8415 &hf_gtpv2_max_pkt_loss_rte_ul_flg,
8416 NULL((void*)0)
8417 };
8418 /*5 Spare DL UL*/
8419 oct = tvb_get_uint8(tvb, offset);
8420 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_oct1, ENC_BIG_ENDIAN0x00000000);
8421 offset++;
8422
8423 if((oct & 0x01) == 1){
8424 /*m to m+1 Maximum Packet Loss Rate UL*/
8425 proto_tree_add_item(tree, hf_gtpv2_max_pkt_loss_rte_ul, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8426 offset += 2;
8427 }
8428 if ((oct & 0x02) == 2) {
8429 /*o to o+1 Maximum Packet Loss Rate DL*/
8430 proto_tree_add_item(tree, hf_gtpv2_max_pkt_loss_rte_dl, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8431 }
8432
8433
8434}
8435
8436/* 8.135 APN Rate Control Status */
8437static void
8438dissect_gtpv2_apn_rte_cntrl_status(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8439{
8440 int offset = 0;
8441
8442 /*5 to 8 Number of Uplink packets allowed*/
8443 proto_tree_add_item(tree, hf_gtpv2_nr_ul_pkts_all, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8444 offset += 4;
8445 /*9 to 12 Number of additional exception reports*/
8446 proto_tree_add_item(tree, hf_gtpv2_nr_add_exception_rpts, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8447 offset += 4;
8448 /*13 to 16 Number of Downlink packets allowed*/
8449 proto_tree_add_item(tree, hf_gtpv2_nr_dl_pkts_all, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8450 offset += 4;
8451 /*17 to 24 APN Rate Control Status validity Time*/
8452 proto_tree_add_item(tree, hf_apn_rte_cntrl_status_val_time, tvb, offset, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8453
8454}
8455/* 3GPP TS 32.422 V15.1.0 (2018-06) 5.5 List of interfaces (O)*/
8456
8457static int* const ext_tra_info_list_of_if_flags_oct1[] = {
8458 &hf_gtpv2_ext_tra_info_loi_mscs_cap,
8459 &hf_gtpv2_ext_tra_info_loi_mscs_map_f,
8460 &hf_gtpv2_ext_tra_info_loi_mscs_map_e,
8461 &hf_gtpv2_ext_tra_info_loi_mscs_map_b,
8462 &hf_gtpv2_ext_tra_info_loi_mscs_map_g,
8463 &hf_gtpv2_ext_tra_info_loi_mscs_mc,
8464 &hf_gtpv2_ext_tra_info_loi_mscs_iu,
8465 &hf_gtpv2_ext_tra_info_loi_mscs_a,
8466 NULL((void*)0)
8467};
8468
8469static int* const ext_tra_info_list_of_if_flags_oct2[] = {
8470 &hf_gtpv2_ext_tra_info_loi_mscs_map_c,
8471 &hf_gtpv2_ext_tra_info_loi_mscs_map_d,
8472 NULL((void*)0)
8473};
8474
8475static int* const ext_tra_info_list_of_if_flags_oct3[] = {
8476 &hf_gtpv2_ext_tra_info_loi_mgw_iuup,
8477 &hf_gtpv2_ext_tra_info_loi_mgw_nbup,
8478 &hf_gtpv2_ext_tra_info_loi_mgw_mc,
8479 NULL((void*)0)
8480};
8481
8482static int* const ext_tra_info_list_of_if_flags_oct4[] = {
8483 &hf_gtpv2_ext_tra_info_loi_sgsn_ge,
8484 &hf_gtpv2_ext_tra_info_loi_sgsn_gs,
8485 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gf,
8486 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gd,
8487 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gr,
8488 &hf_gtpv2_ext_tra_info_loi_sgsn_gn,
8489 &hf_gtpv2_ext_tra_info_loi_sgsn_iu,
8490 &hf_gtpv2_ext_tra_info_loi_sgsn_gb,
8491 NULL((void*)0)
8492};
8493
8494static int* const ext_tra_info_list_of_if_flags_oct5[] = {
8495 &hf_gtpv2_ext_tra_info_loi_sgsn_s13,
8496 &hf_gtpv2_ext_tra_info_loi_sgsn_s3,
8497 &hf_gtpv2_ext_tra_info_loi_sgsn_s4,
8498 &hf_gtpv2_ext_tra_info_loi_sgsn_s6d,
8499 NULL((void*)0)
8500};
8501
8502static int* const ext_tra_info_list_of_if_flags_oct6[] = {
8503 &hf_gtpv2_ext_tra_info_loi_ggsn_gmb,
8504 &hf_gtpv2_ext_tra_info_loi_ggsn_gi,
8505 &hf_gtpv2_ext_tra_info_loi_ggsn_gn,
8506 NULL((void*)0)
8507};
8508
8509static int* const ext_tra_info_list_of_if_flags_oct7[] = {
8510 &hf_gtpv2_ext_tra_info_loi_rnc_uu,
8511 &hf_gtpv2_ext_tra_info_loi_rnc_iub,
8512 &hf_gtpv2_ext_tra_info_loi_rnc_iur,
8513 &hf_gtpv2_ext_tra_info_loi_rnc_iu,
8514 NULL((void*)0)
8515};
8516
8517static int* const ext_tra_info_list_of_if_flags_oct8[] = {
8518 &hf_gtpv2_ext_tra_info_loi_bm_sc_gmb,
8519 NULL((void*)0)
8520};
8521
8522static int* const ext_tra_info_list_of_if_flags_oct9[] = {
8523 &hf_gtpv2_ext_tra_info_loi_mme_s13,
8524 &hf_gtpv2_ext_tra_info_loi_mme_s11,
8525 &hf_gtpv2_ext_tra_info_loi_mme_s10,
8526 &hf_gtpv2_ext_tra_info_loi_mme_s6a,
8527 &hf_gtpv2_ext_tra_info_loi_mme_s3,
8528 &hf_gtpv2_ext_tra_info_loi_mme_s1_mme,
8529 NULL((void*)0)
8530};
8531
8532static int* const ext_tra_info_list_of_if_flags_oct10[] = {
8533 &hf_gtpv2_ext_tra_info_loi_sgw_gxc,
8534 &hf_gtpv2_ext_tra_info_loi_sgw_s11,
8535 &hf_gtpv2_ext_tra_info_loi_sgw_s8b,
8536 &hf_gtpv2_ext_tra_info_loi_sgw_s5,
8537 &hf_gtpv2_ext_tra_info_loi_sgw_s4,
8538 NULL((void*)0)
8539};
8540
8541static int* const ext_tra_info_list_of_if_flags_oct11[] = {
8542 &hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi,
8543 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b,
8544 &hf_gtpv2_ext_tra_info_loi_pdn_gw_gx,
8545 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b,
8546 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s5,
8547 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c,
8548 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b,
8549 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a,
8550 NULL((void*)0)
8551};
8552
8553static int* const ext_tra_info_list_of_if_flags_oct12[] = {
8554 &hf_gtpv2_ext_tra_info_loi_enb_uu,
8555 &hf_gtpv2_ext_tra_info_loi_enb_x2,
8556 &hf_gtpv2_ext_tra_info_loi_enb_s1_mme,
8557 NULL((void*)0)
8558};
8559
8560static int* const ext_tra_info_list_of_if_flags_oct13[] = {
8561 &hf_gtpv2_ext_tra_info_loi_hss_sh,
8562 &hf_gtpv2_ext_tra_info_loi_hss_s6a,
8563 &hf_gtpv2_ext_tra_info_loi_hss_s6d,
8564 &hf_gtpv2_ext_tra_info_loi_hss_cx,
8565 &hf_gtpv2_ext_tra_info_loi_hss_map_gr,
8566 &hf_gtpv2_ext_tra_info_loi_hss_map_gc,
8567 &hf_gtpv2_ext_tra_info_loi_hss_map_d,
8568 &hf_gtpv2_ext_tra_info_loi_hss_map_c,
8569 NULL((void*)0)
8570};
8571
8572static int* const ext_tra_info_list_of_if_flags_oct14[] = {
8573 &hf_gtpv2_ext_tra_info_loi_eir_map_gf,
8574 &hf_gtpv2_ext_tra_info_loi_eir_s13p,
8575 &hf_gtpv2_ext_tra_info_loi_eir_s13,
8576 &hf_gtpv2_ext_tra_info_loi_eir_map_f,
8577 NULL((void*)0)
8578};
8579
8580static int* const ext_tra_info_list_of_if_flags_oct15[] = {
8581 &hf_gtpv2_ext_tra_info_loi_amf_n20,
8582 &hf_gtpv2_ext_tra_info_loi_amf_n15,
8583 &hf_gtpv2_ext_tra_info_loi_amf_n14,
8584 &hf_gtpv2_ext_tra_info_loi_amf_n12,
8585 &hf_gtpv2_ext_tra_info_loi_amf_n11,
8586 &hf_gtpv2_ext_tra_info_loi_amf_n8,
8587 &hf_gtpv2_ext_tra_info_loi_amf_n2,
8588 &hf_gtpv2_ext_tra_info_loi_amf_n1,
8589 NULL((void*)0)
8590};
8591
8592static int* const ext_tra_info_list_of_if_flags_oct16[] = {
8593 &hf_gtpv2_ext_tra_info_loi_amf_n22,
8594 &hf_gtpv2_ext_tra_info_loi_amf_n26,
8595 NULL((void*)0)
8596};
8597
8598static int* const ext_tra_info_list_of_if_flags_oct17[] = {
8599 &hf_gtpv2_ext_tra_info_loi_pcf_n15,
8600 &hf_gtpv2_ext_tra_info_loi_pcf_n7,
8601 &hf_gtpv2_ext_tra_info_loi_pcf_n5,
8602 NULL((void*)0)
8603};
8604
8605static int* const ext_tra_info_list_of_if_flags_oct18[] = {
8606 &hf_gtpv2_ext_tra_info_loi_smf_s5_c,
8607 &hf_gtpv2_ext_tra_info_loi_smf_n11,
8608 &hf_gtpv2_ext_tra_info_loi_smf_n10,
8609 &hf_gtpv2_ext_tra_info_loi_smf_n7,
8610 &hf_gtpv2_ext_tra_info_loi_smf_n4,
8611 NULL((void*)0)
8612};
8613
8614static int* const ext_tra_info_list_of_if_flags_oct19[] = {
8615 &hf_gtpv2_ext_tra_info_loi_upf_n4,
8616 NULL((void*)0)
8617};
8618
8619static int* const ext_tra_info_list_of_if_flags_oct20[] = {
8620 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c,
8621 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c,
8622 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu,
8623 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c,
8624 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c,
8625 NULL((void*)0)
8626};
8627
8628/* 8.136 Extended Trace Information */
8629static void
8630dissect_gtpv2_ext_trs_inf(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8631{
8632 proto_tree *trigg_tree, *ne_tree, *if_tree;
8633 proto_item* ti;
8634 int offset = 0;
8635 uint32_t tid, ev_len;
8636
8637 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
8638 offset += 3;
8639
8640 /* Append Trace ID to main tree */
8641 tid = tvb_get_ntohs(tvb, offset);
8642
8643 proto_tree_add_item_ret_uint(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &tid);
8644 proto_item_append_text(item, "Trace ID: %d ", tid);
8645
8646 offset += 3;
8647
8648 /* Triggering Events, put all into a new tree called triggering_tree */
8649 trigg_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "Triggering Events");
8650 /* Octet 11 Length of Triggering Events */
8651 proto_tree_add_item_ret_uint(trigg_tree, hf_gtpv2_trig_event_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8652 offset++;
8653
8654 proto_item_set_len(ti, ev_len + 1);
8655 offset += ev_len;
8656
8657 ne_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "List of NE Types");
8658 /* m + 1*/
8659 /* Length of List of NE Types */
8660 proto_tree_add_item_ret_uint(ne_tree, hf_gtpv2_ne_list_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8661 offset++;
8662 if (ev_len > 0) {
8663 proto_tree_add_bitmask_list(ne_tree, tvb, offset, 1, trace_ne_types_flags_oct1, ENC_BIG_ENDIAN0x00000000);
8664 }
8665 if (ev_len > 1) {
8666 proto_tree_add_bitmask_list(ne_tree, tvb, offset+1, 1, trace_ne_types_flags_oct2, ENC_BIG_ENDIAN0x00000000);
8667 }
8668
8669 proto_item_set_len(ti, ev_len + 1);
8670 offset += ev_len;
8671
8672 /* p+1 Session Trace Depth */
8673 proto_tree_add_item(tree, hf_gtpv2_ses_trs_depth, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8674 offset++;
8675
8676
8677 if_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "List of Interfaces");
8678 /* p+2 Length of List of Interfaces */
8679 proto_tree_add_item_ret_uint(if_tree, hf_gtpv2_list_of_if_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8680 offset++;
8681
8682 if (ev_len > 1) {
8683 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset, 2,
8684 ett_gtpv2_if_mgcs, NULL((void*)0), "MSC Server interfaces");
8685 proto_tree_add_bitmask_list(sub_tree, tvb, offset, 1, ext_tra_info_list_of_if_flags_oct1, ENC_BIG_ENDIAN0x00000000);
8686 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 1, 1, ext_tra_info_list_of_if_flags_oct2, ENC_BIG_ENDIAN0x00000000);
8687 }
8688 if (ev_len > 2) {
8689 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 2, 1,
8690 ett_gtpv2_if_mgw, NULL((void*)0), "MGW interfaces");
8691 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 2, 1, ext_tra_info_list_of_if_flags_oct3, ENC_BIG_ENDIAN0x00000000);
8692 }
8693
8694 if (ev_len > 4) {
8695 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 3, 2,
8696 ett_gtpv2_if_sgsn, NULL((void*)0), "SGSN interfaces");
8697 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 3, 1, ext_tra_info_list_of_if_flags_oct4, ENC_BIG_ENDIAN0x00000000);
8698 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 4, 1, ext_tra_info_list_of_if_flags_oct5, ENC_BIG_ENDIAN0x00000000);
8699 }
8700
8701 if (ev_len > 5) {
8702 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 5, 1,
8703 ett_gtpv2_if_ggsn, NULL((void*)0), "GGSN interfaces");
8704 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 5, 1, ext_tra_info_list_of_if_flags_oct6, ENC_BIG_ENDIAN0x00000000);
8705 }
8706 if (ev_len > 6) {
8707 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 6, 1,
8708 ett_gtpv2_if_rnc, NULL((void*)0), "RNC interfaces");
8709 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 6, 1, ext_tra_info_list_of_if_flags_oct7, ENC_BIG_ENDIAN0x00000000);
8710 }
8711 if (ev_len > 7) {
8712 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 7, 1,
8713 ett_gtpv2_if_bm_sc, NULL((void*)0), "BM-SC interfaces");
8714 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 7, 1, ext_tra_info_list_of_if_flags_oct8, ENC_BIG_ENDIAN0x00000000);
8715 }
8716 if (ev_len > 8) {
8717 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 8, 1,
8718 ett_gtpv2_if_mme, NULL((void*)0), "MME interfaces");
8719 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 8, 1, ext_tra_info_list_of_if_flags_oct9, ENC_BIG_ENDIAN0x00000000);
8720 }
8721 if (ev_len > 9) {
8722 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 9, 1,
8723 ett_gtpv2_if_sgw, NULL((void*)0), "SGW interfaces");
8724 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 9, 1, ext_tra_info_list_of_if_flags_oct10, ENC_BIG_ENDIAN0x00000000);
8725 }
8726 if (ev_len > 10) {
8727 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 10, 1,
8728 ett_gtpv2_if_pdn_gw, NULL((void*)0), "PDN GW interfaces");
8729 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 10, 1, ext_tra_info_list_of_if_flags_oct11, ENC_BIG_ENDIAN0x00000000);
8730 }
8731 if (ev_len > 11) {
8732 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 11, 1,
8733 ett_gtpv2_if_enb, NULL((void*)0), "eNB interfaces");
8734 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct12, ENC_BIG_ENDIAN0x00000000);
8735 }
8736 if (ev_len > 12) {
8737 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 12, 1,
8738 ett_gtpv2_if_hss, NULL((void*)0), "HSS interfaces");
8739 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct13, ENC_BIG_ENDIAN0x00000000);
8740 }
8741 if (ev_len > 13) {
8742 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 13, 1,
8743 ett_gtpv2_if_eir, NULL((void*)0), "EIR interfaces");
8744 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct14, ENC_BIG_ENDIAN0x00000000);
8745 }
8746 if (ev_len > 15) {
8747 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 14, 2,
8748 ett_gtpv2_if_amf, NULL((void*)0), "AMF interfaces");
8749 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 14, 1, ext_tra_info_list_of_if_flags_oct15, ENC_BIG_ENDIAN0x00000000);
8750 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 15, 1, ext_tra_info_list_of_if_flags_oct16, ENC_BIG_ENDIAN0x00000000);
8751 }
8752 if (ev_len > 16) {
8753 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 16, 1,
8754 ett_gtpv2_if_pcf, NULL((void*)0), "PCF interfaces");
8755 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 16, 1, ext_tra_info_list_of_if_flags_oct17, ENC_BIG_ENDIAN0x00000000);
8756 }
8757 if (ev_len > 17) {
8758 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 17, 1,
8759 ett_gtpv2_if_smf, NULL((void*)0), "SMF interfaces");
8760 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 17, 1, ext_tra_info_list_of_if_flags_oct18, ENC_BIG_ENDIAN0x00000000);
8761 }
8762 if (ev_len > 18) {
8763 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 18, 1,
8764 ett_gtpv2_if_upf, NULL((void*)0), "UPF interfaces");
8765 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 18, 1, ext_tra_info_list_of_if_flags_oct19, ENC_BIG_ENDIAN0x00000000);
8766 }
8767 if (ev_len > 19) {
8768 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 19, 1,
8769 ett_gtpv2_if_upf, NULL((void*)0), "NG-RAN node interfaces");
8770 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 19, 1, ext_tra_info_list_of_if_flags_oct20, ENC_BIG_ENDIAN0x00000000);
8771 }
8772
8773 proto_item_set_len(ti, ev_len + 1);
8774 offset += ev_len;
8775
8776 /* q+1 Length of IP Address of Trace Collection Entity */
8777 proto_tree_add_item_ret_uint(tree, hf_gtpv2_trs_coll_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8778 offset++;
8779 /*(q+2) to r IP Address of Trace Collection Entity */
8780 if (ev_len == 4) {
8781 proto_tree_add_item(tree, hf_gtpv2_trs_coll_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8782 }
8783
8784 if (ev_len == 16) {
8785 proto_tree_add_item(tree, hf_gtpv2_trs_coll_ipv6_addr, tvb, offset, 16, ENC_NA0x00000000);
8786 }
8787}
8788
8789/* 8.137 Monitoring Event Extension Information */
8790static void
8791dissect_gtpv2_ie_mon_event_ext_inf(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8792{
8793 int offset = 0;
8794 bool_Bool lrtp;
8795 bool_Bool srie;
8796 uint32_t scef_id_len;
8797
8798 /* Octet 5 Bit 8-3 Spare Bit 2 SRIE Bit 1 LRTP */
8799 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 6, ENC_BIG_ENDIAN0x00000000);
8800 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_ext_inf_srie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srie);
8801 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_ext_inf_lrtp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &lrtp);
8802 offset++;
8803 /* Octet 6 to 9 SCEF Reference ID */
8804 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_reference_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8805 offset += 4;
8806 /* Octet 10 Length of SCEF ID */
8807 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mon_event_ext_inf_scef_id_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &scef_id_len);
8808 offset++;
8809 /* Octet 11 to k SCEF ID */
8810 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_id, tvb, offset, scef_id_len, ENC_UTF_80x00000002);
8811 offset = offset + scef_id_len;
8812 if (lrtp) {
8813 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8814 offset += 4;
8815 }
8816
8817 if (srie) {
8818 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8819 offset += 8;
8820 }
8821
8822 if(offset < length){
8823 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
8824 }
8825}
8826
8827/* 207 Additional RRM Policy Index Fixed Length / 8.138 */
8828static void
8829dissect_gtpv2_ie_additional_rrm_policy_index(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8830{
8831 uint32_t rrm_policy_index;
8832
8833 /*5 to 8 Additional RRM Policy Index, The ARPI is encoded as Unsigned32 binary integer values.*/
8834 proto_tree_add_item_ret_uint(tree, hf_gtpv2_additional_rrm_policy_index, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &rrm_policy_index);
8835 proto_item_append_text(item, "%u", rrm_policy_index);
8836}
8837
8838/* 208 V2X Context Extendable / 8.139 */
8839static void
8840dissect_gtpv2_ie_v2x_context(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8841{
8842 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8843}
8844
8845/* 209 PC5 QoS Parameters Extendable / 8.140 */
8846static void
8847dissect_gtpv2_ie_pc5_qos_parameters(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8848{
8849 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8850}
8851
8852/* 210 Services Authorized Extendable / 8.141 */
8853static void
8854dissect_gtpv2_ie_services_authorized(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8855{
8856 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8857}
8858
8859/* 211 Bit Rate Extendable / 8.142 */
8860static void
8861dissect_gtpv2_ie_bit_rate(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8862{
8863 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8864}
8865
8866/* 212 PC5 QoS Flow Extendable / 8.143 */
8867static void
8868dissect_gtpv2_ie_pc5_qos_flow(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8869{
8870 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8871}
8872
8873/* 213 SGi PtP Tunnel Address Extendable / 8.144 */
8874static void
8875dissect_gtpv2_ie_sgi_ptp_tunnel_address(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8876{
8877 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8878}
8879
8880/* 214 PGW Change Info Extendable / 8.145 */
8881static void
8882dissect_gtpv2_ie_pgw_change_info(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), proto_item* item, uint16_t length, uint8_t message_type, uint8_t instance _U___attribute__((unused)), session_args_t* args)
8883{
8884 int offset = 0;
8885 proto_tree *grouped_tree;
8886 tvbuff_t *new_tvb;
8887
8888 proto_item_append_text(item, "[Grouped IE]");
8889 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PGW_change_info);
8890 new_tvb = tvb_new_subset_length(tvb, offset, length);
8891
8892 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_PGW_CHANGE_INFO214);
8893}
8894
8895/* 215 PGW FQDN Extendable / 8.146 */
8896static void
8897dissect_gtpv2_ie_pgw_fqdn(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item, uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8898{
8899 int offset = 0;
8900 offset = decode_gtpv2_fqdn(tvb, pinfo, tree, item, offset, length);
8901
8902 if(offset < length){
8903 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
8904 }
8905}
8906
8907/* 216 Group Id / 8.147 */
8908static void
8909dissect_gtpv2_ie_group_id(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8910{
8911 proto_tree_add_item(tree, hf_gtpv2_group_id, tvb, 0, length, ENC_UTF_80x00000002);
8912}
8913
8914/* 217 PSCell Id / 8.148 */
8915static void
8916dissect_gtpv2_ie_pscell_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8917{
8918 int offset = 0;
8919
8920 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true1);
8921 offset += 3;
8922 proto_tree_add_item(tree, hf_gtpv2_ie_pscell_id_spare, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
8923 proto_tree_add_item(tree, hf_gtpv2_ie_pscell_id_nr_cgi, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
8924
8925}
8926
8927/* 218 UP Security Policy / 8.149 */
8928static const value_string gtpv2_up_ip_policy_vals[] = {
8929 {0, "User Plane Integrity protection with EPS is not needed"},
8930 {1, "User Plane Integrity protection with EPS is preferred"},
8931 {2, "User Plane Integrity protection with EPS is required"},
8932 {3, "Spare"},
8933 {0, NULL((void*)0)}
8934};
8935
8936static void
8937dissect_gtpv2_ie_up_security_policy(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8938{
8939 proto_tree_add_item(tree, hf_gtpv2_ie_up_security_policy_spare, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
8940 proto_tree_add_item(tree, hf_gtpv2_ie_up_security_policy_up_ip_policy, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
8941 if (length > 2) {
8942 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 1, length - 2);
8943 }
8944}
8945
8946/* 219 Alternative IMSI / 8.150 */
8947static void
8948dissect_gtpv2_ie_alternative_imsi(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, proto_item* item, uint16_t length, uint8_t message_type, uint8_t instance, session_args_t* args)
8949{
8950 /*
8951 * TS 29.274 V18.4.0 says:
8952 * Alternative IMSI is in the form of an IMSI as defined in 3GPP TS 23.003.
8953 */
8954 dissect_gtpv2_imsi(tvb, pinfo, tree, item, length, message_type, instance, args);
8955}
8956
8957/* 220 NF Instance ID / 8.151 */
8958static void
8959dissect_gtpv2_ie_nf_instance_id(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t _U___attribute__((unused)) length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8960{
8961 /*
8962 * String uniquely identifying a NF instance. The format of the NF Instance ID shall be a
8963 * Universally Unique Identifier (UUID) version 4, as described in IETF RFC 4122 [15]. The
8964 * hexadecimal letters should be formatted as lower-case characters by the sender, and they
8965 * shall be handled as case-insensitive by the receiver.
8966 *
8967 * Example: "4ace9d34-2c69-4f99-92d5-a73a3fe8e23b"
8968 */
8969 proto_tree_add_item(tree, hf_gtpv2_nf_instance_id_nf_instance_id, tvb, 0, 36, ENC_BIG_ENDIAN0x00000000);
8970}
8971
8972/* 221 Timer in Seconds / 8.152 */
8973static void
8974dissect_gtpv2_timer_in_seconds(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, proto_item* item _U___attribute__((unused)), uint16_t _U___attribute__((unused)) length, uint8_t message_type _U___attribute__((unused)), uint8_t instance _U___attribute__((unused)), session_args_t* args _U___attribute__((unused)))
8975{
8976 proto_tree_add_item(tree, hf_gtpv2_nf_timer_in_seconds_timer_value, tvb, 0, 3, ENC_BIG_ENDIAN0x00000000);
8977 if (length > 4) {
8978 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 3, length - 4);
8979 }
8980}
8981
8982/* Table 8.1-1: Information Element types for GTPv2 */
8983
8984typedef struct _gtpv2_ie {
8985 int ie_type;
8986 void (*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, uint16_t, uint8_t, uint8_t, session_args_t *);
8987} gtpv2_ie_t;
8988
8989static const gtpv2_ie_t gtpv2_ies[] = {
8990 {GTPV2_IE_IMSI1, dissect_gtpv2_imsi}, /* 1, Internal Mobile Subscriber Identity (IMSI) */
8991 {GTPV2_IE_CAUSE2, dissect_gtpv2_cause}, /* 2, Cause (without embedded offending IE) 8.4 */
8992 {GTPV2_REC_REST_CNT3, dissect_gtpv2_recovery}, /* 3, Recovery (Restart Counter) 8.5 */
8993 /* 4-50 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
8994 /*Start SRVCC Messages 3GPP TS 29.280 */
8995 {GTPV2_IE_STN_SR51, dissect_gtpv2_stn_sr}, /* 51 STN-SR */
8996 {GTPV2_IE_SRC_TGT_TRANS_CON52, dissect_gtpv2_src_tgt_trans_con}, /* 52 Source to Target Transparent Container */
8997 {GTPV2_IE_TGT_SRC_TRANS_CON53 , dissect_gtpv2_tgt_src_trans_con}, /* 53 Target to Source Transparent Container */
8998 {GTPV2_IE_MM_CON_EUTRAN_SRVCC54, dissect_gtpv2_mm_con_eutran_srvcc}, /* 54 MM Context for E-UTRAN SRVCC */
8999 {GTPV2_IE_MM_CON_UTRAN_SRVCC55, dissect_gtpv2_mm_con_utran_srvcc}, /* 55 MM Context for UTRAN SRVCC */
9000 {GTPV2_IE_SRVCC_CAUSE56, dissect_gtpv2_srvcc_cause}, /* 56 SRVCC Cause */
9001 {GTPV2_IE_TGT_RNC_ID57, dissect_gtpv2_tgt_rnc_id}, /* 57 Target RNC ID */
9002 {GTPV2_IE_TGT_GLOGAL_CELL_ID58, dissect_gtpv2_tgt_global_cell_id}, /* 58 Target Global Cell ID */
9003 {GTPV2_IE_TEID_C59, dissect_gtpv2_teid_c}, /* 59 TEID-C */
9004 {GTPV2_IE_SV_FLAGS60, dissect_gtpv2_sv_flags}, /* 60 Sv Flags */
9005 {GTPV2_IE_SAI61, dissect_gtpv2_sai}, /* 61 Service Area Identifier */
9006 {GTPV2_IE_MM_CTX_FOR_CS_TO_PS_SRVCC62, dissect_gtpv2_mm_ctx_for_cs_to_ps_srvcc }, /* 62 Service Area Identifier */
9007 /* 61-70 Reserved for Sv interface Extendable / See 3GPP TS 29.280 [15] */
9008 {GTPV2_APN71, dissect_gtpv2_apn}, /* 71, Access Point Name (APN) 8.6 */
9009 {GTPV2_AMBR72, dissect_gtpv2_ambr}, /* 72, Aggregate Maximum Bit Rate (AMBR) */
9010 {GTPV2_EBI73, dissect_gtpv2_ebi}, /* 73, EPS Bearer ID (EBI) 8.8 */
9011 {GTPV2_IP_ADDRESS74, dissect_gtpv2_ip_address}, /* 74, IP Address */
9012 {GTPV2_MEI75, dissect_gtpv2_mei}, /* 74, Mobile Equipment Identity */
9013 {GTPV2_IE_MSISDN76, dissect_gtpv2_msisdn}, /* 76, MSISDN 8.11 */
9014 {GTPV2_INDICATION77, dissect_gtpv2_ind}, /* 77 Indication 8.12 */
9015 {GTPV2_PCO78, dissect_gtpv2_pco}, /* 78 Protocol Configuration Options (PCO) 8.13 */
9016 {GTPV2_PAA79, dissect_gtpv2_paa}, /* 79 PDN Address Allocation (PAA) 8.14 */
9017 {GTPV2_BEARER_QOS80, dissect_gtpv2_bearer_qos}, /* 80 Bearer Level Quality of Service (Bearer QoS) 8.15 */
9018 {GTPV2_IE_FLOW_QOS81, dissect_gtpv2_flow_qos}, /* 81 Flow Quality of Service (Flow QoS) 8.16 */
9019 {GTPV2_IE_RAT_TYPE82, dissect_gtpv2_rat_type}, /* 82, RAT Type 8.17 */
9020 {GTPV2_IE_SERV_NET83, dissect_gtpv2_serv_net}, /* 83, Serving Network 8.18 */
9021 {GTPV2_IE_BEARER_TFT84, dissect_gtpv2_bearer_tft}, /* 84, Bearer TFT 8.19 */
9022 {GTPV2_IE_TAD85, dissect_gtpv2_tad}, /* 85, Traffic Aggregate Description 8.20 */
9023 {GTPV2_IE_ULI86, dissect_gtpv2_uli}, /* 86, User Location Info (ULI) 8.22 */
9024 {GTPV2_IE_F_TEID87, dissect_gtpv2_f_teid}, /* 87, Fully Qualified Tunnel Endpoint Identifier (F-TEID) 8.23 */
9025 {GTPV2_IE_TMSI88, dissect_gtpv2_tmsi}, /* 88, TMSI 8.23 */
9026 {GTPV2_IE_GLOBAL_CNID89, dissect_gtpv2_g_cn_id}, /* 89, Global CN-Id 8.25 */
9027 {GTPV2_IE_S103PDF90, dissect_gtpv2_s103pdf}, /* 90, S103 PDN Data Forwarding Info (S103PDF) 8.25 */
9028 {GTPV2_IE_S1UDF91, dissect_gtpv2_s1udf}, /* 91, S1-U Data Forwarding (S1UDF) 8.26 */
9029 {GTPV2_IE_DEL_VAL92, dissect_gtpv2_delay_value}, /* 92, Delay Value 8.29 */
9030 {GTPV2_IE_BEARER_CTX93, dissect_gtpv2_bearer_ctx}, /* 93, Bearer Context 8.31 */
9031 {GTPV2_IE_CHAR_ID94, dissect_gtpv2_charging_id}, /* 94, Charging Id */
9032 {GTPV2_IE_CHAR_CHAR95, dissect_gtpv2_char_char}, /* 95 Charging Characteristic */
9033 {GTPV2_IE_TRA_INFO96, dissect_gtpv2_tra_info}, /* 96, Trace Information 8.31 */
9034 {GTPV2_BEARER_FLAG97, dissect_gtpv2_bearer_flag}, /* 97, Bearer Flag */
9035 /* 98, Void 8.33 */
9036 {GTPV2_IE_PDN_TYPE99, dissect_gtpv2_pdn_type}, /* 99, PDN Type */
9037 {GTPV2_IE_PTI100, dissect_gtpv2_pti}, /* 100, Procedure Transaction Id */
9038 {GTPV2_IE_DRX_PARAM101, dissect_gtpv2_drx_param}, /* 101, DRX Parameter 8.36 */
9039 {GTPV2_IE_UE_NET_CAPABILITY102, dissect_gtpv2_ue_net_capability}, /* 102, UE network capability 8.37 */
9040 {GTPV2_IE_MM_CONTEXT_GSM_T103, dissect_gtpv2_mm_context_gsm_t}, /* 103, MM Context 8.38 GSM Key and Triplets */
9041 {GTPV2_IE_MM_CONTEXT_UTMS_CQ104, dissect_gtpv2_mm_context_utms_cq}, /* 104, MM Context 8.38 */
9042 {GTPV2_IE_MM_CONTEXT_GSM_CQ105, dissect_gtpv2_mm_context_gsm_cq}, /* 105, MM Context 8.38 */
9043 {GTPV2_IE_MM_CONTEXT_UTMS_Q106, dissect_gtpv2_mm_context_utms_q}, /* 106, MM Context 8.38 */
9044 {GTPV2_IE_MM_CONTEXT_EPS_QQ107, dissect_gtpv2_mm_context_eps_qq}, /* 107, MM Context 8.38 */
9045 {GTPV2_IE_MM_CONTEXT_UTMS_QQ108, dissect_gtpv2_mm_context_utms_qq}, /* 108, MM Context 8.38 */
9046 {GTPV2_IE_PDN_CONNECTION109, dissect_gtpv2_PDN_conn}, /* 109, PDN Connection */
9047 {GTPV2_IE_PDN_NUMBERS110, dissect_gtpv2_pdn_numbers}, /* 110, PDN Numbers 8.40 */
9048 {GTPV2_IE_P_TMSI111, dissect_gtpv2_p_tmsi}, /* 111, P-TMSI 8.41 */
9049 {GTPV2_IE_P_TMSI_SIG112, dissect_gtpv2_p_tmsi_sig}, /* 112, P-TMSI Signature 8.42 */
9050 {GTPV2_IE_HOP_COUNTER113, dissect_gtpv2_hop_counter}, /* 113, Hop Counter 8.43 */
9051 {GTPV2_IE_UE_TIME_ZONE114, dissect_gtpv2_ue_time_zone}, /* 114, UE Time Zone */
9052 {GTPV2_IE_TRACE_REFERENCE115, dissect_gtpv2_trace_reference}, /* 115, Trace Reference 8.45 */
9053 {GTPV2_IE_COMPLETE_REQUEST_MSG116, dissect_complete_request_msg}, /* 116, Complete Request message 8.46 */
9054 {GTPV2_IE_GUTI117, dissect_gtpv2_guti}, /* 117, GUTI 8.47 */
9055 {GTPV2_IE_F_CONTAINER118, dissect_gtpv2_F_container}, /* 118, Fully Qualified Container (F-Container) */
9056 {GTPV2_IE_F_CAUSE119, dissect_gtpv2_F_cause}, /* 119, Fully Qualified Cause (F-Cause) */
9057 {GTPV2_IE_PLMN_ID120, dissect_gtpv2_plmn_id}, /* 120, PLMN ID 8.50 */
9058 {GTPV2_IE_TARGET_ID121, dissect_gtpv2_target_id}, /* 121, Target Identification */
9059 /* 122, Void 8.52 */
9060 {GTPV2_IE_PKT_FLOW_ID123, dissect_gtpv2_pkt_flow_id}, /* 123, Packet Flow ID 8.53 */
9061 {GTPV2_IE_RAB_CONTEXT124, dissect_gtpv2_rab_context}, /* 124, RAB Context 8.54 */
9062 {GTPV2_IE_S_RNC_PDCP_CTX_INFO125, dissect_gtpv2_s_rnc_pdcp_ctx_info}, /* 125, Source RNC PDCP context info 8.55 */
9063 {GTPV2_IE_PORT_NR126, dissect_port_nr}, /* 126, Port Number 8.56 */
9064 {GTPV2_IE_APN_RESTRICTION127, dissect_gtpv2_apn_rest}, /* 127, APN Restriction */
9065 {GTPV2_IE_SEL_MODE128, dissect_gtpv2_selec_mode}, /* 128, Selection Mode */
9066 {GTPV2_IE_SOURCE_IDENT129, dissect_gtpv2_source_ident}, /* 129, Source Identification 8.59 */
9067 {GTPV2_IE_BEARER_CONTROL_MODE130, dissect_gtpv2_bearer_control_mode}, /* 130, Bearer Control Mode */
9068 {GTPV2_IE_CNG_REP_ACT131 , dissect_gtpv2_cng_rep_act}, /* 131, Change Reporting Action 8.61 */
9069 {GTPV2_IE_FQ_CSID132, dissect_gtpv2_fq_csid}, /* 132, Fully Qualified PDN Connection Set Identifier (FQ-CSID) 8.62 */
9070 {GTPV2_IE_CHANNEL_NEEDED133, dissect_gtpv2_channel_needed}, /* 133, Channel Needed 8.63 */
9071 {GTPV2_IE_EMLPP_PRI134, dissect_gtpv2_emlpp_pri}, /* 134, eMLPP Priority 8.64 */
9072 {GTPV2_IE_NODE_TYPE135 , dissect_gtpv2_node_type}, /* 135, Node Type 8.65 */
9073 {GTPV2_IE_FQDN136, dissect_gtpv2_fqdn}, /* 136, 8.66 Fully Qualified Domain Name (FQDN) */
9074 {GTPV2_IE_TI137, dissect_gtpv2_ti}, /* 137, 8.68 Transaction Identifier (TI) */
9075 {GTPV2_IE_MBMS_SESSION_DURATION138, dissect_gtpv2_mbms_session_duration}, /* 138, 8.69 MBMS Session Duration */
9076 {GTPV2_IE_MBMS_SERVICE_AREA139, dissect_gtpv2_mbms_service_area}, /* 139, 8.70 MBMS Service Area */
9077 {GTPV2_IE_MBMS_SESSION_ID140, dissect_gtpv2_mbms_session_id}, /* 140, 8.71 MBMS Session Identifier */
9078 {GTPV2_IE_MBMS_FLOW_ID141, dissect_gtpv2_mbms_flow_id}, /* 141, 8.72 MBMS Flow Identifier */
9079 {GTPV2_IE_MBMS_IP_MC_DIST142, dissect_gtpv2_mbms_ip_mc_dist}, /* 142, 8.73 MBMS IP Multicast Distribution */
9080 {GTPV2_IE_MBMS_DIST_ACK143, dissect_gtpv2_mbms_dist_ack}, /* 143, 8.74 MBMS Distribution Acknowledge */
9081 {GTPV2_IE_RFSP_INDEX144, dissect_gtpv2_rfsp_index}, /* 144, 8.77 RFSP Index */
9082 {GTPV2_IE_UCI145, dissect_gtpv2_uci}, /* 145, 8.75 User CSG Information (UCI) */
9083 {GTPV2_IE_CSG_INFO_REP_ACTION146, dissect_gtpv2_csg_info_rep_action}, /* 146, 8.76 CSG Information Reporting Action */
9084 {GTPV2_IE_CSG_ID147, dissect_gtpv2_csg_id}, /* 147, 8.78 CSG ID */
9085 {GTPV2_IE_CMI148, dissect_gtpv2_cmi}, /* 148, 8.79 CSG Membership Indication (CMI) */
9086 {GTPV2_IE_SERVICE_INDICATOR149, dissect_gtpv2_service_indicator}, /* 149, 8.80 Service indicator */
9087 {GTPV2_IE_DETACH_TYPE150, dissect_gtpv2_detach_type}, /* 150, 8.81 Detach Type */
9088 {GTPV2_IE_LDN151, dissect_gtpv2_ldn}, /* 151, 8.82 Local Distinguished Name (LDN) */
9089 {GTPV2_IE_NODE_FEATURES152, dissect_gtpv2_node_features}, /* 152, 8.83 Node Features */
9090 {GTPV2_IE_MBMS_TIME_TO_DATA_XFER153, dissect_gtpv2_mbms_time_to_data_xfer}, /* 153, 8.84 MBMS Time to Data Transfer */
9091 {GTPV2_IE_THROTTLING154, dissect_gtpv2_throttling}, /* 154, 8.85 Throttling */
9092 {GTPV2_IE_ARP155, dissect_gtpv2_arp}, /* 155, 8.86 Allocation/Retention Priority (ARP) */
9093 {GTPV2_IE_EPC_TIMER156, dissect_gtpv2_epc_timer}, /* 156, 8.87 EPC Timer */
9094 {GTPV2_IE_SIG_PRIO_IND157, dissect_gtpv2_sig_prio_ind}, /* 157, 8.88 Signalling Priority Indication */
9095 {GTPV2_IE_TMGI158, dissect_gtpv2_tmgi}, /* 158, 8.89 Temporary Mobile Group Identity (TMGI) */
9096 {GTPV2_IE_ADD_MM_CONT_FOR_SRVCC159, dissect_gtpv2_add_mm_cont_for_srvcc}, /* 159, 8.90 Additional MM context for SRVCC */
9097 {GTPV2_IE_ADD_FLAGS_FOR_SRVCC160, dissect_gtpv2_add_flags_for_srvcc}, /* 160, 8.91 Additional flags for SRVCC */
9098 {GTPV2_IE_MMBR161, dissect_gtpv2_mmbr}, /* 161, 8.92 Max MBR/APN-AMBR (MMBR) */
9099 {GTPV2_IE_MDT_CONFIG162, dissect_gtpv2_mdt_config}, /* 162, 8.93 MDT Configuration */
9100 {GTPV2_IE_APCO163, dissect_gtpv2_apco}, /* 163, 8.94 Additional Protocol Configuration Options (APCO) */
9101 {GTPV2_IE_ABS_MBMS_DATA_TF_TIME164, dissect_gtpv2_abs_mbms_data_tf_time}, /* 164, 8.95 Absolute Time of MBMS Data Transfer */
9102 {GTPV2_IE_HENB_INFO_REPORT165, dissect_gtpv2_henb_info_report}, /* 165, 8.96 H(e)NB Information Reporting */
9103 {GTPV2_IE_IP4CP166, dissect_gtpv2_ip4cp}, /* 166, 8.97 IPv4 Configuration Parameters (IPv4CP) */
9104 {GTPV2_IE_CHANGE_TO_REPORT_FLAGS167, dissect_gtpv2_change_report_flags}, /* 167, 8.98 Change to Report Flags */
9105 {GTPV2_IE_ACTION_INDICATION168, dissect_gtpv2_action_indication}, /* 168, 8.99 Action Indication */
9106 {GTPV2_IE_TWAN_IDENTIFIER169, dissect_gtpv2_twan_identifier}, /* 169, 8.100 TWAN Identifier */
9107 {GTPV2_IE_ULI_TIMESTAMP170, dissect_gtpv2_uli_timestamp}, /* 170, 8.101 ULI Timestamp */
9108 {GTPV2_IE_MBMS_FLAGS171, dissect_gtpv2_mbms_flags}, /* 171, 8.102 MBMS Flags */
9109 {GTPV2_IE_RAN_NAS_CAUSE172, dissect_gtpv2_ran_nas_cause}, /* 172, 8.103 RAN/NAS Cause */
9110 {GTPV2_IE_CN_OP_SEL_ENT173, dissect_gtpv2_cn_operator_selection_entity}, /* 173, 8.104 CN Operator Selection Entity */
9111 {GTPV2_IE_TRUST_WLAN_MODE_IND174, dissect_gtpv2_trust_wlan_mode_ind}, /* 174, 8.105 Trusted WLAN Mode Indication */
9112 {GTPV2_IE_NODE_NUMBER175, dissect_gtpv2_node_number}, /* 175, 8.106 Node Number */
9113 {GTPV2_IE_NODE_IDENTIFIER176, dissect_gtpv2_node_identifier}, /* 176, 8.107 Node Identifier */
9114 {GTPV2_IE_PRES_REP_AREA_ACT177, dissect_gtpv2_pres_rep_area_action}, /* 177, 8.108 Presence Reporting Area Action */
9115 {GTPV2_IE_PRES_REP_AREA_INF178, dissect_gtpv2_pres_rep_area_information}, /* 178, 8.109 Presence Reporting Area Information */
9116 {GTPV2_IE_TWAN_ID_TS179, dissect_gtpv2_twan_identifier_timestamp}, /* 179, 8.110 TWAN Identifier Timestamp */
9117 {GTPV2_IE_OVERLOAD_CONTROL_INF180, dissect_gtpv2_overload_control_inf}, /* 180, 8.111 Overload Control Information */
9118 {GTPV2_IE_LOAD_CONTROL_INF181, dissect_gtpv2_load_control_inf}, /* 181, 8.112 Load Control Information */
9119 {GTPV2_IE_METRIC182, dissect_gtpv2_metric}, /* 182, 8.113 Metric */
9120 {GTPV2_IE_SEQ_NO183, dissect_gtpv2_seq_no}, /* 183, 8.114 Sequence Number */
9121 {GTPV2_IE_APN_AND_REL_CAP184, dissect_gtpv2_apn_and_relative_capacity}, /* 184, 8.115 APN and Relative Capacity */
9122 {GTPV2_IE_WLAN_OFFLOADABILITY_IND185,dissect_gtpv2_unknown }, /* 185, 8.116 WLAN Offloadability Indication */
9123
9124 {GTPV2_IE_PAGING_AND_SERVICE_INF186, dissect_gtpv2_paging_and_service_inf}, /* 186, 8.117 Paging and Service Information */
9125 {GTPV2_IE_INTEGER_NUMBER187, dissect_gtpv2_integer_number}, /* 187, 8.118 Integer Number */
9126 {GTPV2_IE_MILLISECOND_TS188, dissect_gtpv2_ms_ts}, /* 188, 8.119 Millisecond Time Stamp */
9127 {GTPV2_IE_MON_EVENT_INF189, dissect_gtpv2_mon_event_inf}, /* 189, 8.120 Monitoring Event Information */
9128 /* 190, 8.121 ECGI List */
9129 /* 191, 8.122 Remote UE Context */
9130 /* 192, 8.123 Remote User ID */
9131 /* 193, 8.124 Remote UE IP Information */
9132 {GTPV2_IE_CIOT_OPT_SUPPORT_IND194, dissect_gtpv2_ciot_opt_support_ind}, /* 194, 8.125 CIoT Optimizations Support Indication */
9133 {GTPV2_IE_SCEF_PDN_CONNECTION195 , dissect_gtpv2_scef_pdn_connection }, /* 195, 8.126 SCEF PDN Connection */
9134 {GTPV2_IE_HEADER_COMP_CONF196, dissect_gtpv2_header_comp_comf}, /* 196, 8.127 Header Compression Configuration */
9135 {GTPV2_IE_EXTENDED_PCO197, dissect_gtpv2_pco}, /* 197, 8.128 Extended Protocol Configuration Options (ePCO) */
9136 {GTPV2_IE_SERV_PLMN_RATE_CONTROL198, dissect_gtpv2_serv_plmn_rate_control}, /* 198, 8.129 Serving PLMN Rate Control */
9137 {GTPV2_IE_COUNTER199, dissect_gtpv2_counter}, /* 199, 8.130 Counter */
9138 {GTPV2_IE_MAPPED_UE_USAGE_TYPE200, dissect_gtpv2_mapped_ue_usage_type }, /* 199, 8.131 Mapped UE Usage Type */
9139 {GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, dissect_gtpv2_secondary_rat_usage_data_report}, /* 201, 8.132 Secondary RAT Usage Data Report */
9140 {GTPV2_IE_UP_FUNC_SEL_INDI_FLG202, dissect_gtpv2_up_func_slec_indic_flg }, /* 202, 8.133 UP Function Selection Indication Flags */
9141 {GTPV2_IE_MAX_PKT_LOSS_RTE203, dissect_gtpv2_max_pkt_loss_rte }, /* 203, 8.134 Maximum Packet Loss Rate */
9142 {GTPV2_IE_APN_RTE_CNTRL_STATUS204, dissect_gtpv2_apn_rte_cntrl_status }, /* 204, 8.135 APN Rate Control Status */
9143 {GTPV2_IE_EXT_TRS_INF205, dissect_gtpv2_ext_trs_inf }, /* 205, 8.136 Extended Trace Information */
9144 {GTPV2_IE_MON_EVENT_EXT_INF206, dissect_gtpv2_ie_mon_event_ext_inf }, /* 206, 8.137 Monitoring Event Extension Information */
9145 {GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, dissect_gtpv2_ie_additional_rrm_policy_index }, /* 207 Additional RRM Policy Index Fixed Length / 8.138 */
9146 {GTPV2_IE_V2X_CONTEXT208, dissect_gtpv2_ie_v2x_context }, /* 208 V2X Context Extendable / 8.139 */
9147 {GTPV2_IE_PC5_QOS_PARAMETERS209, dissect_gtpv2_ie_pc5_qos_parameters }, /* 209 PC5 QoS Parameters Extendable / 8.140 */
9148 {GTPV2_IE_SERVICES_AUTHORIZED210, dissect_gtpv2_ie_services_authorized }, /* 210 Services Authorized Extendable / 8.141 */
9149 {GTPV2_IE_BIT_RATE211, dissect_gtpv2_ie_bit_rate }, /* 211 Bit Rate Extendable / 8.142 */
9150 {GTPV2_IE_PC5_QOS_FLOW212, dissect_gtpv2_ie_pc5_qos_flow }, /* 212 PC5 QoS Flow Extendable / 8.143 */
9151 {GTPV2_IE_SGI_PTP_TUNNEL_ADDRESS213, dissect_gtpv2_ie_sgi_ptp_tunnel_address }, /* 213 SGi PtP Tunnel Address Extendable / 8.144 */
9152 {GTPV2_IE_PGW_CHANGE_INFO214, dissect_gtpv2_ie_pgw_change_info }, /* 214 PGW Change Info Extendable / 8.145 */
9153 {GTPV2_IE_PGW_FQDN215, dissect_gtpv2_ie_pgw_fqdn }, /* 215 PGW FQDN Extendable / 8.146 */
9154 {GTPV2_IE_GROUP_ID216, dissect_gtpv2_ie_group_id }, /* 216 Group Id Variable Length / 8.147 */
9155 {GTPV2_IE_PSCELL_ID217, dissect_gtpv2_ie_pscell_id }, /* 217 PSCell Id Fixed Length / 8.148 */
9156 {GTPV2_IE_UP_SECURITY_POLICY218, dissect_gtpv2_ie_up_security_policy }, /* 218 UP Security Policy Extendable / 8.149 */
9157 {GTPV2_IE_ALT_IMSI219, dissect_gtpv2_ie_alternative_imsi }, /* 219 Alternative IMSI Variable Length / 8.150 */
9158 {GTPV2_IE_NF_INSTANCE_ID220, dissect_gtpv2_ie_nf_instance_id }, /* 220 NF Instance ID*/
9159 {GTPV2_IE_TIMER_IN_SECONDS221, dissect_gtpv2_timer_in_seconds }, /* 221 Timer in Seconds*/
9160 {GTPV2_IE_PRIVATE_EXT255, dissect_gtpv2_private_ext },
9161 {0, dissect_gtpv2_unknown}
9162};
9163
9164static gtpv2_msg_hash_t *
9165gtpv2_match_response(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int seq_nr, unsigned msgtype, gtpv2_conv_info_t *gtpv2_info, uint8_t last_cause)
9166{
9167 gtpv2_msg_hash_t gcr, *gcrp = NULL((void*)0);
9168 conversation_t *conv;
9169 uint32_t session;
9170
9171 gcr.seq_nr = seq_nr;
9172 gcr.req_time = pinfo->abs_ts;
9173
9174 switch (msgtype) {
9175 case GTPV2_CREATE_SESSION_REQUEST32:
9176 case GTPV2_CREATE_BEARER_REQUEST95:
9177 case GTPV2_UPDATE_BEARER_REQUEST97:
9178 case GTPV2_MODIFY_BEARER_REQUEST34:
9179 case GTPV2_DELETE_BEARER_REQUEST99:
9180 case GTPV2_DELETE_SESSION_REQUEST36:
9181 case GTPV2_MODIFY_BEARER_COMMAND64:
9182 case GTPV2_DELETE_BEARER_COMMAND66:
9183 case GTPV2_BEARER_RESOURCE_COMMAND68:
9184 case GTPV2_SRVCC_PS_TO_CS_REQUEST25:
9185 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27:
9186 case GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29:
9187 case GTPV2_CONTEXT_REQUEST130:
9188 case GTPV2_FORWARD_RELOCATION_REQ133:
9189 case GTPV2_RELOCATION_CANCEL_REQUEST139:
9190 case GTPV2_FORWARD_CTX_NOTIFICATION137:
9191 case GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135:
9192 case GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170:
9193 case GTPV2_DL_DATA_NOTIF176:
9194 gcr.is_request = true1;
9195 gcr.req_frame = pinfo->num;
9196 gcr.rep_frame = 0;
9197
9198 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9199 gcr.conv_id = conv->conv_index;
9200
9201 break;
9202 case GTPV2_CREATE_SESSION_RESPONSE33:
9203 case GTPV2_CREATE_BEARER_RESPONSE96:
9204 case GTPV2_UPDATE_BEARER_RESPONSE98:
9205 case GTPV2_MODIFY_BEARER_RESPONSE35:
9206 case GTPV2_DELETE_BEARER_RESPONSE100:
9207 case GTPV2_DELETE_SESSION_RESPONSE37:
9208 case GTPV2_MODIFY_BEARER_FAILURE_INDICATION65:
9209 case GTPV2_DELETE_BEARER_FAILURE_INDICATION67:
9210 case GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69:
9211 case GTPV2_SRVCC_PS_TO_CS_RESPONSE26:
9212 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28:
9213 case GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30:
9214 case GTPV2_CONTEXT_RESPONSE131:
9215 case GTPV2_FORWARD_RELOCATION_RESP134:
9216 case GTPV2_RELOCATION_CANCEL_RESPONSE140:
9217 case GTPV2_FORWARD_CTX_ACKNOWLEDGE138:
9218 case GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136:
9219 case GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171:
9220 case GTPV2_DL_DATA_NOTIF_ACK177:
9221
9222 gcr.is_request = false0;
9223 gcr.req_frame = 0;
9224 gcr.rep_frame = pinfo->num;
9225
9226 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9227 gcr.conv_id = conv->conv_index;
9228
9229 break;
9230 default:
9231 gcr.is_request = false0;
9232 gcr.req_frame = 0;
9233 gcr.rep_frame = 0;
9234 gcr.conv_id = 0;
9235 break;
9236 }
9237
9238 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->matched, &gcr);
9239
9240 if (gcrp) {
9241 gcrp->is_request = gcr.is_request;
9242 } else {
9243 /*no match, let's try to make one*/
9244 switch (msgtype) {
9245 case GTPV2_CREATE_SESSION_REQUEST32:
9246 case GTPV2_CREATE_BEARER_REQUEST95:
9247 case GTPV2_UPDATE_BEARER_REQUEST97:
9248 case GTPV2_MODIFY_BEARER_REQUEST34:
9249 case GTPV2_DELETE_BEARER_REQUEST99:
9250 case GTPV2_DELETE_SESSION_REQUEST36:
9251 case GTPV2_MODIFY_BEARER_COMMAND64:
9252 case GTPV2_DELETE_BEARER_COMMAND66:
9253 case GTPV2_BEARER_RESOURCE_COMMAND68:
9254 case GTPV2_SRVCC_PS_TO_CS_REQUEST25:
9255 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27:
9256 case GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29:
9257 case GTPV2_CONTEXT_REQUEST130:
9258 case GTPV2_FORWARD_RELOCATION_REQ133:
9259 case GTPV2_RELOCATION_CANCEL_REQUEST139:
9260 case GTPV2_FORWARD_CTX_NOTIFICATION137:
9261 case GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135:
9262 case GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170:
9263 case GTPV2_DL_DATA_NOTIF176:
9264
9265 gcr.seq_nr = seq_nr;
9266
9267 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->unmatched, &gcr);
9268 if (gcrp) {
9269 wmem_map_remove(gtpv2_info->unmatched, gcrp);
9270 }
9271 /* if we can't reuse the old one, grab a new chunk */
9272 if (!gcrp) {
9273 gcrp = wmem_new(wmem_file_scope(), gtpv2_msg_hash_t)((gtpv2_msg_hash_t*)wmem_alloc((wmem_file_scope()), sizeof(gtpv2_msg_hash_t
)))
;
9274 }
9275 gcrp->seq_nr = seq_nr;
9276 gcrp->req_frame = pinfo->num;
9277 gcrp->req_time = pinfo->abs_ts;
9278 gcrp->rep_frame = 0;
9279 gcrp->msgtype = msgtype;
9280 gcrp->is_request = true1;
9281
9282 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9283 gcrp->conv_id = conv->conv_index;
9284
9285 wmem_map_insert(gtpv2_info->unmatched, gcrp, gcrp);
9286 return NULL((void*)0);
9287 case GTPV2_CREATE_SESSION_RESPONSE33:
9288 case GTPV2_CREATE_BEARER_RESPONSE96:
9289 case GTPV2_UPDATE_BEARER_RESPONSE98:
9290 case GTPV2_MODIFY_BEARER_RESPONSE35:
9291 case GTPV2_DELETE_BEARER_RESPONSE100:
9292 case GTPV2_DELETE_SESSION_RESPONSE37:
9293 case GTPV2_MODIFY_BEARER_FAILURE_INDICATION65:
9294 case GTPV2_DELETE_BEARER_FAILURE_INDICATION67:
9295 case GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69:
9296 case GTPV2_SRVCC_PS_TO_CS_RESPONSE26:
9297 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28:
9298 case GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30:
9299 case GTPV2_CONTEXT_RESPONSE131:
9300 case GTPV2_FORWARD_RELOCATION_RESP134:
9301 case GTPV2_RELOCATION_CANCEL_RESPONSE140:
9302 case GTPV2_FORWARD_CTX_ACKNOWLEDGE138:
9303 case GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136:
9304 case GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171:
9305 case GTPV2_DL_DATA_NOTIF_ACK177:
9306
9307 gcr.seq_nr = seq_nr;
9308 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->unmatched, &gcr);
9309
9310 if (gcrp) {
9311 if (!gcrp->rep_frame) {
9312 wmem_map_remove(gtpv2_info->unmatched, gcrp);
9313 gcrp->rep_frame = pinfo->num;
9314 gcrp->is_request = false0;
9315
9316 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9317 gcrp->conv_id = conv->conv_index;
9318
9319 wmem_map_insert(gtpv2_info->matched, gcrp, gcrp);
9320 }
9321 }
9322 break;
9323 default:
9324 break;
9325 }
9326 }
9327
9328 /* we have found a match */
9329 if (gcrp) {
9330 proto_item *it;
9331
9332 if (gcrp->is_request) {
9333 it = proto_tree_add_uint(tree, hf_gtpv2_response_in, tvb, 0, 0, gcrp->rep_frame);
9334 proto_item_set_generated(it);
9335 } else {
9336 nstime_t ns;
9337
9338 it = proto_tree_add_uint(tree, hf_gtpv2_response_to, tvb, 0, 0, gcrp->req_frame);
9339 proto_item_set_generated(it);
9340 nstime_delta(&ns, &pinfo->abs_ts, &gcrp->req_time);
9341 it = proto_tree_add_time(tree, hf_gtpv2_response_time, tvb, 0, 0, &ns);
9342 proto_item_set_generated(it);
9343 if (g_gtp_session && !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
9344 /* GTP session */
9345 /* If it's not already in the list */
9346 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (pinfo->num)))))
;
9347 if (!session) {
9348 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(gcrp->req_frame)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (gcrp->req_frame)))))
;
9349 if (session) {
9350 add_gtp_session(pinfo->num, session);
9351 }
9352 }
9353
9354 if (!is_cause_accepted(last_cause, 2)){
9355 /* If the cause is not accepted then we have to remove all the session information about its corresponding request */
9356 remove_frame_info(gcrp->req_frame);
9357 }
9358 }
9359 }
9360 }
9361 return gcrp;
9362}
9363
9364static void
9365track_gtpv2_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gtpv2_hdr_t * gtpv2_hdr, session_args_t * args)
9366{
9367 uint32_t session, frame_teid_cp;
9368 proto_item *it;
9369 char *imsi = NULL((void*)0);
9370
9371 /* GTP session */
9372 if (!PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
9373 /* If the message does not have any session ID */
9374 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (pinfo->num)))))
;
9375 if (!session) {
9376 /* If the message is not a CSESRES, CSESREQ, UBEAREQ, UBEARES, CBEAREQ, CBEARES, MBEAREQ or MBEARES then we remove its information from teid and ip lists */
9377 if ((gtpv2_hdr->message != GTPV2_CREATE_SESSION_RESPONSE33 && gtpv2_hdr->message != GTPV2_CREATE_SESSION_REQUEST32 && gtpv2_hdr->message != GTPV2_UPDATE_BEARER_RESPONSE98
9378 && gtpv2_hdr->message != GTPV2_UPDATE_BEARER_REQUEST97 && gtpv2_hdr->message != GTPV2_CREATE_BEARER_REQUEST95 && gtpv2_hdr->message != GTPV2_CREATE_BEARER_RESPONSE96
9379 && gtpv2_hdr->message != GTPV2_MODIFY_BEARER_REQUEST34 && gtpv2_hdr->message != GTPV2_MODIFY_BEARER_RESPONSE35)) {
9380 /* If the lists are not empty*/
9381 if (wmem_list_count(args->teid_list) && wmem_list_count(args->ip_list)) {
9382 remove_frame_info(pinfo->num);
9383 }
9384 }
9385
9386 if (gtpv2_hdr->message == GTPV2_CREATE_SESSION_REQUEST32){
9387 /* If CPDPCREQ and not already in the list then we create a new session*/
9388 add_gtp_session(pinfo->num, gtp_session_count);
9389
9390 if (args->imsi) {
9391 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9392 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9393 }
9394 }
9395 else if (gtpv2_hdr->message != GTPV2_CREATE_SESSION_RESPONSE33) {
9396 /* We have to check if its teid == teid_cp and ip.dst == gsn_ipv4 from the lists, if that is the case then we have to assign
9397 the corresponding session ID */
9398
9399 /* Handle deinterlacing case */
9400 if(is_deinterlacing_supported(pinfo)) {
9401 conversation_t *conversation;
9402 conversation = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9403
9404 if ((get_gtp_session_frame(pinfo->dst, (uint32_t)gtpv2_hdr->teid, conversation->conv_index, &frame_teid_cp, 0) == 1)) {
9405
9406 /* Then we have to set its session ID */
9407 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(frame_teid_cp)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (frame_teid_cp)))))
;
9408 if (session) {
9409 /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
9410 add_gtp_session(pinfo->num, session);
9411
9412 if (args->imsi) {
9413 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9414 wmem_map_insert(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)), imsi);
9415 }
9416 }
9417 }
9418 else if (gtpv2_hdr->message == GTPV2_MODIFY_BEARER_REQUEST34) {
9419 /* If MBEAREQ and not already in the list then we create a new session*/
9420 add_gtp_session(pinfo->num, gtp_session_count);
9421
9422 if (args->imsi) {
9423 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9424 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9425 } else {
9426 /* If handover from 5G, look up referenceid from earlier HTTP2 streams */
9427 static char to_str_back_buf[32];
9428 #define BACK_PTR(&to_str_back_buf[31]) (&to_str_back_buf[31]) /* pointer to NUL string terminator */
9429
9430 char* referenceid = uint_to_str_back(BACK_PTR(&to_str_back_buf[31]), (uint32_t)gtpv2_hdr->teid);
9431 imsi = http2_get_imsi_from_location(referenceid);
9432 if(imsi) {
9433 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9434 }
9435 }
9436 }
9437 }
9438
9439 else { // no deinterlacing supported/asked
9440 if ((get_frame(pinfo->dst, (uint32_t)gtpv2_hdr->teid, &frame_teid_cp) == 1)) {
9441 /* Then we have to set its session ID */
9442 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(frame_teid_cp)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (frame_teid_cp)))))
;
9443 if (session) {
9444 /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
9445 add_gtp_session(pinfo->num, session);
9446
9447 if (args->imsi) {
9448 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9449 wmem_map_insert(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)), imsi);
9450 }
9451 }
9452 }
9453 else if (gtpv2_hdr->message == GTPV2_MODIFY_BEARER_REQUEST34) {
9454 /* If MBEAREQ and not already in the list then we create a new session*/
9455 add_gtp_session(pinfo->num, gtp_session_count);
9456
9457 if (args->imsi) {
9458 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9459 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9460 } else {
9461 /* If handover from 5G, look up location from earlier HTTP2 streams */
9462 static char to_str_back_buf[32];
9463 #define BACK_PTR(&to_str_back_buf[31]) (&to_str_back_buf[31]) /* pointer to NUL string terminator */
9464
9465 char* location = uint_to_str_back(BACK_PTR(&to_str_back_buf[31]), (uint32_t)gtpv2_hdr->teid);
9466 imsi = http2_get_imsi_from_location(location);
9467 if(imsi) {
9468 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9469 }
9470 }
9471 }
9472 }
9473 }
9474 }
9475 }
9476
9477 if (tree) {
9478 session = GPOINTER_TO_UINT(wmem_map_lookup(session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (wmem_map_lookup(session_table, ((gpointer)
(gulong) (pinfo->num)))))
;
9479 if (session) {
9480 it = proto_tree_add_uint(tree, hf_gtpv2_session, tvb, 0, 0, session);
9481 proto_item_set_generated(it);
9482
9483 imsi = wmem_map_lookup(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)));
9484 if (imsi) {
9485 add_assoc_imsi_item(tvb, tree, imsi);
9486 }
9487 }
9488 }
9489}
9490
9491void
9492dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int offset, uint8_t message_type, session_args_t * args, uint8_t parent_ie)
9493{
9494 proto_tree *ie_tree;
9495 proto_item *ti;
9496 tvbuff_t *ie_tvb;
9497 uint8_t type, instance;
9498 uint16_t length;
9499 int i, remaining_length, msg_length;
9500 unsigned info_elem;
9501 /*
9502 * Octets 8 7 6 5 4 3 2 1
9503 * 1 Type
9504 * 2-3 Length = n
9505 * 4 CR Spare Instance
9506 * 5-(n+4) IE specific data
9507 */
9508 msg_length = (int)tvb_reported_length(tvb);
9509 while (offset < msg_length) {
9510 /* Get the type and length */
9511 remaining_length = msg_length - offset;
9512 if (remaining_length < 3) {
9513 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, offset, remaining_length,
9514 "Not enough data left for IE and length, %i bytes", remaining_length);
9515 return;
9516 }
9517 type = tvb_get_uint8(tvb, offset);
9518 length = tvb_get_ntohs(tvb, offset + 1);
9519 remaining_length = remaining_length -4;
9520 if (remaining_length < length) {
9521 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, offset+4, remaining_length,
9522 "Less data left than indicated by length %u, remaining length %i", length, remaining_length);
9523 /* Octet 1 */
9524 proto_tree_add_item(tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9525 offset += 1;
9526
9527 /*Octet 2 - 3 */
9528 proto_tree_add_item(tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9529 return;
9530 }
9531 ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + length, ett_gtpv2_ies[type], &ti, "%s: ",
9532 val_to_str_ext_const(type, &gtpv2_element_type_vals_ext, "Unknown"));
9533
9534 /* Octet 1 */
9535 proto_tree_add_item(ie_tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9536 offset += 1;
9537
9538 /*Octet 2 - 3 */
9539 proto_tree_add_item(ie_tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9540 offset += 2;
9541
9542 /* ch8.120 breaks the format described in ch8.2.1 */
9543 if (type == GTPV2_IE_MON_EVENT_INF189) {
9544 instance = tvb_get_uint8(tvb, offset) & 0x0f;
9545 } else {
9546 /* CR Spare Instance Octet 4*/
9547 proto_tree_add_item(ie_tree, hf_gtpv2_cr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9548
9549 instance = tvb_get_uint8(tvb, offset) & 0x0f;
9550 proto_tree_add_item(ie_tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9551
9552 /* Add Info element on IE types with multiple instances in same group */
9553 if (tree && message_type > 0) {
9554 /* XXX - This has 250+ entries and should really be a different
9555 * data structure, perhaps lazily creating a table. */
9556 for (info_elem = 0; info_elem < NUM_GTPV2_IE_INFO_ELEM_INSTANCES(sizeof (gtpv2_information_element_instance_vals) / sizeof (gtpv2_information_element_instance_vals
)[0])
; info_elem++) {
9557 if (gtpv2_information_element_instance_vals[info_elem].message_type == message_type &&
9558 gtpv2_information_element_instance_vals[info_elem].parent_ie == parent_ie &&
9559 gtpv2_information_element_instance_vals[info_elem].type == type &&
9560 gtpv2_information_element_instance_vals[info_elem].instance == instance)
9561 {
9562 proto_item_append_text(ie_tree, "%s: ", gtpv2_information_element_instance_vals[info_elem].info_element);
9563 break;
9564 }
9565 }
9566 }
9567 offset++;
9568 }
9569
9570 /* TODO: call IE dissector here */
9571 if (type == GTPV2_IE_RESERVED0) {
9572 /* Treat IE type zero special as type zero is used to end the loop in the else branch */
9573 expert_add_info(pinfo, ti, &ei_gtpv2_ie);
9574 } else {
9575 i = -1;
9576 /* Loop over the IE dissector list to se if we find an entry;
9577 the last entry will have ie_type=0 breaking the loop */
9578 while (gtpv2_ies[++i].ie_type) {
9579 if (gtpv2_ies[i].ie_type == type)
9580 break;
9581 }
9582 /* Just give the IE dissector the IE */
9583 ie_tvb = tvb_new_subset_remaining(tvb, offset);
9584 (*gtpv2_ies[i].decode) (ie_tvb, pinfo , ie_tree, ti, length, message_type, instance, args);
9585 }
9586
9587 /* ch8.120 breaks the format described in ch8.2.1 */
9588 if (type == GTPV2_IE_MON_EVENT_INF189) {
9589 offset++;
9590 }
9591
9592 offset += length;
9593 }
9594}
9595
9596static int
9597// NOLINTNEXTLINE(misc-no-recursion)
9598dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U___attribute__((unused)))
9599{
9600 proto_tree *gtpv2_tree;
9601 proto_item *ti;
9602 uint8_t message_type, t_flag, p_flag, mp_flag, cause_aux;
9603 int offset = 0;
9604 uint16_t msg_length;
9605 tvbuff_t *msg_tvb;
9606 int seq_no = 0;
9607 conversation_t *conversation;
9608 gtpv2_conv_info_t *gtpv2_info;
9609 session_args_t *args = NULL((void*)0);
9610 gtpv2_hdr_t * gtpv2_hdr = NULL((void*)0);
9611 gtpv2_msg_hash_t *gcrp = NULL((void*)0);
9612 uint64_t gtpv2_hdr_flags;
9613
9614 static int * const gtpv2_flags[] = {
9615 &hf_gtpv2_version,
9616 &hf_gtpv2_p,
9617 &hf_gtpv2_t,
9618 &hf_gtpv2_mp,
9619 NULL((void*)0)
9620 };
9621
9622 gtpv2_hdr = wmem_new0(pinfo->pool, gtpv2_hdr_t)((gtpv2_hdr_t*)wmem_alloc0((pinfo->pool), sizeof(gtpv2_hdr_t
)))
;
9623
9624 /* Setting the TEID to -1 to say that the TEID is not valid for this packet */
9625 gtpv2_hdr->teid = -1;
9626
9627 /* Currently we get called from the GTP dissector no need to check the version */
9628 col_set_str(pinfo->cinfo, COL_PROTOCOL, "GTPv2");
9629 col_clear(pinfo->cinfo, COL_INFO);
9630
9631 /* message type is in octet 2 */
9632 message_type = tvb_get_uint8(tvb, 1);
9633 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(message_type, &gtpv2_message_type_vals_ext, "Unknown"));
9634
9635
9636 msg_length = tvb_get_ntohs(tvb, offset + 2);
9637 ti = proto_tree_add_item(tree, proto_gtpv2, tvb, offset, msg_length + 4, ENC_NA0x00000000);
9638 gtpv2_tree = proto_item_add_subtree(ti, ett_gtpv2);
9639
9640 if (g_gtp_session) {
1
Assuming 'g_gtp_session' is false
2
Taking false branch
18
Assuming 'g_gtp_session' is true
19
Taking true branch
9641 args = wmem_new0(pinfo->pool, session_args_t)((session_args_t*)wmem_alloc0((pinfo->pool), sizeof(session_args_t
)))
;
9642 args->last_cause = 16; /* It stores the last cause decoded. Cause accepted by default */
9643 /* We create the auxiliary lists */
9644 args->teid_list = wmem_list_new(pinfo->pool);
9645 args->ip_list = wmem_list_new(pinfo->pool);
9646 }
9647
9648 /*
9649 * Do we have a conversation for this connection?
9650 */
9651 conversation = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
20
Value assigned to 'conversation'
9652 if(conversation == NULL((void*)0)) {
3
Assuming 'conversation' is equal to NULL
4
Taking true branch
21
Assuming 'conversation' is equal to NULL
22
Taking true branch
9653 // XXX - very unlikely this is needed as we're carried over IP
9654 conversation_new_strat(pinfo, CONVERSATION_IP, NO_PORTS0x010);
9655 }
9656
9657 /*
9658 * Do we already know this conversation?
9659 */
9660 gtpv2_info = (gtpv2_conv_info_t *)conversation_get_proto_data(conversation, proto_gtpv2);
9661 if (gtpv2_info == NULL((void*)0)) {
5
Assuming 'gtpv2_info' is not equal to NULL
6
Taking false branch
23
Assuming 'gtpv2_info' is not equal to NULL
24
Taking false branch
9662 /* No. Attach that information to the conversation, and add
9663 * it to the list of information structures.
9664 */
9665 gtpv2_info = wmem_new(wmem_file_scope(), gtpv2_conv_info_t)((gtpv2_conv_info_t*)wmem_alloc((wmem_file_scope()), sizeof(gtpv2_conv_info_t
)))
;
9666 /*Request/response matching tables*/
9667 gtpv2_info->matched = wmem_map_new(wmem_file_scope(), gtpv2_sn_hash, gtpv2_sn_equal_matched);
9668 gtpv2_info->unmatched = wmem_map_new(wmem_file_scope(), gtpv2_sn_hash, gtpv2_sn_equal_unmatched);
9669
9670 conversation_add_proto_data(conversation, proto_gtpv2, gtpv2_info);
9671 }
9672
9673 /* Control Plane GTP uses a variable length header. Control Plane GTP header
9674 * length shall be a multiple of 4 octets.
9675 * Figure 5.1-1 illustrates the format of the GTPv2-C Header.
9676 * Bits 8 7 6 5 4 3 2 1
9677 * Octets 1 Version P T Spare Spare Spare
9678 * 2 Message Type
9679 * 3 Message Length (1st Octet)
9680 * 4 Message Length (2nd Octet)
9681 * m-k(m+3) If T flag is set to 1, then TEID shall be placed into octets 5-8.
9682 * Otherwise, TEID field is not present at all.
9683 * n-(n+2) Sequence Number
9684 * (n+3) Spare
9685 * Figure 5.1-1: General format of GTPv2 Header for Control Plane
9686 */
9687
9688 /* 5.4 EPC specific GTP-C header
9689 * Bits 8 7 6 5 4 3 2 1
9690 * Octets 1 Version P T=1 MP Spare Spare
9691 * 2 Message Type
9692 * 3 Message Length (1st Octet)
9693 * 4 Message Length (2nd Octet)
9694 * 5 Tunnel Endpoint Identifier (1st Octet)
9695 * 6 Tunnel Endpoint Identifier (2nd Octet)
9696 * 7 Tunnel Endpoint Identifier (3rd Octet)
9697 * 8 Tunnel Endpoint Identifier (4th Octet)
9698 * 9 Sequence Number (1st Octet)
9699 * 10 Sequence Number (2nd Octet)
9700 * 11 Sequence Number (3rd Octet)
9701 * 12 Message Priority Spare
9702 */
9703
9704 /* Octet 1 */
9705 proto_tree_add_bitmask_with_flags_ret_uint64(gtpv2_tree, tvb, offset, hf_gtpv2_flags,
9706 ett_gtpv2_flags, gtpv2_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02, &gtpv2_hdr_flags);
9707
9708 gtpv2_hdr->flags = (uint8_t)gtpv2_hdr_flags;
9709 p_flag = (gtpv2_hdr->flags & 0x10) >> 4;
9710 t_flag = (gtpv2_hdr->flags & 0x08) >> 3;
9711 mp_flag = (gtpv2_hdr->flags & 0x04) >> 2;
9712
9713 offset += 1;
9714
9715 /* Octet 2 */
9716 gtpv2_hdr->message = tvb_get_uint8(tvb, offset);
9717 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_message_type, tvb, offset, 1, gtpv2_hdr->message);
9718 offset += 1;
9719 /* Octet 3 - 4 */
9720 gtpv2_hdr->length = tvb_get_ntohs(tvb, offset);
9721 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_msg_length, tvb, offset, 2, gtpv2_hdr->length);
9722 offset += 2;
9723
9724 if (t_flag) {
7
Assuming 't_flag' is 0
8
Taking false branch
25
Assuming 't_flag' is 0
26
Taking false branch
9725 /* Tunnel Endpoint Identifier 4 octets */
9726 gtpv2_hdr->teid = tvb_get_ntohl(tvb, offset);
9727 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_teid, tvb, offset, 4, (uint32_t)gtpv2_hdr->teid);
9728 offset += 4;
9729 }
9730 /* Sequence Number 3 octets */
9731 proto_tree_add_item_ret_uint(gtpv2_tree, hf_gtpv2_seq, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &seq_no);
9732 offset += 3;
9733
9734 /* Spare 1 octet or if the "MP" flag is set to "1",
9735 * then bits 8 to 5 of octet 12 shall indicate the message priority.
9736 */
9737 if (mp_flag) {
9
Assuming 'mp_flag' is 0
10
Taking false branch
27
Assuming 'mp_flag' is 0
28
Taking false branch
9738 /* Bits 8 to 5 of octet 12 shall be encoded as the binary value of the Message Priority
9739 * and it may take any value between 0 and 15, where 0 corresponds to the highest priority
9740 * and 15 the lowest priority.
9741 */
9742 proto_tree_add_item(gtpv2_tree, hf_gtpv2_msg_prio, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9743 }else{
9744 proto_tree_add_item(gtpv2_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9745 }
9746 offset += 1;
9747
9748 if (p_flag) {
11
Assuming 'p_flag' is not equal to 0
12
Taking true branch
29
Assuming 'p_flag' is 0
30
Taking false branch
9749 msg_tvb = tvb_new_subset_length(tvb, 0, msg_length + 4);
9750 dissect_gtpv2_ie_common(msg_tvb, pinfo, gtpv2_tree, offset, message_type, args, 0);
9751 } else {
9752 dissect_gtpv2_ie_common(tvb, pinfo, gtpv2_tree, offset, message_type, args, 0);
9753 }
9754 /*Use sequence number to track Req/Resp pairs*/
9755 cause_aux = 16; /* Cause accepted by default. Only used when args is NULL */
9756 if (args
12.1
'args' is null
30.1
'args' is non-null
&& !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
31
Assuming field 'visited' is 0
32
Taking true branch
9757 /* We insert the lists inside the table*/
9758 if(is_deinterlacing_supported(pinfo)) {
33
Assuming the condition is true
34
Taking true branch
9759 fill_map(args->teid_list, args->ip_list, pinfo->num, conversation->conv_index, 0);
35
Access to field 'conv_index' results in a dereference of a null pointer (loaded from variable 'conversation')
9760 }
9761 else {
9762 // no deinterlacing supported/asked
9763 fill_map(args->teid_list, args->ip_list, pinfo->num, 0, 1);
9764 }
9765 cause_aux = args->last_cause;
9766 }
9767 gcrp = gtpv2_match_response(tvb, pinfo, gtpv2_tree, seq_no, message_type, gtpv2_info, cause_aux);
9768 if (gcrp) {
13
Assuming 'gcrp' is null
14
Taking false branch
9769 tap_queue_packet(gtpv2_tap, pinfo, gcrp);
9770 }
9771 if (args
14.1
'args' is null
) {
15
Taking false branch
9772 track_gtpv2_session(tvb, pinfo, gtpv2_tree, gtpv2_hdr, args);
9773 }
9774
9775 /* Bit 5 represents a "P" flag. If the "P" flag is set to "0",
9776 * no piggybacked message shall be present. If the "P" flag is set to "1",
9777 * then another GTPv2-C message with its own header and body shall be present
9778 * at the end of the current message.
9779 */
9780 if (p_flag
15.1
'p_flag' is not equal to 0
) {
16
Taking true branch
9781 tvbuff_t *new_p_tvb;
9782 /* Octets 3 to 4 represent the Length field. This field shall indicate the
9783 * length of the message in octets excluding the
9784 * mandatory part of the GTP-C header (the first 4 octets).
9785 */
9786 new_p_tvb = tvb_new_subset_remaining(tvb, msg_length + 4);
9787 col_append_str(pinfo->cinfo, COL_INFO, " / ");
9788 col_set_fence(pinfo->cinfo, COL_INFO);
9789 increment_dissection_depth(pinfo);
9790 dissect_gtpv2(new_p_tvb, pinfo, tree, NULL((void*)0));
17
Calling 'dissect_gtpv2'
9791 decrement_dissection_depth(pinfo);
9792 }
9793
9794 return tvb_captured_length(tvb);
9795}
9796
9797void proto_register_gtpv2(void)
9798{
9799 unsigned i, last_offset;
9800
9801 static hf_register_info hf_gtpv2[] = {
9802 { &hf_gtpv2_response_in,
9803 { "Response In", "gtpv2.response_in",
9804 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE)((gpointer) (glong) (FT_FRAMENUM_RESPONSE)), 0x0,
9805 "The response to this GTP request is in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9806 },
9807 { &hf_gtpv2_response_to,
9808 { "Response To", "gtpv2.response_to",
9809 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST)((gpointer) (glong) (FT_FRAMENUM_REQUEST)), 0x0,
9810 "This is a response to the GTP request in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9811 },
9812 { &hf_gtpv2_response_time,
9813 { "Response Time", "gtpv2.response_time",
9814 FT_RELATIVE_TIME, BASE_NONE, NULL((void*)0), 0x0,
9815 "The time between the Request and the Response", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9816 },
9817 { &hf_gtpv2_spare_half_octet,
9818 {"Spare half octet", "gtpv2.spare_half_octet",
9819 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9821 },
9822 { &hf_gtpv2_spare_bits,
9823 {"Spare bit(s)", "gtpv2.spare_bits",
9824 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9826 },
9827 //{ &hf_gtpv2_spare_b7_b1,
9828 // {"Spare bit(s)", "gtpv2.spare_b7_b1",
9829 // FT_UINT8, BASE_DEC, NULL, 0xfe,
9830 // NULL, HFILL }
9831 //},
9832 { &hf_gtpv2_spare_b7_b2,
9833 { "Spare", "gtpv2.spare.b7_b2",
9834 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
9835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9836 },
9837 { &hf_gtpv2_spare_b7_b3,
9838 {"Spare bit(s)", "gtpv2.spare_b7_b3",
9839 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf8,
9840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9841 },
9842 { &hf_gtpv2_spare_b7_b4,
9843 { "Spare", "gtpv2.spare.b7_b4",
9844 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0,
9845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9846 },
9847 { &hf_gtpv2_spare_b7_b5,
9848 { "Spare", "gtpv2.spare.b7_b5",
9849 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
9850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9851 },
9852 {&hf_gtpv2_flags,
9853 {"Flags", "gtpv2.flags",
9854 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
9855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9856 },
9857 {&hf_gtpv2_version,
9858 {"Version", "gtpv2.version",
9859 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
9860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9861 },
9862 {&hf_gtpv2_p,
9863 {"Piggybacking flag (P)", "gtpv2.p",
9864 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
9865 "If Piggybacked message is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9866 },
9867 { &hf_gtpv2_t,
9868 {"TEID flag (T)", "gtpv2.t",
9869 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
9870 "If TEID field is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9871 },
9872 { &hf_gtpv2_mp,
9873 {"Message Priority(MP)", "gtpv2.mp",
9874 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
9875 "If Message Priority field is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9876 },
9877 { &hf_gtpv2_message_type,
9878 {"Message Type", "gtpv2.message_type",
9879 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_message_type_vals_ext, 0x0,
9880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9881 },
9882 { &hf_gtpv2_msg_length,
9883 {"Message Length", "gtpv2.msg_length",
9884 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9886 },
9887 { &hf_gtpv2_teid,
9888 {"Tunnel Endpoint Identifier", "gtpv2.teid",
9889 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
9890 "TEID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9891 },
9892 { &hf_gtpv2_seq,
9893 {"Sequence Number", "gtpv2.seq",
9894 FT_UINT24, BASE_HEX_DEC, NULL((void*)0), 0x0,
9895 "SEQ", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9896 },
9897 { &hf_gtpv2_msg_prio,
9898 {"Message Priority", "gtpv2.mp",
9899 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0xf0,
9900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9901 },
9902 { &hf_gtpv2_spare,
9903 {"Spare", "gtpv2.spare",
9904 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9906 },
9907 { &hf_gtpv2_spare_w0,
9908 { "Spare", "gtpv2.spare.w0",
9909 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9911 },
9912 { &hf_gtpv2_ie,
9913 {"IE Type", "gtpv2.ie_type",
9914 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_element_type_vals_ext, 0x0,
9915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9916 },
9917 { &hf_gtpv2_ie_len,
9918 {"IE Length", "gtpv2.ie_len",
9919 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9920 "length of the information element excluding the first four octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9921 },
9922 { &hf_gtpv2_cr,
9923 {"CR flag", "gtpv2.cr",
9924 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, /* SRVCC */
9925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9926 },
9927 { &hf_gtpv2_instance,
9928 {"Instance", "gtpv2.instance",
9929 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
9930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9931 },
9932 { &hf_gtpv2_ipv4_addr,
9933 {"IPv4 Address", "gtpv2.ipv4_addr",
9934 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
9935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9936 },
9937 { &hf_gtpv2_cause,
9938 {"Cause", "gtpv2.cause",
9939 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_cause_vals_ext, 0x0,
9940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9941 },
9942 {&hf_gtpv2_cause_cs,
9943 {"CS (Cause Source)", "gtpv2.cs",
9944 FT_BOOLEAN, 8, TFS(&gtpv2_cause_cs)((0 ? (const struct true_false_string*)0 : ((&gtpv2_cause_cs
))))
, 0x01,
9945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9946 },
9947 { &hf_gtpv2_cause_bce,
9948 {"BCE (Bearer Context IE Error)", "gtpv2.bce",
9949 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
9950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9951 },
9952 { &hf_gtpv2_cause_pce,
9953 {"PCE (PDN Connection IE Error)", "gtpv2.pce",
9954 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
9955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9956 },
9957 { &hf_gtpv2_cause_off_ie_t,
9958 {"Type of the offending IE", "gtpv2.cause_off_ie_t",
9959 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_element_type_vals_ext, 0x0,
9960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9961 },
9962 { &hf_gtpv2_rec,
9963 {"Restart Counter", "gtpv2.rec",
9964 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9966 },
9967/*Start SRVCC Messages*/
9968 { &hf_gtpv2_stn_sr,
9969 {"STN-SR", "gtpv2.stn_sr",
9970 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9972 },
9973 { &hf_gtpv2_len_trans_con,
9974 {"Length of the Transparent Container", "gtpv2.len_trans_con",
9975 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9977 },
9978 { &hf_gtpv2_eksi,
9979 {"eKSI", "gtpv2.eksi",
9980 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
9981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9982 },
9983 { &hf_gtpv2_ck,
9984 {"CK", "gtpv2.ck",
9985 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9987 },
9988 { &hf_gtpv2_ik,
9989 {"IK", "gtpv2.ik",
9990 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9992 },
9993 { &hf_gtpv2_len_ms_classmark2,
9994 {"Length of Mobile Station Classmark2", "gtpv2.len_ms_classmark2",
9995 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9997 },
9998 { &hf_gtpv2_len_ms_classmark3,
9999 {"Length of Mobile Station Classmark3", "gtpv2.len_ms_classmark3",
10000 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10002 },
10003 { &hf_gtpv2_len_supp_codec_list,
10004 {"Length of Supported Codec List", "gtpv2.len_supp_codec_list",
10005 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10007 },
10008 { &hf_gtpv2_ksi,
10009 {"KSI'cs", "gtpv2.ksi",
10010 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
10011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10012 },
10013 { &hf_gtpv2_cksn,
10014 {"CKSN'", "gtpv2.cksn",
10015 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10017 },
10018 { &hf_gtpv2_srvcc_cause,
10019 {"SRVCC Cause", "gtpv2.srvcc_cause",
10020 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_srvcc_cause_vals_ext, 0x0,
10021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10022 },
10023 {&hf_gtpv2_rac,
10024 { "Routing Area Code (RAC)", "gtpv2.rac",
10025 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
10026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10027 },
10028
10029 { &hf_gtpv2_rnc_id,
10030 {"RNC ID", "gtpv2.rnc_id",
10031 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10033 },
10034 { &hf_gtpv2_ext_rnc_id,
10035 {"Extended RNC-ID", "gtpv2.ext_rnc_id",
10036 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10038 },
10039 { &hf_gtpv2_lac,
10040 { "Location Area Code (LAC)", "gtpv2.lac",
10041 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x00,
10042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10043 },
10044 { &hf_gtpv2_sac,
10045 { "Service Area Code (SAC)", "gtpv2.sac",
10046 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x00,
10047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10048 },
10049 { &hf_gtpv2_tgt_g_cell_id,
10050 {"Cell ID", "gtpv2.tgt_g_cell_id",
10051 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10053 },
10054 {&hf_gtpv2_teid_c,
10055 {"Tunnel Endpoint Identifier for Control Plane(TEID-C)", "gtpv2.teid_c",
10056 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
10057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10058 },
10059 {&hf_gtpv2_sv_sti,
10060 {"STI (Session Transfer Indicator)", "gtpv2.sv_sti",
10061 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10062 },
10063 {&hf_gtpv2_sv_ics,
10064 {"ICS (IMS Centralized Service)", "gtpv2.sv_ics",
10065 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10066 },
10067 {&hf_gtpv2_sv_emind,
10068 {"EmInd(Emergency Indicator)", "gtpv2.sv_emind",
10069 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10070 },
10071
10072/*End SRVCC Messages*/
10073 {&hf_gtpv2_apn,
10074 {"APN (Access Point Name)", "gtpv2.apn",
10075 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
10076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10077 },
10078 {&hf_gtpv2_ambr_up,
10079 {"AMBR Uplink (Aggregate Maximum Bit Rate for Uplink)", "gtpv2.ambr_up",
10080 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10082 },
10083 {&hf_gtpv2_ambr_down,
10084 {"AMBR Downlink (Aggregate Maximum Bit Rate for Downlink)", "gtpv2.ambr_down",
10085 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10087 },
10088 {&hf_gtpv2_ebi,
10089 {"EPS Bearer ID (EBI)", "gtpv2.ebi",
10090 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
10091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10092 },
10093 { &hf_gtpv2_ip_address_ipv4,
10094 {"IP address IPv4", "gtpv2.ip_address_ipv4",
10095 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
10096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10097 },
10098 { &hf_gtpv2_ip_address_ipv6,
10099 {"IP address IPv6", "gtpv2.ip_address_ipv6",
10100 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
10101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10102 },
10103 {&hf_gtpv2_mei,
10104 {"MEI(Mobile Equipment Identity)", "gtpv2.mei",
10105 FT_STRING, BASE_NONE, NULL((void*)0), 0,
10106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10107 },
10108 { &hf_gtpv2_pdn_numbers_nsapi,
10109 {"NSAPI", "gtpv2.pdn_numbers_nsapi",
10110 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10111 },
10112 { &hf_gtpv2_p_tmsi,
10113 {"Packet TMSI (P-TMSI)", "gtpv2.p_tmsi",
10114 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10115 },
10116 { &hf_gtpv2_p_tmsi_sig,
10117 {"P-TMSI Signature", "gtpv2.p_tmsi_sig",
10118 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10119 },
10120 {&hf_gtpv2_daf,
10121 {"DAF (Dual Address Bearer Flag)", "gtpv2.daf",
10122 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10123 },
10124 {&hf_gtpv2_dtf,
10125 {"DTF (Direct Tunnel Flag)", "gtpv2.dtf",
10126 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10127 },
10128 {&hf_gtpv2_hi,
10129 {"HI (Handover Indication)", "gtpv2.hi",
10130 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10131 },
10132 {&hf_gtpv2_dfi,
10133 {"DFI (Direct Forwarding Indication)", "gtpv2.dfi",
10134 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10135 },
10136 {&hf_gtpv2_oi,
10137 {"OI (Operation Indication)", "gtpv2.oi",
10138 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10139 },
10140 {&hf_gtpv2_isrsi,
10141 {"ISRSI (Idle mode Signalling Reduction Supported Indication)", "gtpv2.isrsi",
10142 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10143 },
10144 {&hf_gtpv2_israi,
10145 {"ISRAI (Idle mode Signalling Reduction Activation Indication)", "gtpv2.israi",
10146 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10147 },
10148 {&hf_gtpv2_sgwci,
10149 {"SGWCI (SGW Change Indication)", "gtpv2.sgwci",
10150 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10151 },
10152 {&hf_gtpv2_sqci,
10153 {"SQCI (Subscribed QoS Change Indication)", "gtpv2.sqci",
10154 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10155 },
10156 {&hf_gtpv2_uimsi,
10157 {"UIMSI (Unauthenticated IMSI)", "gtpv2.uimsi",
10158 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10159 },
10160 {&hf_gtpv2_cfsi,
10161 {"CFSI (Change F-TEID support indication)", "gtpv2.cfsi",
10162 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10163 },
10164 {&hf_gtpv2_crsi,
10165 {"CRSI (Change Reporting support indication)", "gtpv2.crsi",
10166 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10167 },
10168 {&hf_gtpv2_ps,
10169 {"PS (Piggybacking Supported)", "gtpv2.ps",
10170 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10171 },
10172 {&hf_gtpv2_pt,
10173 {"PT (Protocol Type)", "gtpv2.pt",
10174 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10175 },
10176 {&hf_gtpv2_si,
10177 {"SI (Scope Indication)", "gtpv2.si",
10178 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10179 },
10180 {&hf_gtpv2_msv,
10181 {"MSV (MS Validated)", "gtpv2.msv",
10182 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10183 },
10184 {&hf_gtpv2_retloc,
10185 {"RetLoc (Retrieve Location Indication Flag)", "gtpv2.retloc",
10186 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10187 },
10188 {&hf_gtpv2_pbic,
10189 {"PBIC (Propagate BBAI Information Change)", "gtpv2.pbic",
10190 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10191 },
10192 {&hf_gtpv2_srni,
10193 {"SRNI (SGW Restoration Needed Indication)", "gtpv2.snri",
10194 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10195 },
10196 {&hf_gtpv2_s6af,
10197 {"S6AF (Static IPv6 Address Flag)", "gtpv2.s6af",
10198 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10199 },
10200 {&hf_gtpv2_s4af,
10201 {"S4AF (Static IPv4 Address Flag)", "gtpv2.s4af",
10202 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10203 },
10204 {&hf_gtpv2_mbmdt,
10205 {"MBMDT (Management Based MDT allowed flag)", "gtpv2.mbmdt",
10206 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10207 },
10208 {&hf_gtpv2_israu,
10209 {"ISRAU (ISR is activated for the UE)", "gtpv2.israu",
10210 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10211 },
10212 {&hf_gtpv2_ccrsi,
10213 {"CCRSI (CSG Change Reporting support indication)", "gtpv2.ccrsi",
10214 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10215 },
10216
10217 {&hf_gtpv2_cprai,
10218 {"CPRAI (Change of Presence Reporting Area information Indication)", "gtpv2.cprai",
10219 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10220 },
10221 {&hf_gtpv2_arrl,
10222 {"ARRL (Abnormal Release of Radio Link)", "gtpv2.arrl",
10223 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10224 },
10225 {&hf_gtpv2_ppof,
10226 {"PPOFF (PDN Pause Off Indication)", "gtpv2.ppof",
10227 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10228 },
10229 {&hf_gtpv2_ppon_ppei,
10230 {"PPON (PDN Pause On Indication) / PPEI (PDN Pause Enabled Indication)", "gtpv2.ppon_ppei",
10231 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10232 },
10233 {&hf_gtpv2_ppsi,
10234 {"PPSI (PDN Pause Support Indication)", "gtpv2.ppsi",
10235 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10236 },
10237 {&hf_gtpv2_csfbi,
10238 {"CSFBI (CSFB Indication)", "gtpv2.csfbi",
10239 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10240 },
10241 {&hf_gtpv2_clii,
10242 {"CLII (Change of Location Information Indication)", "gtpv2.clii",
10243 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10244 },
10245 {&hf_gtpv2_cpsr,
10246 {"CPSR (CS to PS SRVCC Indication)", "gtpv2.cpsr",
10247 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10248 },
10249 {&hf_gtpv2_nsi,
10250 {"NSI (NBIFOM Support Indication)", "gtpv2.nsi",
10251 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10252 },
10253 {&hf_gtpv2_uasi,
10254 {"UASI (UE Available for Signalling Indication)", "gtpv2.uasi",
10255 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10256 },
10257 {&hf_gtpv2_dtci,
10258 {"DTCI (Delay Tolerant Connection Indication)", "gtpv2.dtci",
10259 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10260 },
10261 {&hf_gtpv2_bdwi,
10262 {"BDWI (Buffered DL Data Waiting Indication)", "gtpv2.bdwi",
10263 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10264 },
10265 {&hf_gtpv2_psci,
10266 {"PSCI (Pending Subscription Change Indication)", "gtpv2.psci",
10267 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10268 },
10269 {&hf_gtpv2_pcri,
10270 {"PCRI (P-CSCF Restoration Indication)", "gtpv2.pcri",
10271 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10272 },
10273 {&hf_gtpv2_aosi,
10274 {"AOSI (Associate OCI with SGW node's Identity)", "gtpv2.aosi",
10275 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10276 },
10277 {&hf_gtpv2_aopi,
10278 {"AOPI (Associate OCI with PGW node's Identity)", "gtpv2.aopi",
10279 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10280 },
10281 {&hf_gtpv2_roaai,
10282 {"ROAAI (Release Over Any Access Indication)", "gtpv2.roaai",
10283 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10284 },
10285 {&hf_gtpv2_epcosi,
10286 {"EPCOSI (Extended PCO Support Indication)", "gtpv2.epcosi",
10287 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10288 },
10289 {&hf_gtpv2_cpopci,
10290 {"CPOPCI (Control Plane Only PDN Connection Indication)", "gtpv2.cpopci",
10291 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10292 },
10293 {&hf_gtpv2_pmtsmi,
10294 {"PMTSMI (Pending MT Short Message Indication)", "gtpv2.pmtsmi",
10295 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10296 },
10297 {&hf_gtpv2_s11tf,
10298 {"S11TF (S11-U Tunnel Flag)", "gtpv2.s11tf",
10299 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10300 },
10301 {&hf_gtpv2_pnsi,
10302 {"PNSI (Pending Network Initiated PDN Connection Signalling Indication)", "gtpv2.pnsi",
10303 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10304 },
10305 {&hf_gtpv2_unaccsi,
10306 {"UNACCSI (UE Not Authorized Cause Code Support Indication)", "gtpv2.unaccsi",
10307 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10308 },
10309 {&hf_gtpv2_wpmsi,
10310 {"WPMSI (WLCP PDN Connection Modification Support Indication)", "gtpv2.wpmsi",
10311 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10312 },
10313 {&hf_gtpv2_5gsnn26,
10314 { "5GSNN26 (5GS Interworking without N26 Indication)", "gtpv2.5gsnn26",
10315 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10316 },
10317 {&hf_gtpv2_reprefi,
10318 { "REPREFI (Return Preferred Indication)", "gtpv2.reprefi",
10319 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10320 },
10321 {&hf_gtpv2_5gsiwk,
10322 { "5GSIWKI (5GS Interworking Indication)", "gtpv2.5gsiwk",
10323 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10324 },
10325 {&hf_gtpv2_eevrsi,
10326 { "EEVRSI (Extended EBI Value Range Support Indication)", "gtpv2.eevrsi",
10327 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10328 },
10329 {&hf_gtpv2_ltemui,
10330 { "LTEMUI (LTE-M UE Indication)", "gtpv2.ltemui",
10331 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10332 },
10333 {&hf_gtpv2_ltempi,
10334 { "LTEMPI (LTE-M RAT Type reporting to PGW Indication)", "gtpv2.ltempi",
10335 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10336 },
10337 {&hf_gtpv2_enbcrsi,
10338 {"ENBCRSI (eNB Change Reporting Support Indication)", "gtpv2.enbcrsi",
10339 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10340 },
10341 {&hf_gtpv2_tspcmi,
10342 {"TSPCMI (Triggering SGSN Initiated PDP Context Creation/Modification Indication)", "gtpv2.tspcmi",
10343 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10344 },
10345 {&hf_gtpv2_csrmfi,
10346 { "CSRMFI (Create Session Request Message Forwarded Indication)", "gtpv2.csrmfi",
10347 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10348 },
10349 {&hf_gtpv2_mtedtn,
10350 { "MTEDTN (MT-EDT Not Applicable)", "gtpv2.mtedtn",
10351 FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable)((0 ? (const struct true_false_string*)0 : ((&tfs_applicable_not_applicable
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10352 },
10353
10354 {&hf_gtpv2_mtedta,
10355 { "MTEDTA (MT-EDT Applicable)", "gtpv2.mtedta",
10356 FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable)((0 ? (const struct true_false_string*)0 : ((&tfs_applicable_not_applicable
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10357 },
10358
10359 {&hf_gtpv2_n5gnmi,
10360 { "N5GNMI (No 5GS N26 Mobility Indication)", "gtpv2.n5gnmi",
10361 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10362 },
10363 { &hf_gtpv2_5gcnrs,
10364 { "5GCNRS (5GC Not Restricted Support)", "gtpv2.5gcnrs",
10365 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10366 },
10367 { &hf_gtpv2_5gcnri,
10368 { "5GCNRI (5GC Not Restricted Indication)", "gtpv2.5gcnri",
10369 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10370 },
10371 { &hf_gtpv2_5srhoi,
10372 { "5SRHOI (5G-SRVCC HO Indication)", "gtpv2.5srhoi",
10373 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10374 },
10375 { &hf_gtpv2_ethpdn,
10376 {"ETHPDN (Ethernet PDN Support Indication)", "gtpv2.ethpdn",
10377 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10378 },
10379 { &hf_gtpv2_nspusi,
10380 {"NSPUSI (Notify Start of Pause of Charging via User plane Support Indication)", "gtpv2.nspusi",
10381 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10382 },
10383 { &hf_gtpv2_pgwrnsi,
10384 {"PGWRNSI (PGW Redirection due to mismatch with Network Slice subscribed by UE Support Indication)", "gtpv2.pgwrnsi",
10385 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10386 },
10387 { &hf_gtpv2_rppcsi,
10388 {"RPPCSI (Restoration of PDN connections after an PGW-C/SMF change Support Indication)", "gtpv2.rppcsi",
10389 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10390 },
10391 { &hf_gtpv2_pgwchi,
10392 {"PGWCHI (PGW CHange Indication)", "gtpv2.pgwchi",
10393 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10394 },
10395 { &hf_gtpv2_sissme,
10396 {"SISSME (Same IWK-SCEF Selected for Monitoring Event Indication)", "gtpv2.sissme",
10397 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10398 },
10399 { &hf_gtpv2_nsenbi,
10400 {"NSENBI (Notify Source eNodeB Indication)", "gtpv2.nsenbi",
10401 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10402 },
10403 { &hf_gtpv2_idfupf,
10404 {"IDFUPF (Indirect Data Forwarding with UPF Indication)", "gtpv2.idfupf",
10405 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10406 },
10407 { &hf_gtpv2_emci,
10408 {"EMCI (Emergency PDU Session Indication)", "gtpv2.emci",
10409 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10410 },
10411 { &hf_gtpv2_lapcosi,
10412 {"LAPCOSI (Large Additional Protocol Configuration Options Support Indication)", "gtpv2.lapcosi",
10413 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10414 },
10415 { &hf_gtpv2_ltemsai,
10416 {"LTEMSAI (LTE-M Satellite Access Indication)", "gtpv2.ltemsai",
10417 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10418 },
10419 { &hf_gtpv2_srtpi,
10420 {"SRTPI (Satellite RAT Type reporting to PGW Indication)", "gtpv2.srtpi",
10421 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10422 },
10423 { &hf_gtpv2_upipsi,
10424 {"UPIPSI (User Plane Integrity Protection Support Indication)", "gtpv2.upipsi",
10425 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10426 },
10427
10428
10429 { &hf_gtpv2_pdn_type,
10430 {"PDN Type", "gtpv2.pdn_type",
10431 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_pdn_type_vals_ext, 0x07,
10432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10433 },
10434#if 0
10435 { &hf_gtpv2_tra_info,
10436 {"Trace ID", "gtpv2.tra_info",
10437 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
10438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10439 },
10440#endif
10441 { &hf_gtpv2_tra_info_msc_momt_calls,
10442 {"MO and MT calls", "gtpv2.tra_info_msc_momt_calls",
10443 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10444 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10445 },
10446 { &hf_gtpv2_tra_info_msc_momt_sms,
10447 {"MO and MT SMS", "gtpv2.tra_info_msc_momt_sms",
10448 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10449 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10450 },
10451 { &hf_gtpv2_tra_info_msc_lu_imsi_ad,
10452 {"LU, IMSI attach, IMSI detach", "gtpv2.tra_info_msc_lu_imsi_ad",
10453 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10454 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10455 },
10456 { &hf_gtpv2_tra_info_msc_handovers,
10457 {"Handovers", "gtpv2.tra_info_msc_handovers",
10458 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10459 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10460 },
10461 { &hf_gtpv2_tra_info_msc_ss,
10462 {"SS", "gtpv2.tra_info_msc_ss",
10463 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10464 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10465 },
10466 { &hf_gtpv2_tra_info_mgw_context,
10467 {"Context", "gtpv2.tra_info_mgw_context",
10468 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10469 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10470 },
10471 { &hf_gtpv2_tra_info_sgsn_pdp_context,
10472 {"PDP context", "gtpv2.tra_info_sgsn_pdp_context",
10473 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10474 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10475 },
10476 { &hf_gtpv2_tra_info_sgsn_momt_sms,
10477 {"MO and MT SMS", "gtpv2.tra_info_sgsn_momt_sms",
10478 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10479 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10480 },
10481 { &hf_gtpv2_tra_info_sgsn_rau_gprs_ad,
10482 {"RAU, GPRS attach, GPRS detach", "gtpv2.tra_info_sgsn_rau_gprs_ad",
10483 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10484 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10485 },
10486 { &hf_gtpv2_tra_info_sgsn_mbms,
10487 {"MBMS Context", "gtpv2.tra_info_sgsn_mbms",
10488 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10489 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10490 },
10491 { &hf_gtpv2_tra_info_sgsn_reserved,
10492 {"Reserved", "gtpv2.tra_info_sgsn_reserved",
10493 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10494 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10495 },
10496 { &hf_gtpv2_tra_info_ggsn_pdp,
10497 {"PDP Context", "gtpv2.tra_info_ggsn_pdp",
10498 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10499 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10500 },
10501 { &hf_gtpv2_tra_info_ggsn_mbms,
10502 {"MBMS Context", "gtpv2.tra_info_ggsn_mbms",
10503 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10504 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10505 },
10506 { &hf_gtpv2_tra_info_bm_sc,
10507 {"MBMS Multicast service activation", "gtpv2.tra_info_bm_sc",
10508 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10509 "BM-SC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10510 },
10511 { &hf_gtpv2_tra_info_mme_sgw_ss,
10512 {"Session setup", "gtpv2.tra_info_mme_sgw_ss",
10513 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10514 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10515 },
10516 { &hf_gtpv2_tra_info_mme_sgw_sr,
10517 {"Service Request", "gtpv2.tra_info_mme_sgw_sr",
10518 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10519 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10520 },
10521 { &hf_gtpv2_tra_info_mme_sgw_iataud,
10522 {"Initial Attach, Tracking area update, Detach", "gtpv2.tra_info_mme_sgw_iataud",
10523 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10524 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10525 },
10526 { &hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc,
10527 {"UE initiated PDN disconnection", "gtpv2.tra_info_mme_sgw_ue_init_pdn_disc",
10528 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10529 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10530 },
10531 { &hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del,
10532 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_mme_sgw_bearer_act_mod_del",
10533 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10534 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10535 },
10536 { &hf_gtpv2_tra_info_mme_sgw_ho,
10537 {"Handover", "gtpv2.tra_info_mme_sgw_ho",
10538 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10539 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10540 },
10541 { &hf_gtpv2_tra_info_sgw_pdn_con_creat,
10542 {"PDN Connection creation", "gtpv2.tra_info_sgw_pdn_con_creat",
10543 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10544 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10545 },
10546 { &hf_gtpv2_tra_info_sgw_pdn_con_term,
10547 {"PDN connection termination", "gtpv2.tra_info_sgw_pdn_con_term",
10548 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10549 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10550 },
10551 { &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
10552 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_sgw_bearer_act_mod_del",
10553 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10554 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10555 },
10556 { &hf_gtpv2_tra_info_pgw_pdn_con_creat,
10557 {"PDN Connection creation", "gtpv2.tra_info_pgw_pdn_con_creat",
10558 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10559 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10560 },
10561 { &hf_gtpv2_tra_info_pgw_pdn_con_term,
10562 {"PDN connection termination", "gtpv2.tra_info_pgw_pdn_con_term",
10563 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10564 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10565 },
10566 { &hf_gtpv2_tra_info_pgw_bearer_act_mod_del,
10567 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_pgw_bearer_act_mod_del",
10568 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10569 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10570 },
10571 { &hf_gtpv2_tra_info_lne_msc_s,
10572 {"MSC-S", "gtpv2.tra_info_lne_msc_s",
10573 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
10574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10575 },
10576 { &hf_gtpv2_tra_info_lne_mgw,
10577 {"MGW", "gtpv2.tra_info_lne_mgw",
10578 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
10579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10580 },
10581 { &hf_gtpv2_tra_info_lne_sgsn,
10582 {"SGSN", "gtpv2.tra_info_lne_sgsn",
10583 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
10584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10585 },
10586 { &hf_gtpv2_tra_info_lne_ggsn,
10587 {"GGSN", "gtpv2.tra_info_lne_ggsn",
10588 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
10589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10590 },
10591 { &hf_gtpv2_tra_info_lne_rnc,
10592 {"RNC", "gtpv2.tra_info_lne_rnc",
10593 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10595 },
10596 { &hf_gtpv2_tra_info_lne_bm_sc,
10597 {"BM-SC", "gtpv2.tra_info_lne_bm_sc",
10598 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
10599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10600 },
10601 { &hf_gtpv2_tra_info_lne_mme,
10602 {"MME", "gtpv2.tra_info_lne_mme",
10603 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
10604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10605 },
10606 { &hf_gtpv2_tra_info_lne_sgw,
10607 {"SGW", "gtpv2.tra_info_lne_sgw",
10608 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
10609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10610 },
10611 { &hf_gtpv2_tra_info_lne_pdn_gw,
10612 {"PDN GW", "gtpv2.tra_info_lne_pdn_gw",
10613 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
10614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10615 },
10616 { &hf_gtpv2_tra_info_lne_enb,
10617 {"eNB", "gtpv2.tra_info_lne_enb",
10618 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
10619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10620 },
10621 { &hf_gtpv2_tra_info_lne_amf,
10622 {"AMF", "gtpv2.tra_info_lne_amf",
10623 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
10624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10625 },
10626 { &hf_gtpv2_tra_info_lne_smf,
10627 {"SMF", "gtpv2.tra_info_lne_smf",
10628 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
10629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10630 },
10631 { &hf_gtpv2_tra_info_lne_pcf,
10632 {"PCF", "gtpv2.tra_info_lne_pcf",
10633 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
10634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10635 },
10636 { &hf_gtpv2_tra_info_lne_upf,
10637 {"UPF", "gtpv2.tra_info_lne_upf",
10638 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
10639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10640 },
10641 { &hf_gtpv2_tra_info_tra_info_ng_ran_node,
10642 {"NG-RAN node", "gtpv2.tra_info_ng_ran_node",
10643 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
10644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10645 },
10646
10647 { &hf_gtpv2_tra_info_tdl,
10648 {"Trace Depth Length", "gtpv2.tra_info_tdl",
10649 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10651 },
10652 { &hf_gtpv2_tra_info_lmsc_a,
10653 {"A", "gtpv2.tra_info_lmsc_a",
10654 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10655 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10656 },
10657 { &hf_gtpv2_tra_info_lmsc_lu,
10658 {"Iu", "gtpv2.tra_info_lmsc_lu",
10659 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10660 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10661 },
10662 { &hf_gtpv2_tra_info_lmsc_mc,
10663 {"Mc", "gtpv2.tra_info_lmsc_mc",
10664 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10665 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10666 },
10667 { &hf_gtpv2_tra_info_lmsc_map_g,
10668 {"MAP-G", "gtpv2.tra_info_lmsc_map_g",
10669 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10670 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10671 },
10672 { &hf_gtpv2_tra_info_lmsc_map_b,
10673 {"MAP-B", "gtpv2.tra_info_lmsc_map_b",
10674 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10675 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10676 },
10677 { &hf_gtpv2_tra_info_lmsc_map_e,
10678 {"MAP-E", "gtpv2.tra_info_lmsc_map_e",
10679 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10680 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10681 },
10682 { &hf_gtpv2_tra_info_lmsc_map_f,
10683 {"MAP-F", "gtpv2.tra_info_lmsc_map_f",
10684 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10685 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10686 },
10687 { &hf_gtpv2_tra_info_lmsc_cap,
10688 {"CAP", "gtpv2.tra_info_lmsc_cap",
10689 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10690 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10691 },
10692 { &hf_gtpv2_tra_info_lmsc_map_d,
10693 {"MAP-D", "gtpv2.tra_info_lmsc_map_d",
10694 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10695 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10696 },
10697 { &hf_gtpv2_tra_info_lmsc_map_c,
10698 {"MAP-C", "gtpv2.tra_info_lmsc_map_c",
10699 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10700 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10701 },
10702 { &hf_gtpv2_tra_info_lmgw_mc,
10703 {"Mc", "gtpv2.tra_info_lmgw_mc",
10704 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10705 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10706 },
10707 { &hf_gtpv2_tra_info_lmgw_nb_up,
10708 {"Nb-UP", "gtpv2.tra_info_lmgw_nb_up",
10709 FT_UINT8, BASE_DEC, NULL((void*)0), 0x2,
10710 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10711 },
10712 { &hf_gtpv2_tra_info_lmgw_lu_up,
10713 {"Iu-UP", "gtpv2.tra_info_lmgw_lu_up",
10714 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10715 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10716 },
10717 { &hf_gtpv2_tra_info_lsgsn_gb,
10718 {"Gb", "gtpv2.tra_info_lsgsn_gb",
10719 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10720 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10721 },
10722 { &hf_gtpv2_tra_info_lsgsn_lu,
10723 {"Iu", "gtpv2.tra_info_lsgsn_lu",
10724 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10725 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10726 },
10727 { &hf_gtpv2_tra_info_lsgsn_gn,
10728 {"Gn", "gtpv2.tra_info_lsgsn_gn",
10729 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10730 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10731 },
10732 { &hf_gtpv2_tra_info_lsgsn_map_gr,
10733 {"MAP-Gr", "gtpv2.tra_info_lsgsn_map_gr",
10734 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10735 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10736 },
10737 { &hf_gtpv2_tra_info_lsgsn_map_gd,
10738 {"MAP-Gd", "gtpv2.tra_info_lsgsn_map_gd",
10739 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10740 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10741 },
10742 { &hf_gtpv2_tra_info_lsgsn_map_gf,
10743 {"MAP-Gf", "gtpv2.tra_info_lsgsn_map_gf",
10744 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10745 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10746 },
10747 { &hf_gtpv2_tra_info_lsgsn_gs,
10748 {"Gs", "gtpv2.tra_info_lsgsn_gs",
10749 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10750 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10751 },
10752 { &hf_gtpv2_tra_info_lsgsn_ge,
10753 {"Ge", "gtpv2.tra_info_lsgsn_ge",
10754 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10755 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10756 },
10757 { &hf_gtpv2_tra_info_lggsn_gn,
10758 {"Gn", "gtpv2.tra_info_lggsn_gn",
10759 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10760 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10761 },
10762 { &hf_gtpv2_tra_info_lggsn_gi,
10763 {"Gi", "gtpv2.tra_info_lggsn_gi",
10764 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10765 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10766 },
10767 { &hf_gtpv2_tra_info_lggsn_gmb,
10768 {"Gmb", "gtpv2.tra_info_lggsn_gmb",
10769 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10770 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10771 },
10772 { &hf_gtpv2_tra_info_lrnc_lu,
10773 {"Iu", "gtpv2.tra_info_lrnc_lu",
10774 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10775 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10776 },
10777 { &hf_gtpv2_tra_info_lrnc_lur,
10778 {"Iur", "gtpv2.tra_info_lrnc_lur",
10779 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10780 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10781 },
10782 { &hf_gtpv2_tra_info_lrnc_lub,
10783 {"Iub", "gtpv2.tra_info_lrnc_lub",
10784 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10785 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10786 },
10787 { &hf_gtpv2_tra_info_lrnc_uu,
10788 {"Uu", "gtpv2.tra_info_lrnc_uu",
10789 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10790 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10791 },
10792 { &hf_gtpv2_tra_info_lbm_sc_gmb,
10793 {"Gmb", "gtpv2.tra_info_lbm_sc_gmb",
10794 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10795 "BM-SC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10796 },
10797 { &hf_gtpv2_tra_info_lmme_s1_mme,
10798 {"S1-MME", "gtpv2.tra_info_lmme_s1_mme",
10799 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10800 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10801 },
10802 { &hf_gtpv2_tra_info_lmme_s3,
10803 {"S3", "gtpv2.tra_info_lmme_s3",
10804 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10805 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10806 },
10807 { &hf_gtpv2_tra_info_lmme_s6a,
10808 {"S6a", "gtpv2.tra_info_lmme_s6a",
10809 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10810 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10811 },
10812 { &hf_gtpv2_tra_info_lmme_s10,
10813 {"S10", "gtpv2.tra_info_lmme_s10",
10814 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10815 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10816 },
10817 { &hf_gtpv2_tra_info_lmme_s11,
10818 {"S11", "gtpv2.tra_info_lmme_s11",
10819 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10820 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10821 },
10822 { &hf_gtpv2_tra_info_lsgw_s4,
10823 {"S4", "gtpv2.tra_info_lsgw_s4",
10824 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10825 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10826 },
10827 { &hf_gtpv2_tra_info_lsgw_s5,
10828 {"S5", "gtpv2.tra_info_lsgw_s5",
10829 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10830 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10831 },
10832 { &hf_gtpv2_tra_info_lsgw_s8b,
10833 {"S8b", "gtpv2.tra_info_lsgw_s8b",
10834 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10835 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10836 },
10837 { &hf_gtpv2_tra_info_lsgw_s11,
10838 {"S11", "gtpv2.tra_info_lsgw_s11",
10839 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10840 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10841 },
10842 { &hf_gtpv2_tra_info_lpdn_gw_s2a,
10843 {"S2a", "gtpv2.tra_info_lpdn_gw_s2a",
10844 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10845 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10846 },
10847 { &hf_gtpv2_tra_info_lpdn_gw_s2b,
10848 {"S2b", "gtpv2.tra_info_lpdn_gw_s2b",
10849 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10850 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10851 },
10852 { &hf_gtpv2_tra_info_lpdn_gw_s2c,
10853 {"S2c", "gtpv2.tra_info_lpdn_gw_s2c",
10854 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10855 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10856 },
10857 { &hf_gtpv2_tra_info_lpdn_gw_s5,
10858 {"S5", "gtpv2.tra_info_lpdn_gw_s5",
10859 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10860 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10861 },
10862 { &hf_gtpv2_tra_info_lpdn_gw_s6c,
10863 {"S6c", "gtpv2.tra_info_lpdn_gw_s6c",
10864 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10865 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10866 },
10867 { &hf_gtpv2_tra_info_lpdn_gw_gx,
10868 {"Gx", "gtpv2.tra_info_lpdn_gw_gx",
10869 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10870 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10871 },
10872 { &hf_gtpv2_tra_info_lpdn_gw_s8b,
10873 {"S8b", "gtpv2.tra_info_lpdn_gw_s8b",
10874 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10875 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10876 },
10877 { &hf_gtpv2_tra_info_lpdn_gw_sgi,
10878 {"SGi", "gtpv2.tra_info_lpdn_gw_sgi",
10879 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10880 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10881 },
10882 { &hf_gtpv2_tra_info_lenb_s1_mme,
10883 {"S1-MME", "gtpv2.tra_info_lenb_s1_mme",
10884 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10885 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10886 },
10887 { &hf_gtpv2_tra_info_lenb_x2,
10888 {"X2", "gtpv2.tra_info_lenb_x2",
10889 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10890 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10891 },
10892 { &hf_gtpv2_tra_info_lenb_uu,
10893 {"Uu", "gtpv2.tra_info_lenb_uu",
10894 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10895 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10896 },
10897 { &hf_gtpv2_pdn_ipv4,
10898 {"PDN Address and Prefix(IPv4)", "gtpv2.pdn_addr_and_prefix.ipv4",
10899 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
10900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10901 },
10902 { &hf_gtpv2_pdn_ipv6_len,
10903 {"IPv6 Prefix Length", "gtpv2.pdn_ipv6_len",
10904 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10906 },
10907 { &hf_gtpv2_pdn_ipv6,
10908 {"PDN Address and Prefix(IPv6)", "gtpv2.pdn_addr_and_prefix.ipv6",
10909 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
10910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10911 },
10912 /* Bit 7 - PCI (Pre-emption Capability): See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP.
10913 * clause 5.3.46 Pre-emption-Capability AVP.
10914 * 5.3.46 Pre-emption-Capability AVP
10915 * The following values are defined:
10916 * PRE-EMPTION_CAPABILITY_ENABLED (0)
10917 * PRE-EMPTION_CAPABILITY_DISABLED (1)
10918 */
10919 {&hf_gtpv2_bearer_qos_pci,
10920 {"PCI (Pre-emption Capability)", "gtpv2.bearer_qos_pci",
10921 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x40,
10922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10923 },
10924 {&hf_gtpv2_bearer_qos_pl,
10925 {"PL (Priority Level)", "gtpv2.bearer_qos_pl",
10926 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
10927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10928 },
10929 /* Bit 1 - PVI (Pre-emption Vulnerability): See 3GPP TS 29.212[29],
10930 * clause 5.3.47 Pre-emption-Vulnerability AVP.
10931 * 5.3.47 Pre-emption-Vulnerability AVP
10932 * The following values are defined:
10933 * PRE-EMPTION_VULNERABILITY_ENABLED (0)
10934 * PRE-EMPTION_VULNERABILITY_DISABLED (1)
10935 */
10936 {&hf_gtpv2_bearer_qos_pvi,
10937 {"PVI (Pre-emption Vulnerability)", "gtpv2.bearer_qos_pvi",
10938 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x01,
10939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10940 },
10941 {&hf_gtpv2_bearer_qos_label_qci,
10942 {"Label (QCI)", "gtpv2.bearer_qos_label_qci",
10943 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10945 },
10946 {&hf_gtpv2_bearer_qos_mbr_up,
10947 {"Maximum Bit Rate For Uplink", "gtpv2.bearer_qos_mbr_up",
10948 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10950 },
10951 {&hf_gtpv2_bearer_qos_mbr_down,
10952 {"Maximum Bit Rate For Downlink", "gtpv2.bearer_qos_mbr_down",
10953 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10955 },
10956 {&hf_gtpv2_bearer_qos_gbr_up,
10957 {"Guaranteed Bit Rate For Uplink", "gtpv2.bearer_qos_gbr_up",
10958 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10960 },
10961 {&hf_gtpv2_bearer_qos_gbr_down,
10962 {"Guaranteed Bit Rate For Downlink", "gtpv2.bearer_qos_gbr_down",
10963 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10965 },
10966 {&hf_gtpv2_flow_qos_label_qci,
10967 {"Label (QCI)", "gtpv2.flow_qos_label_qci",
10968 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10970 },
10971 {&hf_gtpv2_flow_qos_mbr_up,
10972 {"Maximum Bit Rate For Uplink", "gtpv2.flow_qos_mbr_up",
10973 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10975 },
10976 {&hf_gtpv2_flow_qos_mbr_down,
10977 {"Maximum Bit Rate For Downlink", "gtpv2.flow_qos_mbr_down",
10978 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10980 },
10981 {&hf_gtpv2_flow_qos_gbr_up,
10982 {"Guaranteed Bit Rate For Uplink", "gtpv2.flow_qos_gbr_up",
10983 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10985 },
10986 {&hf_gtpv2_flow_qos_gbr_down,
10987 {"Guaranteed Bit Rate For Downlink", "gtpv2.flow_qos_gbr_down",
10988 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10990 },
10991 { &hf_gtpv2_rat_type,
10992 {"RAT Type", "gtpv2.rat_type",
10993 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_rat_type_vals_ext, 0x0,
10994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10995 },
10996 { &hf_gtpv2_uli_ecgi_flg,
10997 {"ECGI Present", "gtpv2.uli_ecgi_flg",
10998 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_ECGI_MASK0x10,
10999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11000 },
11001 { &hf_gtpv2_uli_ext_macro_enb_id_flg,
11002 {"Extended Macro eNodeB ID Present", "gtpv2.uli_ext_macro_enb_id_flg",
11003 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80,
11004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11005 },
11006 { &hf_gtpv2_uli_macro_enb_id_flg,
11007 {"Macro eNodeB ID Present", "gtpv2.uli_macro_enb_id_flg",
11008 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_MACRO_eNB_ID_MASK0x40,
11009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11010 },
11011 { &hf_gtpv2_uli_lai_flg,
11012 {"LAI Present", "gtpv2.uli_lai_flg",
11013 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_LAI_MASK0x20,
11014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11015 },
11016 { &hf_gtpv2_uli_tai_flg,
11017 {"TAI Present", "gtpv2.uli_tai_flg",
11018 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_TAI_MASK0x08,
11019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11020 },
11021 { &hf_gtpv2_uli_rai_flg,
11022 {"RAI Present", "gtpv2.uli_rai_flg",
11023 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_RAI_MASK0x04,
11024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11025 },
11026 { &hf_gtpv2_uli_sai_flg,
11027 {"SAI Present", "gtpv2.uli_sai_flg",
11028 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_SAI_MASK0x02,
11029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11030 },
11031 { &hf_gtpv2_uli_cgi_flg,
11032 {"CGI Present", "gtpv2.uli_cgi_flg",
11033 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_CGI_MASK0x01,
11034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11035 },
11036 { &hf_gtpv2_glt,
11037 {"Geographic Location Type", "gtpv2.glt",
11038 FT_UINT8, BASE_DEC, VALS(geographic_location_type_vals)((0 ? (const struct _value_string*)0 : ((geographic_location_type_vals
))))
, 0x0,
11039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11040 },
11041 { &hf_gtpv2_uli_cgi_lac,
11042 {"Location Area Code", "gtpv2.uli_cgi_lac",
11043 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11045 },
11046 { &hf_gtpv2_uli_cgi_ci,
11047 {"Cell Identity", "gtpv2.uli_cgi_ci",
11048 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11050 },
11051 { &hf_gtpv2_sai_lac,
11052 {"Location Area Code", "gtpv2.sai_lac",
11053 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11055 },
11056 { &hf_gtpv2_sai_sac,
11057 {"Service Area Code", "gtpv2.sai_sac",
11058 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11060 },
11061 { &hf_gtpv2_rai_lac,
11062 {"Location Area Code", "gtpv2.rai_lac",
11063 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11065 },
11066 { &hf_gtpv2_rai_rac,
11067 {"Routing Area Code", "gtpv2.rai_rac",
11068 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
11069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11070 },
11071 { &hf_gtpv2_tai_tac,
11072 {"Tracking Area Code", "gtpv2.tai_tac",
11073 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11075 },
11076 { &hf_gtpv2_5gs_tai_tac,
11077 {"5GS Tracking Area Code", "gtpv2.5gs_tai_tac",
11078 FT_UINT24, BASE_HEX_DEC, NULL((void*)0), 0x0,
11079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11080 },
11081 {&hf_gtpv2_ecgi_eci,
11082 {"ECI (E-UTRAN Cell Identifier)", "gtpv2.ecgi_eci",
11083 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11085 },
11086 {&hf_gtpv2_ncgi_nrci,
11087 {"NR Cell Identifier", "gtpv2.ncgi_nrci",
11088 FT_UINT40, BASE_HEX, NULL((void*)0), 0xfffffffff0,
11089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11090 },
11091 {&hf_gtpv2_uli_lai_lac,
11092 {"Location Area Code (LAC)", "gtpv2.uli_lai_lac",
11093 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11095 },
11096 {&hf_gtpv2_ecgi_eci_spare,
11097 {"Spare", "gtpv2.uli_ecgi_eci_spare",
11098 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11100 },
11101 { &hf_gtpv2_nsapi,
11102 {"NSAPI", "gtpv2.nsapi",
11103 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
11104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11105 },
11106 {&hf_gtpv2_f_teid_v4,
11107 {"V4", "gtpv2.f_teid_v4",
11108 FT_BOOLEAN, 8, TFS(&gtpv2_f_teid_v4_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_f_teid_v4_vals
))))
, 0x80,
11109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11110 },
11111 {&hf_gtpv2_f_teid_v6,
11112 {"V6", "gtpv2.f_teid_v6",
11113 FT_BOOLEAN, 8, TFS(&gtpv2_f_teid_v6_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_f_teid_v6_vals
))))
, 0x40,
11114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11115 },
11116 {&hf_gtpv2_f_teid_interface_type,
11117 {"Interface Type", "gtpv2.f_teid_interface_type",
11118 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_f_teid_interface_type_vals_ext, 0x3f,
11119 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11120 },
11121 {&hf_gtpv2_f_teid_gre_key,
11122 {"TEID/GRE Key", "gtpv2.f_teid_gre_key",
11123 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11124 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11125 },
11126 { &hf_gtpv2_f_teid_ipv4,
11127 {"F-TEID IPv4", "gtpv2.f_teid_ipv4",
11128 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11130 },
11131 { &hf_gtpv2_f_teid_ipv6,
11132 {"F-TEID IPv6", "gtpv2.f_teid_ipv6",
11133 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11135 },
11136 { &hf_gtpv2_tmsi,
11137 {"TMSI", "gtpv2.tmsi",
11138 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
11139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11140 },
11141 { &hf_gtpv2_hsgw_addr_f_len,
11142 {"HSGW Address for forwarding Length", "gtpv2.hsgw_addr_f_len",
11143 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11145 },
11146 { &hf_gtpv2_hsgw_addr_ipv4,
11147 {"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv4",
11148 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11150 },
11151 { &hf_gtpv2_hsgw_addr_ipv6,
11152 {"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv6",
11153 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11155 },
11156 { &hf_gtpv2_gre_key,
11157 {"GRE Key", "gtpv2.gre_key",
11158 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11159 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11160 },
11161 { &hf_gtpv2_sgw_addr_ipv4,
11162 {"Serving GW Address", "gtpv2.sgw_addr_ipv4",
11163 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11165 },
11166 { &hf_gtpv2_sgw_addr_ipv6,
11167 {"Serving GW Address", "gtpv2.sgw_addr_ipv6",
11168 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11170 },
11171 { &hf_gtpv2_sgw_s1u_teid,
11172 {"Serving GW S1-U TEID", "gtpv2.sgw_s1u_teid",
11173 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11175 },
11176 {&hf_gtpv2_delay_value,
11177 {"Delay Value (In integer multiples of 50 milliseconds or zero)", "gtpv2.delay_value",
11178 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11180 },
11181 {&hf_gtpv2_charging_id,
11182 {"Charging id", "gtpv2.charging_id",
11183 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11185 },
11186 {&hf_gtpv2_charging_characteristic,
11187 {"Charging Characteristic", "gtpv2.charging_characteristic",
11188 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
11189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11190 },
11191 {&hf_gtpv2_bearer_flag_ppc,
11192 {"PPC (Prohibit Payload Compression)", "gtpv2.bearer_flag.ppc",
11193 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11195 },
11196 {&hf_gtpv2_bearer_flag_vb,
11197 {"VB (Voice Bearer)", "gtpv2.bearer_flag.vb",
11198 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11200 },
11201 {&hf_gtpv2_pti,
11202 {"Procedure Transaction Id", "gtpv2.pti",
11203 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11205 },
11206 /* MM Context */
11207 { &hf_gtpv2_mm_context_sm,
11208 {"Security Mode", "gtpv2.mm_context_sm",
11209 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_security_mode)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_security_mode
))))
, 0xe0,
11210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11211 },
11212 { &hf_gtpv2_mm_context_nhi,
11213 {"NHI(Next Hop Indicator)", "gtpv2.mm_context_nhi",
11214 FT_BOOLEAN, 8, TFS(&gtpv2_nhi_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_nhi_vals
))))
, 0x10,
11215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11216 },
11217 { &hf_gtpv2_mm_context_drxi,
11218 {"DRXI", "gtpv2.mm_context_drxi",
11219 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
11220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11221 },
11222 { &hf_gtpv2_mm_context_cksn,
11223 {"CKSN", "gtpv2.mm_context_cksn",
11224 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11226 },
11227 { &hf_gtpv2_mm_context_cksn_ksi,
11228 {"CKSN/KSI", "gtpv2.mm_context_cksn_ksi",
11229 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11231 },
11232 { &hf_gtpv2_metric,
11233 {"Metric", "gtpv2.metric",
11234 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11236 },
11237 { &hf_gtpv2_throttling_factor,
11238 {"Throttling Factor", "gtpv2.throttling_factor",
11239 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11241 },
11242 { &hf_gtpv2_relative_capacity,
11243 {"Relative Capacity", "gtpv2.relative_capacity",
11244 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11246 },
11247 { &hf_gtpv2_apn_length,
11248 {"APN Length", "gtpv2.apn_length",
11249 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
11250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11251 },
11252 { &hf_gtpv2_sequence_number,
11253 {"Sequence Number", "gtpv2.sequence_number",
11254 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
11255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11256 },
11257 { &hf_gtpv2_mm_context_ksi_a,
11258 {"KSI_asme", "gtpv2.mm_context_ksi_a",
11259 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11261 },
11262 { &hf_gtpv2_mm_context_nr_tri,
11263 {"Number of Triplet", "gtpv2.mm_context_nr_tri",
11264 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
11265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11266 },
11267 { &hf_gtpv2_mm_context_used_cipher,
11268 {"Used Cipher", "gtpv2.mm_context_used_cipher",
11269 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_used_cipher_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_used_cipher_vals
))))
, 0x07,
11270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11271 },
11272 { &hf_gtpv2_mm_context_unipa,
11273 {"Used NAS integrity protection algorithm", "gtpv2.mm_context_unipa",
11274 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unipa_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_unipa_vals
))))
, 0x70,
11275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11276 },
11277
11278 { &hf_gtpv2_mm_context_unc,
11279 {"Used NAS Cipher", "gtpv2.mm_context_unc",
11280 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unc_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_unc_vals
))))
, 0x0f,
11281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11282 },
11283 { &hf_gtpv2_mm_context_nas_dl_cnt,
11284 {"NAS Downlink Count", "gtpv2.mm_context_nas_dl_cnt",
11285 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
11286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11287 },
11288 { &hf_gtpv2_mm_context_nas_ul_cnt,
11289 {"NAS Uplink Count", "gtpv2.mm_context_nas_ul_cnt",
11290 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
11291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11292 },
11293 { &hf_gtpv2_mm_context_kasme,
11294 {"Kasme", "gtpv2.mm_context_kasme",
11295 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11297 },
11298 { &hf_gtpv2_mm_context_rand,
11299 {"RAND", "gtpv2.mm_context_rand",
11300 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11302 },
11303 {&hf_gtpv2_uci_csg_id,
11304 {"CSG ID", "gtpv2.cui_csg_id",
11305 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07FFFFFF,
11306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11307 },
11308 {&hf_gtpv2_uci_csg_id_spare,
11309 {"Spare", "gtpv2.cui_csg_id_spare",
11310 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8,
11311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11312 },
11313 { &hf_gtpv2_uci_csg_membership,
11314 { "CSG Membership Indication", "gtpv2.uci_csg_membership",
11315 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_csg_membership_status)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_csg_membership_status
))))
, 0x01,
11316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11317 },
11318 { &hf_gtpv2_uci_access_mode,
11319 {"Access Mode", "gtpv2.uci_access_mode",
11320 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_access_mode)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_access_mode
))))
, 0xC0,
11321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11322 },
11323 { &hf_gtpv2_uci_lcsg,
11324 {"Leave CSG", "gtpv2.uci_leave_csg",
11325 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_leave_csg)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_leave_csg)
)))
, 0x02,
11326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11327 },
11328 { &hf_gtpv2_mm_context_xres_len,
11329 {"XRES Length", "gtpv2.mm_context_xres_len",
11330 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11332 },
11333 { &hf_gtpv2_mm_context_xres,
11334 {"XRES", "gtpv2.mm_context_xres",
11335 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11337 },
11338 { &hf_gtpv2_mm_context_autn_len,
11339 {"AUTN Length", "gtpv2.mm_context_autn_len",
11340 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11342 },
11343 { &hf_gtpv2_mm_context_autn,
11344 {"AUTN", "gtpv2.mm_context_autn",
11345 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11347 },
11348 { &hf_gtpv2_mm_context_drx,
11349 {"DRX", "gtpv2.mm_context_drx",
11350 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
11351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11352 },
11353 { &hf_gtpv2_vdp_length,
11354 {"VDP and UE's Usage Setting length", "gtpv2.vdp_length",
11355 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11357 },
11358
11359 { &hf_gtpv2_mm_context_ue_net_cap_len,
11360 {"Length of UE Network Capability", "gtpv2.mm_context_ue_net_cap_len",
11361 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11363 },
11364 { &hf_gtpv2_mm_context_ms_net_cap_len,
11365 {"Length of MS Network Capability", "gtpv2.mm_context_ms_net_cap_len",
11366 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11368 },
11369 { &hf_gtpv2_mm_context_mei_len,
11370 {"Length of Mobile Equipment Identity (MEI)", "gtpv2.mm_context_mei_len",
11371 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11373 },
11374 { &hf_gtpv2_mm_contex_nhi_old,
11375 { "Next Hop Indicator for old EPS Security Context", "gtpv2.mm_context_nhi_old",
11376 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
11377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11378 },
11379 { &hf_gtpv2_mm_context_old_ksiasme,
11380 { "old KSIASME", "gtpv2.old_ksiasme",
11381 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38,
11382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11383 },
11384 { &hf_gtpv2_mm_context_old_ncc,
11385 { "old NCC", "gtpv2.old_ncc",
11386 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11388 },
11389 { &hf_gtpv2_mm_context_old_kasme,
11390 { "Old Kasme", "gtpv2.mm_context_old_kasme",
11391 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11393 },
11394 { &hf_gtpv2_mm_context_old_nh,{ "Old NH (Old Next Hop)", "gtpv2.mm_context.old_nh", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
11395 { &hf_gtpv2_mm_context_vdp_len,
11396 { "Length of Voice Domain Preference and UE's Usage Setting", "gtpv2.mm_context.vdp_len",
11397 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11399 },
11400 { &hf_gtpv2_mm_context_paging_len,
11401 { "Length of UE Radio Capability for Paging information", "gtpv2.mm_context.paging_len",
11402 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11403 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11404 },
11405 { &hf_gtpv2_mm_context_ex_access_res_data_len,
11406 { "Length of Extended Access Restriction Data", "gtpv2.mm_context.ex_access_res_data_len",
11407 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11409 },
11410 { &hf_gtpv2_mm_context_ue_add_sec_cap_len,
11411 { "Length of UE additional security capability", "gtpv2.mm_context.ue_add_sec_cap_len",
11412 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11414 },
11415 { &hf_gtpv2_mm_context_ue_nr_sec_cap_len,
11416 { "Length of UE NR security capability", "gtpv2.mm_context.ue_nr_sec_cap_len",
11417 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11419 },
11420 { &hf_gtpv2_mm_context_apn_rte_ctrl_sts_len,
11421 { "Length of APN Rate Control Statuses", "gtpv2.mm_context.apn_rte_ctrl_sts_len",
11422 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11424 },
11425 { &hf_gtpv2_mm_context_cnr_len,
11426 { "Length of Core Network Restrictions", "gtpv2.mm_context.cnr_len",
11427 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11429 },
11430 { &hf_gtpv2_mm_context_ue_radio_cap_len,
11431 { "Length of UE Radio Capability ID", "gtpv2.mm_context.radio_cap_len",
11432 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11434 },
11435 { &hf_gtpv2_una,
11436 { "UTRAN", "gtpv2.mm_context.una",
11437 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x01,
11438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11439 },
11440 { &hf_gtpv2_gena,
11441 { "GERAN", "gtpv2.mm_context.gena",
11442 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x02,
11443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11444 },
11445 { &hf_gtpv2_gana,
11446 { "GAN", "gtpv2.mm_context.gana",
11447 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x04,
11448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11449 },
11450 { &hf_gtpv2_ina,
11451 { "I-HSPA-EVOLUTION", "gtpv2.mm_context.ina",
11452 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x08,
11453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11454 },
11455 { &hf_gtpv2_ena,
11456 { "E-UTRAN", "gtpv2.mm_context.ena",
11457 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x10,
11458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11459 },
11460 { &hf_gtpv2_hnna,
11461 { "HO-toNone3GPP-Access", "gtpv2.mm_context.hnna",
11462 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x20,
11463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11464 },
11465 { &hf_gtpv2_hbna,
11466 { "NB-IoT Not Allowed", "gtpv2.mm_context.hbna",
11467 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x40,
11468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11469 },
11470 { &hf_gtpv2_mm_context_ksi,
11471 {"KSI", "gtpv2.mm_context_ksi",
11472 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11474 },
11475 { &hf_gtpv2_mm_context_nr_qui,
11476 {"Number of Quintuplets", "gtpv2.mm_context_nr_qui",
11477 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
11478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11479 },
11480
11481 { &hf_gtpv2_mm_context_nr_qua,
11482 {"Number of Quadruplet", "gtpv2.mm_context_nr_qua",
11483 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1c,
11484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11485 },
11486 { &hf_gtpv2_mm_context_uamb_ri,
11487 {"UAMB RI", "gtpv2.mm_context_uamb_ri",
11488 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11490 },
11491 { &hf_gtpv2_mm_context_osci,
11492 {"OSCI", "gtpv2.mm_context_osci",
11493 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11494 "Old Security Context Indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11495 },
11496 { &hf_gtpv2_mm_context_nruna,
11497 { "NRUNA (NR-U in 5GS Not Allowed)", "gtpv2.mm_context.nruna",
11498 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
11499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11500 },
11501 { &hf_gtpv2_mm_context_nrusrna,
11502 { "NRUSRNA (New Radio Unlicensed as Secondary RAT Not Allowed)", "gtpv2.mm_context.nrusrna",
11503 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
11504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11505 },
11506 { &hf_gtpv2_mm_context_nrna,
11507 { "NRNA(NR in 5GS Not Allowed)", "gtpv2.mm_context.nrna",
11508 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
11509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11510 },
11511 { &hf_gtpv2_mm_context_ussrna,
11512 {"USSRNA", "gtpv2.mm_context_ussrna",
11513 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11514 "Unlicensed Spectrum in the form of LAA or LWA/LWIP as Secondary RAT Not Allowed", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11515 },
11516 { &hf_gtpv2_mm_context_nrsrna,
11517 {"NRSRNA(NR as Secondary RAT Not Allowed)", "gtpv2.mm_context_nrsrna",
11518 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11520 },
11521 { &hf_gtpv2_mm_context_ensct,
11522 {"ENSCT (EPS NAS Security Context Type)", "gtpv2.mm_context_ensct",
11523 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_eps_nas_security_context_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_eps_nas_security_context_type_vals
))))
, 0x03,
11524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11525 },
11526 { &hf_gtpv2_mm_context_samb_ri,
11527 {"SAMB RI", "gtpv2.mm_context_samb_ri",
11528 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
11529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11530 },
11531 { &hf_gtpv2_ue_time_zone_dst,
11532 {"Daylight Saving Time", "gtpv2.ue_time_zone_dst",
11533 FT_UINT8, BASE_DEC, VALS(gtpv2_ue_time_zone_dst_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_ue_time_zone_dst_vals
))))
, 0x03,
11534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11535 },
11536 { &hf_gtpv2_fq_csid_type,
11537 {"Node-ID Type", "gtpv2.fq_csid_type",
11538 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
11539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11540 },
11541 { &hf_gtpv2_fq_csid_nr,
11542 {"Number of CSIDs", "gtpv2.fq_csid_nr",
11543 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
11544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11545 },
11546 { &hf_gtpv2_fq_csid_ipv4,
11547 {"Node-ID (IPv4)", "gtpv2.fq_csid_ipv4",
11548 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11550 },
11551 { &hf_gtpv2_fq_csid_ipv6,
11552 {"Node-ID (IPv6)", "gtpv2.fq_csid_ipv6",
11553 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11555 },
11556 { &hf_gtpv2_fq_csid_id,
11557 {"CSID", "gtpv2.fq_csid_id",
11558 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11560 },
11561 { &hf_gtpv2_complete_req_msg_type,
11562 {"Complete Request Message Type", "gtpv2.complete_req_msg_type",
11563 FT_UINT8, BASE_DEC, VALS(gtpv2_complete_req_msg_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_complete_req_msg_type_vals
))))
, 0x0,
11564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11565 },
11566 {&hf_gtpv2_mme_grp_id,
11567 {"MME Group ID", "gtpv2.mme_grp_id",
11568 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11570 },
11571 { &hf_gtpv2_mme_code,
11572 {"MME Code", "gtpv2.mme_code",
11573 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11575 },
11576 { &hf_gtpv2_m_tmsi,
11577 {"M-TMSI", "gtpv2.m_tmsi",
11578 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11580 },
11581 { &hf_gtpv2_container_type,
11582 {"Container Type", "gtpv2.container_type",
11583 FT_UINT8, BASE_DEC, VALS(gtpv2_container_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_container_type_vals
))))
, 0x0f,
11584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11585 },
11586 { &hf_gtpv2_cause_type,
11587 {"Cause Type", "gtpv2.cause_type",
11588 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_cause_type_vals_ext, 0x0f,
11589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11590 },
11591 { &hf_gtpv2_CauseRadioNetwork,
11592 {"Radio Network Layer Cause", "gtpv2.CauseRadioNetwork",
11593 FT_UINT8, BASE_DEC, VALS(s1ap_CauseRadioNetwork_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseRadioNetwork_vals
))))
, 0x0,
11594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11595 },
11596 { &hf_gtpv2_CauseTransport,
11597 {"Transport Layer Cause", "gtpv2.CauseTransport",
11598 FT_UINT8, BASE_DEC, VALS(s1ap_CauseTransport_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseTransport_vals
))))
, 0x0,
11599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11600 },
11601 { &hf_gtpv2_CauseNas,
11602 {"NAS Cause", "gtpv2.CauseNas",
11603 FT_UINT8, BASE_DEC, VALS(s1ap_CauseNas_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseNas_vals))
))
, 0x0,
11604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11605 },
11606 { &hf_gtpv2_CauseMisc,
11607 {"Miscellaneous Cause", "gtpv2.CauseMisc",
11608 FT_UINT8, BASE_DEC, VALS(s1ap_CauseMisc_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseMisc_vals)
)))
, 0x0,
11609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11610 },
11611 { &hf_gtpv2_target_type,
11612 {"Target Type", "gtpv2.target_type",
11613 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_target_type_vals_ext, 0x0,
11614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11615 },
11616 {&hf_gtpv2_macro_enodeb_id,
11617 {"Macro eNodeB ID", "gtpv2.macro_enodeb_id",
11618 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0fffff,
11619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11620 },
11621 {&hf_gtpv2_smenb,
11622 {"SMeNB", "gtpv2.smenb",
11623 FT_BOOLEAN, 8, TFS(&gtpv2_smenb)((0 ? (const struct true_false_string*)0 : ((&gtpv2_smenb
))))
, 0x80,
11624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11625 },
11626 {&hf_gtpv2_ext_macro_enodeb_id,
11627 {"Extended Macro eNodeB ID", "gtpv2.ext_macro_enodeb_id",
11628 FT_UINT24, BASE_HEX, NULL((void*)0), 0x1fffff,
11629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11630 },
11631 {&hf_gtpv2_ext_macro_ng_enodeb_id,
11632 {"Extended Macro ng-eNodeB ID", "gtpv2.ext_macro_ng_enodeb_id",
11633 FT_UINT24, BASE_HEX, NULL((void*)0), 0x1fffff,
11634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11635 },
11636 {&hf_gtpv2_cellid,
11637 {"CellId", "gtpv2.cellid",
11638 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFF,
11639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11640 },
11641 { &hf_gtpv2_enodebid,
11642 { "eNodeB Id", "gtpv2.enodebid",
11643 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0FFFFF00,
11644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11645 },
11646 { &hf_gtpv2_CauseProtocol,
11647 {"Protocol Cause", "gtpv2.CauseProtocol",
11648 FT_UINT8, BASE_DEC, VALS(s1ap_CauseProtocol_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseProtocol_vals
))))
, 0x0,
11649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11650 },
11651 {&hf_gtpv2_apn_rest,
11652 {"APN Restriction", "gtpv2.apn_rest",
11653 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_apn_restriction_vals_ext, 0x0,
11654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11655 },
11656 {&hf_gtpv2_selec_mode,
11657 {"Selection Mode", "gtpv2.selec_mode",
11658 FT_UINT8, BASE_DEC, VALS(gtpv2_selec_mode_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_selec_mode_vals
))))
, 0x03,
11659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11660 },
11661 { &hf_gtpv2_source_type,
11662 {"Source Type", "gtpv2.source_type",
11663 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11665 },
11666 {&hf_gtpv2_bearer_control_mode,
11667 {"Bearer Control Mode", "gtpv2.bearer_control_mode",
11668 FT_UINT8, BASE_DEC, VALS(gtpv2_bearer_control_mode_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_bearer_control_mode_vals
))))
, 0x0,
11669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11670 },
11671 { &hf_gtpv2_cng_rep_act,
11672 {"Change Reporting Action", "gtpv2.cng_rep_act",
11673 FT_UINT8, BASE_DEC, VALS(gtpv2_cng_rep_act_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_cng_rep_act_vals
))))
, 0x0,
11674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11675 },
11676 { &hf_gtpv2_node_type,
11677 {"Node Type", "gtpv2.node_type",
11678 FT_UINT8, BASE_DEC, VALS(gtpv2_node_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_node_type_vals
))))
, 0x0,
11679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11680 },
11681 {&hf_gtpv2_fqdn,
11682 {"FQDN", "gtpv2.fqdn",
11683 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
11684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11685 },
11686 { &hf_gtpv2_enterprise_id,
11687 {"Enterprise ID", "gtpv2.enterprise_id",
11688 FT_UINT16, BASE_ENTERPRISESBASE_CUSTOM, STRINGS_ENTERPRISES((const void *) (size_t) (enterprises_base_custom)), 0x0,
11689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11690 },
11691 { &hf_gtpv2_ti,
11692 {"Transaction Identifier", "gtpv2.ti",
11693 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11695 },
11696 { &hf_gtpv2_bss_container_phx,
11697 {"PHX", "gtpv2.bss_cont.phx",
11698 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
11699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11700 },
11701 { &hf_gtpv2_bss_con_sapi_flg,
11702 {"SAPI", "gtpv2.bss_cont.sapi_flg",
11703 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
11704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11705 },
11706 { &hf_gtpv2_bss_con_rp_flg,
11707 {"RP", "gtpv2.bss_cont.rp_flg",
11708 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
11709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11710 },
11711 { &hf_gtpv2_bss_con_pfi_flg,
11712 {"PFI", "gtpv2.bss_cont.pfi_flg",
11713 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
11714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11715 },
11716 { &hf_gtpv2_bss_con_pfi,
11717 {"Packet Flow ID(PFI)", "gtpv2.bss_cont.pfi",
11718 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11720 },
11721 { &hf_gtpv2_bss_con_rp,
11722 {"Radio Priority(RP)", "gtpv2.bss_cont.rp",
11723 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11725 },
11726 { &hf_gtpv2_bss_con_sapi,
11727 {"SAPI", "gtpv2.bss_cont.sapi",
11728 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
11729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11730 },
11731 { &hf_gtpv2_bss_con_xid_len,
11732 {"XiD parameters length", "gtpv2.bss_cont.xid_len",
11733 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11735 },
11736 { &hf_gtpv2_bss_con_xid,
11737 {"XiD parameters", "gtpv2.bss_cont.xid",
11738 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11740 },
11741 { &hf_gtpv2_home_enodeb_id,
11742 {"Home eNodeB ID", "gtpv2.home_enodeb_id",
11743 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0fffffff,
11744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11745 },
11746 { &hf_gtpv2_tac,
11747 {"Tracking Area Code (TAC)", "gtpv2.tac",
11748 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11750 },
11751 { &hf_gtpv2_mbms_service_area_nr,
11752 {"Number of MBMS Service Area codes", "gtpv2.mbms_service_area_nr",
11753 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11755 },
11756 { &hf_gtpv2_mbms_service_area_id,
11757 {"MBMS Service Area code (Service Area Identity)", "gtpv2.mbms_service_area_id",
11758 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11760 },
11761 { &hf_gtpv2_mbms_session_id,
11762 {"MBMS Session Identifier", "gtpv2.mbms_session_id",
11763 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11765 },
11766 { &hf_gtpv2_mbms_flow_id,
11767 {"MBMS Flow Identifier", "gtpv2.mbms_flow_id",
11768 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11770 },
11771 { &hf_gtpv2_cteid,
11772 {"Common Tunnel Endpoint Identifier", "gtpv2.cetid",
11773 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11775 },
11776 { &hf_gtpv2_ip_addr_type,
11777 {"IP Address Type", "gtpv2.ip_addr_type",
11778 FT_UINT8, BASE_DEC, NULL((void*)0), 0xc0,
11779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11780 },
11781 { &hf_gtpv2_ip_addr_len,
11782 {"IP Address Length", "gtpv2.ip_addr_len",
11783 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
11784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11785 },
11786 { &hf_gtpv2_mbms_ip_mc_dist_addrv4,
11787 {"MBMS IP Multicast Distribution Address (IPv4)", "gtpv2.mbms_ip_mc_dist_addrv4",
11788 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11790 },
11791 { &hf_gtpv2_mbms_ip_mc_dist_addrv6,
11792 {"MBMS IP Multicast Distribution Address (IPv6)", "gtpv2.mbms_ip_mc_dist_addrv6",
11793 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11795 },
11796 { &hf_gtpv2_mbms_ip_mc_src_addrv4,
11797 {"MBMS IP Multicast Source Address (IPv4)", "gtpv2.mbms_ip_mc_src_addrv4",
11798 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11800 },
11801 { &hf_gtpv2_mbms_ip_mc_src_addrv6,
11802 {"MBMS IP Multicast Source Address (IPv6)", "gtpv2.mbms_ip_mc_src_addrv6",
11803 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11805 },
11806 { &hf_gtpv2_mbms_hc_indicator,
11807 {"MBMS HC Indicator", "gtpv2.mbms_hc_indicator",
11808 FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_hc_indicator_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mbms_hc_indicator_vals
))))
, 0x0,
11809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11810 },
11811 { &hf_gtpv2_mbms_dist_indication,
11812 {"MBMS Distribution Indication", "gtpv2.mbms_dist_indication",
11813 FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_dist_indication_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mbms_dist_indication_vals
))))
, 0x03,
11814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11815 },
11816 { &hf_gtpv2_subscriber_rfsp,
11817 {"Subscribed RFSP Index", "gtpv2.subscriber_rfsp",
11818 FT_INT16, BASE_DEC, NULL((void*)0), 0x0,
11819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11820 },
11821 { &hf_gtpv2_rfsp_inuse,
11822 {"RFSP Index in Use", "gtpv2.rfsp_inuse",
11823 FT_INT16, BASE_DEC, NULL((void*)0), 0x0,
11824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11825 },
11826 { &hf_gtpv2_mbms_service_id,
11827 {"MBMS Service ID", "gtpv2.mbms_service_id",
11828 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11830 },
11831 { &hf_gtpv2_add_flags_for_srvcc_ics,
11832 {"ICS (IMS Centralized Service)", "gtpv2.add_flags_for_srvcc_ics",
11833 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11835 },
11836 { &hf_gtpv2_vsrvcc_flag,
11837 {"VF (vSRVCC Flag)", "gtpv2.vsrvcc_flag",
11838 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11840 },
11841 { &hf_gtpv2_henb_info_report_fti,
11842 {"FTI", "gtpv2.henb_info_report_fti",
11843 FT_BOOLEAN, 8, TFS(&gtpv2_henb_info_report_fti_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_henb_info_report_fti_vals
))))
, 0x01,
11844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11845 },
11846 { &hf_gtpv2_ip4cp_subnet_prefix_len,
11847 {"Subnet Prefix Length", "gtpv2.ip4cp_subnet_prefix_len",
11848 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11850 },
11851 { &hf_gtpv2_ip4cp_ipv4,
11852 {"IPv4 Default Router Address", "gtpv2.ip4cp_ipv4",
11853 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11855 },
11856 { &hf_gtpv2_change_report_flags_sncr,
11857 {"SNCR (Service Network Change to Report)", "gtpv2.change_report_flags_sncr",
11858 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11860 },
11861 { &hf_gtpv2_change_report_flags_tzcr,
11862 {"TZCR (Time Zone Change to Report)", "gtpv2.change_report_flags_tzcr",
11863 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11865 },
11866 {&hf_gtpv2_action_indication_val,
11867 {"Action Indication", "gtpv2.action_indication_val",
11868 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_action_indication_vals_ext, 0x07,
11869 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11870 },
11871 { &hf_gtpv2_uli_timestamp,
11872 { "ULI Timestamp", "gtpv2.uli_timestamp",
11873 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
11874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11875 },
11876 { &hf_gtpv2_abs_time_mbms_data,
11877 { "Absolute Time of MBMS Data Transfer", "gtpv2.abs_time_mbms_data",
11878 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
11879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11880 },
11881 { &hf_gtpv2_mbms_session_duration_days,
11882 {"MBMS Session Duration (days)", "gtpv2.mbms_session_duration_days",
11883 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007F,
11884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11885 },
11886 { &hf_gtpv2_mbms_session_duration_secs,
11887 {"MBMS Session Duration (seconds)", "gtpv2.mbms_session_duration_secs",
11888 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFFF80,
11889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11890 },
11891 { &hf_gtpv2_csg_id,
11892 {"CSG ID", "gtpv2.csg_id",
11893 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07ffffff,
11894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11895 },
11896 { &hf_gtpv2_cmi,
11897 {"CSG Membership Indication (CMI)", "gtpv2.cmi",
11898 FT_BOOLEAN, 8, TFS(&tfs_no_yes)((0 ? (const struct true_false_string*)0 : ((&tfs_no_yes)
)))
, 0x01,
11899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11900 },
11901 { &hf_gtpv2_service_indicator,
11902 {"Service Indicator", "gtpv2.service_indicator",
11903 FT_UINT8, BASE_DEC, VALS(gtpv2_service_indicator_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_service_indicator_vals
))))
, 0,
11904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11905 },
11906 { &hf_gtpv2_detach_type,
11907 {"Detach Type", "gtpv2.detach_type",
11908 FT_UINT8, BASE_DEC, VALS(gtpv2_detach_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_detach_type_vals
))))
, 0,
11909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11910 },
11911 { &hf_gtpv2_ldn,
11912 {"Local Distinguished Name (LDN)", "gtpv2.ldn",
11913 FT_STRING, BASE_NONE, NULL((void*)0), 0,
11914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11915 },
11916 { &hf_gtpv2_node_features_prn,
11917 {"PGW Restart Notification (PRN)", "gtpv2.node_features_prn",
11918 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
11919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11920 },
11921 { &hf_gtpv2_node_features_mabr,
11922 {"Modify Access Bearers Request (MABR)", "gtpv2.node_features_mabr",
11923 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
11924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11925 },
11926 { &hf_gtpv2_node_features_ntsr,
11927 {"Network Triggered Service Restoration (NTSR)", "gtpv2.node_features_ntsr",
11928 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
11929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11930 },
11931 { &hf_gtpv2_node_features_ciot,
11932 {"Cellular Internet Of Things (CIOT)", "gtpv2.node_features_ciot",
11933 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
11934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11935 },
11936 { &hf_gtpv2_node_features_s1un,
11937 {"S1-U path failure notification feature (S1UN)", "gtpv2.node_features_s1un",
11938 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
11939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11940 },
11941 { &hf_gtpv2_node_features_eth,
11942 {"Ethernet PDN type (ETH)", "gtpv2.node_features_eth",
11943 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
11944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11945 },
11946 { &hf_gtpv2_node_features_mtedt,
11947 {"Support of MT-EDT (MTEDT)", "gtpv2.node_features_mtedt",
11948 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x40,
11949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11950 },
11951 { &hf_gtpv2_node_features_psset,
11952 {"Support of PGW-C/SMF Set (PSSET)", "gtpv2.node_features_psset",
11953 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
11954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11955 },
11956 { &hf_gtpv2_time_to_data_xfer,
11957 {"MBMS Time to Data Transfer", "gtpv2.time_to_data_xfer",
11958 FT_STRING, BASE_NONE, NULL((void*)0), 0,
11959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11960 },
11961 { &hf_gtpv2_arp_pvi,
11962 {"Pre-emption Vulnerability (PVI)", "gtpv2.arp_pvi",
11963 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x01,
11964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11965 },
11966 { &hf_gtpv2_arp_pl,
11967 {"Priority Level", "gtpv2.arp_pl",
11968 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
11969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11970 },
11971 { &hf_gtpv2_arp_pci,
11972 {"Pre-emption Capability (PCI)", "gtpv2.arp_pci",
11973 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x40,
11974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11975 },
11976 { &hf_gtpv2_timer_unit,
11977 {"Timer unit", "gtpv2.timer_unit",
11978 FT_UINT8, BASE_DEC, VALS(gtpv2_timer_unit_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_timer_unit_vals
))))
, 0xe0,
11979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11980 },
11981 { &hf_gtpv2_throttling_delay_unit,
11982 {"Throttling Delay unit", "gtpv2.throttling_delay_unit",
11983 FT_UINT8, BASE_DEC, VALS(gtpv2_throttling_delay_unit_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_throttling_delay_unit_vals
))))
, 0xe0,
11984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11985 },
11986 { &hf_gtpv2_timer_value,
11987 {"Timer value", "gtpv2.timer_value",
11988 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f,
11989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11990 },
11991 { &hf_gtpv2_throttling_delay_value,
11992 {"Throttling Delay value", "gtpv2.throttling_delay_value",
11993 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f,
11994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11995 },
11996 { &hf_gtpv2_lapi,
11997 {"LAPI (Low Access Priority Indication)", "gtpv2.lapi",
11998 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12000 },
12001 { &hf_gtpv2_mm_context_higher_br_16mb_flg_len,
12002 {"Length of Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg_len",
12003 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12005 },
12006 { &hf_gtpv2_mm_context_higher_br_16mb_flg,
12007 {"Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg",
12008 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_higher_br_16mb_flg_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_higher_br_16mb_flg_vals
))))
, 0x0,
12009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12010 },
12011 { &hf_gtpv2_mmbr_ul,
12012 {"Max MBR/APN-AMBR for uplink", "gtpv2.mmbr_ul",
12013 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12015 },
12016 { &hf_gtpv2_mmbr_dl,
12017 {"Max MBR/APN-AMBR for downlink", "gtpv2.mmbr_dl",
12018 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12020 },
12021 { &hf_gtpv2_pres_rep_area_act_inapra,
12022 {"INAPRA", "gtpv2.pres_rep_area_action.inapra",
12023 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
12024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12025 },
12026 { &hf_gtpv2_pres_rep_area_action,
12027 {"Action", "gtpv2.pres_rep_area_action.action",
12028 FT_UINT8, BASE_DEC, VALS(gtpv2_pres_rep_area_action_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_pres_rep_area_action_vals
))))
, 0x03,
12029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12030 },
12031 { &hf_gtpv2_pres_rep_area_id,
12032 {"Presence Reporting Area Identifier", "gtpv2.pres_rep_area_action.pres_rep_area_id",
12033 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12035 },
12036 { &hf_gtpv2_pres_rep_area_act_no_tai,
12037 {"Number of TAI", "gtpv2.pres_rep_area_action.no_tai",
12038 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
12039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12040 },
12041 { &hf_gtpv2_pres_rep_area_act_no_rai,
12042 {"Number of RAI", "gtpv2.pres_rep_area_action.no_rai",
12043 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
12044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12045 },
12046 { &hf_gtpv2_pres_rep_area_act_no_m_enodeb,
12047 {"Number of Macro eNodeB", "gtpv2.pres_rep_area_action.no_m_enodeb",
12048 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12050 },
12051 { &hf_gtpv2_pres_rep_area_act_no_h_enodeb,
12052 {"Number of Home eNodeB", "gtpv2.pres_rep_area_action.no_h_enodeb",
12053 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12055 },
12056 { &hf_gtpv2_pres_rep_area_act_no_ecgi,
12057 {"Number of ECGI", "gtpv2.pres_rep_area_action.no_ecgi",
12058 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12060 },
12061 { &hf_gtpv2_pres_rep_area_act_no_sai,
12062 {"Number of SAI", "gtpv2.pres_rep_area_action.no_sai",
12063 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12065 },
12066 { &hf_gtpv2_pres_rep_area_act_no_cgi,
12067 {"Number of CGI", "gtpv2.pres_rep_area_action.no_cgi",
12068 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12070 },
12071 { &hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb,
12072 {"Number of Extended Macro eNodeB", "gtpv2.pres_rep_area_action.no_ext_m_enodeb",
12073 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12075 },
12076 { &hf_gtpv2_ksi_ps,
12077 { "KSI'ps", "gtpv2.ksi_ps",
12078 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0f,
12079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12080 },
12081 { &hf_gtpv2_ck_ps,
12082 { "CK'ps", "gtpv2.ck_ps",
12083 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12085 },
12086 { &hf_gtpv2_ik_ps,
12087 { "IK'ps", "gtpv2.ik_ps",
12088 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12090 },
12091 { &hf_gtpv2_kc_ps,
12092 { "KC'ps", "gtpv2.kc_ps",
12093 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12095 },
12096 { &hf_gtpv2_cksn_ps,
12097 { "CKSN'ps", "gtpv2.cksn_ps",
12098 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12100 },
12101 { &hf_gtpv2_pres_rep_area_info_id,
12102 {"Presence Reporting Area Identifier", "gtpv2.pres_rep_area_info_id",
12103 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12105 },
12106 { &hf_gtpv2_pres_rep_area_info_additional_id,
12107 {"Additional Presence Reporting Area Identifier", "gtpv2.pres_rep_area_info_additional_id",
12108 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12110 },
12111 { &hf_gtpv2_pres_rep_area_info_flags,
12112 {"Flags", "gtpv2.pres_rep_area_info_flags",
12113 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12115 },
12116 { &hf_gtpv2_pres_rep_area_info_flags_no_inapra,
12117 {"Flags", "gtpv2.pres_rep_area_info_flags",
12118 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12120 },
12121 { &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
12122 {"Inside Presence Reporting Area(IPRA)", "gtpv2.pres_rep_area_info_flag_ipra",
12123 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
12124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12125 },
12126 { &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
12127 {"Outside Presence Reporting Area(OPRA)", "gtpv2.pres_rep_area_info_flag_opra",
12128 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
12129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12130 },
12131 { &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
12132 {"Additional Presence Reporting Area(APRA)", "gtpv2.pres_rep_area_info_flag_apra",
12133 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
12134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12135 },
12136 { &hf_gtpv2_pres_rep_area_info_flags_b3_inapra,
12137 {"Inactive Presence Reporting Area(INAPRA)", "gtpv2.pres_rep_area_info_flag_inapra",
12138 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
12139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12140 },
12141 { &hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare,
12142 {"Spare", "gtpv2.pres_rep_area_info_spare",
12143 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
12144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12145 },
12146 { &hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare,
12147 {"Spare", "gtpv2.pres_rep_area_info_spare",
12148 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
12149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12150 },
12151 { &hf_gtpv2_ppi_value,
12152 {"Paging and Policy Information Value", "gtpv2.ppi_value",
12153 FT_UINT8, BASE_DEC | BASE_EXT_STRING0x00000200,
12154 &dscp_vals_ext, GTPV2_PPI_VAL_MASK0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12155 },
12156 { &hf_gtpv2_ppi_flag,
12157 {"Paging Policy Indication", "gtpv2.ppi_flag",
12158 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12160 },
12161 { &hf_gtpv2_session,
12162 { "Session", "gtpv2.session",
12163 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
12164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12165 },
12166
12167 /* Generated from convert_proto_tree_add_text.pl */
12168 { &hf_gtpv2_transparent_container, { "Transparent Container", "gtpv2.transparent_container", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12169 { &hf_gtpv2_cksrvcc, { "CKsrvcc", "gtpv2.cksrvcc", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12170 { &hf_gtpv2_iksrvcc, { "IKsrvcc", "gtpv2.iksrvcc", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12171 { &hf_gtpv2_mobile_station_classmark2, { "Mobile Station Classmark2", "gtpv2.mobile_station_classmark2", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12172 { &hf_gtpv2_mobile_station_classmark3, { "Mobile Station Classmark3", "gtpv2.mobile_station_classmark3", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12173 { &hf_gtpv2_supported_codec_list, { "Supported Codec List", "gtpv2.supported_codec_list", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12174 { &hf_gtpv2_utran_srvcc_ck_cs, { "CK'cs", "gtpv2.utran_srvcc.ck_cs", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12175 { &hf_gtpv2_utran_srvcc_ik_cs, { "IK'cs", "gtpv2.utran_srvcc.ik_cs", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12176 { &hf_gtpv2_utran_srvcc_kc, { "Kc'", "gtpv2.utran_srvcc.kc", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12177 { &hf_gtpv2_teid_c_spare, { "Spare", "gtpv2.teid_c.spare", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12178 { &hf_gtpv2_geographic_location, { "Geographic Location", "gtpv2.geographic_location", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12179 { &hf_gtpv2_tmsi_bytes, { "TMSI", "gtpv2.tmsi_bytes", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12180 { &hf_gtpv2_cn_id, { "CN-Id", "gtpv2.cn_id", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12181 { &hf_gtpv2_eps_bearer_id_number, { "EPS Bearer ID Number", "gtpv2.eps_bearer_id_number", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12182 { &hf_gtpv2_serving_gw_address_length, { "Serving GW Address Length", "gtpv2.serving_gw_address_length", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12183 { &hf_gtpv2_charging_characteristic_remaining_octets, { "Remaining octets", "gtpv2.charging_characteristic.remaining_octets", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12184 { &hf_gtpv2_trace_id, { "Trace ID", "gtpv2.trace_id", FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12185 { &hf_gtpv2_drx_parameter, { "DRX parameter", "gtpv2.drx_parameter", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12186 { &hf_gtpv2_mm_context_sres, { "SRES'", "gtpv2.mm_context_sres", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12187 { &hf_gtpv2_mm_context_kc, { "Kc'", "gtpv2.mm_context_kc", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12188 { &hf_gtpv2_uplink_subscribed_ue_ambr, { "Uplink Subscribed UE AMBR", "gtpv2.uplink_subscribed_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12189 { &hf_gtpv2_downlink_subscribed_ue_ambr, { "Downlink Subscribed UE AMBR", "gtpv2.downlink_subscribed_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12190 { &hf_gtpv2_uplink_used_ue_ambr, { "Uplink Used UE AMBR", "gtpv2.uplink_used_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12191 { &hf_gtpv2_downlink_used_ue_ambr, { "Downlink Used UE AMBR", "gtpv2.downlink_used_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12192 { &hf_gtpv2_voice_domain_and_ue_usage_setting, { "Voice Domain Preference and UE's Usage Setting", "gtpv2.voice_domain_and_ue_usage_setting", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12193 { &hf_gtpv2_ue_radio_capability_for_paging_information,{ "UE Radio Capability for Paging information", "gtpv2.UE_Radio_Capability_for_Paging_information", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12194 { &hf_gtpv2_authentication_quadruplets, { "Authentication Quadruplets", "gtpv2.authentication_quadruplets", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12195 { &hf_gtpv2_authentication_quintuplets, { "Authentication Quintuplets", "gtpv2.authentication_quintuplets", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12196 { &hf_gtpv2_mm_context_nh, { "NH (Next Hop)", "gtpv2.mm_context_nh", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12197 { &hf_gtpv2_mm_context_ncc, { "NCC (Next Hop Chaining Count)", "gtpv2.mm_context_ncc", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12198 { &hf_gtpv2_nsapi08, { "NSAPI", "gtpv2.nsapi", FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12199 { &hf_gtpv2_dl_gtp_u_sequence_number, { "DL GTP-U Sequence Number", "gtpv2.dl_gtp_u_sequence_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12200 { &hf_gtpv2_ul_gtp_u_sequence_number, { "UL GTP-U Sequence Number", "gtpv2.ul_gtp_u_sequence_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12201 { &hf_gtpv2_send_n_pdu_number, { "Send N-PDU Number", "gtpv2.send_n_pdu_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12202 { &hf_gtpv2_receive_n_pdu_number, { "Receive N-PDU Number", "gtpv2.receive_n_pdu_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12203 { &hf_gtpv2_hop_counter, { "Hop Counter", "gtpv2.hop_counter", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12204 { &hf_gtpv2_packet_flow_id, { "Packet Flow ID", "gtpv2.packet_flow_id", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12205 { &hf_gtpv2_rrc_container, { "RRC Container", "gtpv2.rrc_container", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12206 { &hf_gtpv2_port_number, { "Port Number", "gtpv2.port_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12207 { &hf_gtpv2_proprietary_value, { "Proprietary value", "gtpv2.proprietary_value", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12208 { &hf_gtpv2_spare_bytes, { "Spare", "gtpv2.spare_bytes", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12209 { &hf_gtpv2_dl_pdcp_sequence_number, { "DL PDCP Sequence Number", "gtpv2.dl_pdcp_sequence_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12210 { &hf_gtpv2_ul_pdcp_sequence_number, { "UL PDCP Sequence Number", "gtpv2.ul_pdcp_sequence_number", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12211 { &hf_gtpv2_fq_csid_node_id, { "Node-ID", "gtpv2.fq_csid_node_id", FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12212 { &hf_gtpv2_fq_csid_mcc_mnc, { "MCC+MNC", "gtpv2.fq_csid_mcc_mnc", FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFFF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
12213
12214 { &hf_gtpv2_twan_id_ts, { "TWAN Identifier Timestamp", "gtpv2.twan.id_ts", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12215 { &hf_gtpv2_twan_flags,{ "Flags", "gtpv2.twan_id.flags", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12216 { &hf_gtpv2_twan_bssidi,{ "BSSIDI", "gtpv2.twan_id.bssidi", FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12217 { &hf_gtpv2_twan_civai,{ "CIVAI", "gtpv2.twan_id.civai", FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12218 { &hf_gtpv2_twan_plmni,{ "PLMNI", "gtpv2.twan_id.plmni", FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12219 { &hf_gtpv2_twan_opnai,{ "OPNAI", "gtpv2.twan_id.opnai", FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12220 { &hf_gtpv2_twan_laii,{ "LAII", "gtpv2.twan_id.laii", FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12221 { &hf_gtpv2_twan_ssid_len,{ "SSID Length", "gtpv2.twan_id.ssid_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12222 { &hf_gtpv2_twan_ssid,{ "SSID", "gtpv2.twan_id.ssid", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12223 { &hf_gtpv2_twan_bssid,{ "BSSID", "gtpv2.twan_id.bssid", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12224 { &hf_gtpv2_twan_civa_len,{ "Civic Address Length", "gtpv2.twan_id.civa_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12225 { &hf_gtpv2_twan_civa,{ "Civic Address Information", "gtpv2.twan_id.civa", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12226 { &hf_gtpv2_twan_plmnid,{ "TWAN PLMN-ID", "gtpv2.twan_id.plmnid", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12227 { &hf_gtpv2_twan_op_name_len,{ "TWAN Operator Name Length", "gtpv2.twan_id.op_name_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12228 { &hf_gtpv2_twan_op_name,{ "TWAN Operator Name", "gtpv2.twan_id.op_name", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12229 { &hf_gtpv2_twan_relay_id_type,{ "Relay Identity Type", "gtpv2.twan_id.relay_id_type", FT_UINT8, BASE_DEC, VALS(gtpv2_twan_relay_id_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_twan_relay_id_type_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12230 { &hf_gtpv2_twan_relay_id_len,{ "Relay Identity Type Length", "gtpv2.twan_id.relay_id_type_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12231 { &hf_gtpv2_twan_relay_id,{ "Relay Identity", "gtpv2.twan_id.relay_id", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12232 { &hf_gtpv2_twan_relay_id_ipv4,{ "Relay Identity", "gtpv2.twan_id.relay_id_ipv4", FT_IPv4, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12233 { &hf_gtpv2_twan_relay_id_ipv6,{ "Relay Identity", "gtpv2.twan_id.relay_id_ipv6", FT_IPv6, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12234 { &hf_gtpv2_twan_circuit_id_len,{ "Relay Identity Type Length", "gtpv2.twan_id.relay_id_type_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12235 { &hf_gtpv2_twan_circuit_id,{ "Circuit-ID", "gtpv2.twan_id.circuit_id", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12236 { &hf_gtpv2_integer_number_val,{ "Value", "gtpv2.integer_number_val", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12237 { &hf_gtpv2_maximum_wait_time,{ "Maximum Wait Time", "gtpv2.maximum_wait_time", FT_UINT32, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_milliseconds)((0 ? (const struct unit_name_string*)0 : ((&units_milliseconds
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12238 { &hf_gtpv2_dl_buf_sug_pkt_cnt,{ "DL Buffering Suggested Packet Count", "gtpv2.dl_buf_sug_pkt_cnt", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12239 { &hf_gtpv2_ue_usage_type,{ "UE Usage Type", "gtpv2.ue_usage_type", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12240 { &hf_gtpv2_rem_run_serv_gap_t,{ "Remaining Running Service Gap Timer", "gtpv2.rem_run_serv_gap_t", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12241 { &hf_gtpv2_ran_nas_protocol_type, {"RAN/NAS Protocol Type", "gtpv2.ran_nas.protocol_type", FT_UINT8, BASE_DEC, VALS(ran_nas_prot_type_vals)((0 ? (const struct _value_string*)0 : ((ran_nas_prot_type_vals
))))
, 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12242 { &hf_gtpv2_ran_nas_cause_type, {"RAN/NAS S1AP Cause Type", "gtpv2.ran_nas.s1ap_type", FT_UINT8, BASE_DEC, VALS(s1ap_Cause_vals)((0 ? (const struct _value_string*)0 : ((s1ap_Cause_vals)))), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12243 { &hf_gtpv2_ran_nas_cause_value, {"RAN/NAS Cause Value", "gtpv2.ran_nas.cause_value", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12244 { &hf_gtpv2_emm_cause, {"EMM Cause Value", "gtpv2.ran_nas.emm_cause", FT_UINT8, BASE_DEC, VALS(nas_eps_emm_cause_values)((0 ? (const struct _value_string*)0 : ((nas_eps_emm_cause_values
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12245 { &hf_gtpv2_esm_cause, {"ESM Cause Value", "gtpv2.ran_nas.esm_cause", FT_UINT8, BASE_DEC, VALS(nas_eps_esm_cause_vals)((0 ? (const struct _value_string*)0 : ((nas_eps_esm_cause_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12246 { &hf_gtpv2_diameter_cause, {"Diameter Cause Value", "gtpv2.ran_nas.diameter_cause", FT_UINT16, BASE_DEC, VALS(diameter_3gpp_termination_cause_vals)((0 ? (const struct _value_string*)0 : ((diameter_3gpp_termination_cause_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12247 { &hf_gtpv2_ikev2_cause, {"IKEv2 Cause Value", "gtpv2.ran_nas.ikev2_cause", FT_UINT16, BASE_DEC, VALS(diameter_3gpp_IKEv2_error_type_vals)((0 ? (const struct _value_string*)0 : ((diameter_3gpp_IKEv2_error_type_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
12248 { &hf_gtpv2_ciot_support_ind,{ "CIoT Optimizations Support Indication", "gtpv2.ciot_support_ind", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
12249 { &hf_gtpv2_ciot_support_ind_spare_bits,
12250 { "Spare", "gtpv2.ciot_support_ind.spare_bits",
12251 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
12252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12253 },
12254 { &hf_gtpv2_ciot_support_ind_bit4,
12255 { "IHCSI (IP Header Compression Support)", "gtpv2.ciot_support_ind.ihcsi",
12256 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12258 },
12259 { &hf_gtpv2_ciot_support_ind_bit3,
12260 { "AWOPDN (Attach without PDN Support)", "gtpv2.ciot_support_ind.awopdn",
12261 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12263 },
12264 { &hf_gtpv2_ciot_support_ind_bit2,
12265 { "SCNIPDN (SCEF Non-IP PDN Support)", "gtpv2.ciot_support_ind.scnipdn",
12266 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12268 },
12269 { &hf_gtpv2_ciot_support_ind_bit1,
12270 { "SGNIPDN (SGi Non-IP PDN Support)", "gtpv2.ciot_support_ind.sgnipdn",
12271 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12273 },
12274 { &hf_gtpv2_length_of_node_name,
12275 { "Length of Node Name", "gtpv2.length_of_node_name",
12276 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12278 },
12279 { &hf_gtpv2_length_of_node_realm,
12280 { "Length of Node Realm", "gtpv2.length_of_node_realm",
12281 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12283 },
12284 { &hf_gtpv2_node_name,
12285 { "Node Name", "gtpv2.node_name",
12286 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12288 },
12289 { &hf_gtpv2_node_realm,
12290 { "Node Realm", "gtpv2.node_realm",
12291 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12293 },
12294 { &hf_gtpv2_ms_ts,
12295 { "Millisecond Time Stamp", "gtpv2.ms_ts",
12296 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0,
12297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12298 },
12299 { &hf_gtpv2_origination_ts,
12300 { "Origination Time Stamp", "gtpv2.origination_ts",
12301 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0,
12302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12303 },
12304 { &hf_gtpv2_mon_event_inf_nsur,
12305 { "NSUR (Notify SCEF when UE becomes Reachable)", "gtpv2.mon_event_inf.nsur",
12306 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
12307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12308 },
12309 { &hf_gtpv2_mon_event_inf_nsui,
12310 { "NSUI (Notify SCEF when UE becomes Idle)", "gtpv2.mon_event_inf.nsui",
12311 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
12312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12313 },
12314 { &hf_gtpv2_mon_event_inf_nscf,
12315 { "NSCF (Notify SCEF about Communication Failure events)", "gtpv2.mon_event_inf.nscf",
12316 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
12317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12318 },
12319 { &hf_gtpv2_mon_event_inf_srie,
12320 { "SRIE (SCEF Reference Id Extension)", "gtpv2.mon_event_ext_inf.srie",
12321 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80,
12322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12323 },
12324 { &hf_gtpv2_mon_event_inf_scef_reference_id,
12325 { "SCEF Reference ID", "gtpv2.mon_event_inf.scef_reference_id",
12326 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12328 },
12329 { &hf_gtpv2_mon_event_inf_scef_reference_id_ext,
12330 { "SCEF Reference ID Ext", "gtpv2.mon_event_inf.scef_reference_id_ext",
12331 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12333 },
12334 { &hf_gtpv2_mon_event_inf_scef_id_length,
12335 { "SCEF ID length", "gtpv2.mon_event_inf.scef_id_length",
12336 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12338 },
12339 { &hf_gtpv2_mon_event_inf_scef_id,
12340 { "SCEF ID", "gtpv2.mon_event_inf.scef_id",
12341 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12343 },
12344 { &hf_gtpv2_mon_event_inf_remaining_number_of_reports,
12345 { "Remaining Number of Reports", "gtpv2.mon_event_inf.remaining_number_of_reports",
12346 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12348 },
12349 { &hf_gtpv2_mon_event_ext_inf_lrtp,
12350 { "LRTP (Remaining Minimum Periodic Location Reporting Time Present)", "gtpv2.mon_event_ext_inf.lrtp",
12351 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
12352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12353 },
12354 { &hf_gtpv2_mon_event_ext_inf_srie,
12355 { "SRIE (SCEF Reference Id Extension)", "gtpv2.mon_event_ext_inf.srie",
12356 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
12357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12358 },
12359 { &hf_gtpv2_mon_event_ext_inf_scef_reference_id,
12360 { "SCEF Reference ID", "gtpv2.mon_event_ext_inf.scef_reference_id",
12361 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12363 },
12364 { &hf_gtpv2_mon_event_ext_inf_scef_id_length,
12365 { "SCEF ID length", "gtpv2.mon_event_ext_inf.scef_id_length",
12366 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12368 },
12369 { &hf_gtpv2_mon_event_ext_inf_scef_id,
12370 { "SCEF ID", "gtpv2.mon_event_ext_inf.scef_id",
12371 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12373 },
12374 { &hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type,
12375 { "Remaining Minimum Periodic Location Reporting Time", "gtpv2.mon_event_ext_inf.remain_min_period_loc_report_type",
12376 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0x0,
12377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12378 },
12379 { &hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext,
12380 { "SCEF Reference ID Ext", "gtpv2.mon_event_ext_inf.scef_reference_id_ext",
12381 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12383 },
12384 { &hf_gtpv2_rohc_profile_flags,
12385 { "ROHC Profiles flags", "gtpv2.rohc_profile_flags",
12386 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12388 },
12389 { &hf_gtpv2_rohc_profiles_bit0,
12390 { "Profile Identifier: 0x0002, UDP/IP", "gtpv2.rohc_profiles.b0",
12391 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x01,
12392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12393 },
12394 { &hf_gtpv2_rohc_profiles_bit1,
12395 { "Profile Identifier: 0x0003, ESP/IP", "gtpv2.rohc_profiles.b1",
12396 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x02,
12397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12398 },
12399 { &hf_gtpv2_rohc_profiles_bit2,
12400 { "Profile Identifier: 0x0004, IP", "gtpv2.rohc_profiles.b2",
12401 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x04,
12402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12403 },
12404 { &hf_gtpv2_rohc_profiles_bit3,
12405 { "Profile Identifier: 0x0006, TCP/IP", "gtpv2.rohc_profiles.b3",
12406 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x08,
12407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12408 },
12409 { &hf_gtpv2_rohc_profiles_bit4,
12410 { "Profile Identifier: 0x0102, UDP/IP", "gtpv2.rohc_profiles.b4",
12411 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x10,
12412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12413 },
12414 { &hf_gtpv2_rohc_profiles_bit5,
12415 { "Profile Identifier: 0x0103, ESP/IP", "gtpv2.rohc_profiles.b5",
12416 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x20,
12417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12418 },
12419 { &hf_gtpv2_rohc_profiles_bit6,
12420 { "Profile Identifier: 0x0104, IP", "gtpv2.rohc_profiles.b6",
12421 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x40,
12422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12423 },
12424 { &hf_gtpv2_rohc_profiles_bit7,
12425 { "Spare", "gtpv2.rohc_profiles.b7",
12426 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
12427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12428 },
12429 { &hf_gtpv2_max_cid,
12430 { "MAX_CID", "gtpv2.max_cid",
12431 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12433 },
12434 { &hf_gtpv2_uplink_rate_limit,
12435 { "Uplink Rate Limit", "gtpv2.uplink_rate_limit",
12436 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12438 },
12439 { &hf_gtpv2_downlink_rate_limit,
12440 { "Downlink Rate Limit", "gtpv2.downlink_rate_limit",
12441 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12443 },
12444 { &hf_gtpv2_timestamp_value,
12445 { "Timestamp value", "gtpv2.timestamp_value",
12446 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12448 },
12449 { &hf_gtpv2_counter_value,
12450 { "Counter value", "gtpv2.counter_value",
12451 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12453 },
12454 { &hf_gtpv2_mapped_ue_usage_type,
12455 { "Mapped UE usage type", "gtpv2.mapped_ue_usage_type",
12456 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12458 },
12459 { &hf_gtpv2_uli_flags,
12460 { "ULI Flags", "gtpv2.uli_flags",
12461 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12463 },
12464 { &hf_gtpv2_dcnr,
12465 { "DCNR (Dual connectivity with NR)", "gtpv2.dcnr",
12466 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12468 },
12469 { &hf_gtpv2_secondary_rat_usage_data_report,
12470 { "Secondary RAT Usage Data Report", "gtpv2.secondary_rat_usage_data_report",
12471 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12473 },
12474 { &hf_gtpv2_secondary_rat_usage_data_report_spare_bits,
12475 { "Spare", "gtpv2.secondary_rat_usage_data_report.spare_bits",
12476 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
12477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12478 },
12479 { &hf_gtpv2_secondary_rat_usage_data_report_bit3,
12480 { "SRUDN (Secondary RAT Usage Report from NG-RAN)", "gtpv2.secondary_rat_usage_data_report.srudn",
12481 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12483 },
12484 { &hf_gtpv2_secondary_rat_usage_data_report_bit2,
12485 { "IRSGW (Intended Receiver SGW)", "gtpv2.secondary_rat_usage_data_report.irsgw",
12486 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12488 },
12489 { &hf_gtpv2_secondary_rat_usage_data_report_bit1,
12490 { "IRPGW (Intended Receiver PGW)", "gtpv2.secondary_rat_usage_data_report.irpgw",
12491 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12493 },
12494 { &hf_gtpv2_secondary_rat_usage_data_report_rat_type,
12495 {"RAT Type", "gtpv2.secondary_rat_usage_data_report.rat_type",
12496 FT_UINT8, BASE_DEC, VALS(gtpv2_secondary_rat_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_secondary_rat_type_vals
))))
, 0x0,
12497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12498 },
12499 { &hf_gtpv2_secondary_rat_usage_data_report_start_timestamp,
12500 { "Start timestamp", "gtpv2.secondary_rat_usage_data_report.start_timestamp",
12501 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12503 },
12504 { &hf_gtpv2_secondary_rat_usage_data_report_end_timestamp,
12505 { "End timestamp", "gtpv2.secondary_rat_usage_data_report.end_timestamp",
12506 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12508 },
12509 { &hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl,
12510 { "Usage Data DL", "gtpv2.secondary_rat_usage_data_report.usage_data_dl",
12511 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12513 },
12514 { &hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul,
12515 { "Usage Data UL", "gtpv2.secondary_rat_usage_data_report.usage_data_ul",
12516 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12518 },
12519 { &hf_gtpv2_secondary_rat_usage_data_report_srudn_length,
12520 { "SRUDN length", "gtpv2.mon_event_inf.srudn_length",
12521 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12523 },
12524 { &hf_gtpv2_secondary_rat_usage_data_report_srudn_value,
12525 { "SecondaryRATDataUsageReportTransfer", "gtpv2.mon_event_inf.srudn_value",
12526 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
12527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12528 },
12529 { &hf_gtpv2_csg_info_rep_action_b0,
12530 { "UCICSG", "gtpv2.csg_info_rep_action.ucicsg",
12531 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12533 },
12534 { &hf_gtpv2_csg_info_rep_action_b1,
12535 { "UCISHC", "gtpv2.csg_info_rep_action.ucishc",
12536 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12538 },
12539 { &hf_gtpv2_csg_info_rep_action_b2,
12540 { "UCIUHC", "gtpv2.csg_info_rep_action.uciuhc",
12541 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12543 },
12544 { &hf_gtpv2_gnodeb_id_len,
12545 {"gNodeB ID Length", "gtpv2.gnodeb_id_len",
12546 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12548 },
12549 { &hf_gtpv2_gnodeb_id,
12550 { "gNodeB ID", "gtpv2.gnodeb_id",
12551 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12553 },
12554 { &hf_gtpv2_macro_ng_enodeb_id,
12555 { "Macro ng-eNodeB ID", "gtpv2.ng_enodeb_id",
12556 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0fffff,
12557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12558 },
12559 { &hf_gtpv2_5gs_tac,
12560 { "5GS Tracking Area Code (TAC)", "gtpv2.5gs_tac",
12561 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
12562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12563 },
12564 { &hf_gtpv2_en_gnb_id_len,
12565 {"en-gNB ID Length", "gtpv2.en_gnb_id_len",
12566 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12568 },
12569 { &hf_gtpv2_5tac,
12570 { "5TAC", "gtpv2.5tac",
12571 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80,
12572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12573 },
12574 { &hf_gtpv2_etac,
12575 { "ETAC", "gtpv2.etac",
12576 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
12577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12578 },
12579 { &hf_gtpv2_en_gnb_id,
12580 { "gNodeB ID", "gtpv2.en_gnb_id",
12581 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
12582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12583 },
12584 { &hf_gtpv2_trig_event_len,
12585 { "Length of Triggering Events", "gtpv2.trig_event_len",
12586 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12588 },
12589 { &hf_gtpv2_ne_list_len,
12590 { "Length of List of NE Types", "gtpv2.ne_list_len",
12591 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12593 },
12594 { &hf_gtpv2_ses_trs_depth,
12595 { "Session Trace Depth", "gtpv2.ses_trs_dept",
12596 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12598 },
12599 { &hf_gtpv2_list_of_if_len,
12600 { "Length of List of Interfaces", "gtpv2.list_of_if_len",
12601 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12603 },
12604 { &hf_gtpv2_trs_coll_ip_addr_len,
12605 { "Length of IP Address of Trace Collection Entity", "gtpv2.trs_coll_ip_addr_len",
12606 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12608 },
12609 { &hf_gtpv2_trs_coll_ipv4_addr,
12610 {"IP Address of Trace Collection Entity", "gtpv2.trs_coll_ipv4_addr",
12611 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
12612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12613 },
12614 { &hf_gtpv2_trs_coll_ipv6_addr,
12615 {"IP Address of Trace Collection Entity", "gtpv2.trs_coll_ipv6_addr",
12616 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
12617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12618 },
12619 { &hf_gtpv2_ext_tra_info_loi_mscs_cap,
12620 { "CAP", "gtpv2.ext_tra_info_loi.mscs.cap",
12621 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12623 },
12624 { &hf_gtpv2_ext_tra_info_loi_mscs_map_f,
12625 { "MAP-F", "gtpv2.ext_tra_info_loi.mscs.map_f",
12626 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12628 },
12629 { &hf_gtpv2_ext_tra_info_loi_mscs_map_e,
12630 { "MAP-E", "gtpv2.ext_tra_info_loi.mscs.map_e",
12631 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12633 },
12634 { &hf_gtpv2_ext_tra_info_loi_mscs_map_b,
12635 { "MAP-B", "gtpv2.ext_tra_info_loi.mscs.map_b",
12636 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12638 },
12639 { &hf_gtpv2_ext_tra_info_loi_mscs_map_g,
12640 { "MAP-G", "gtpv2.ext_tra_info_loi.mscs.map_g",
12641 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12643 },
12644 { &hf_gtpv2_ext_tra_info_loi_mscs_mc,
12645 { "Mc", "gtpv2.ext_tra_info_loi.mscs.mc",
12646 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12648 },
12649 { &hf_gtpv2_ext_tra_info_loi_mscs_iu,
12650 { "Iu", "gtpv2.ext_tra_info_loi.mscs.iu",
12651 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12653 },
12654 { &hf_gtpv2_ext_tra_info_loi_mscs_a,
12655 { "A","gtpv2.ext_tra_info_loi.mscs.a",
12656 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12658 },
12659 { &hf_gtpv2_ext_tra_info_loi_mscs_map_c,
12660 { "MAP-C", "gtpv2.ext_tra_info_loi.mscs.map_c",
12661 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12663 },
12664 { &hf_gtpv2_ext_tra_info_loi_mscs_map_d,
12665 { "MAP-D", "gtpv2.ext_tra_info_loi.mscs.map_d",
12666 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12668 },
12669 { &hf_gtpv2_ext_tra_info_loi_mgw_iuup,
12670 { "Iu-UP", "gtpv2.ext_tra_info_loi.mgw.iuup",
12671 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12673 },
12674 { &hf_gtpv2_ext_tra_info_loi_mgw_nbup,
12675 { "Nb-UP", "gtpv2.ext_tra_info_loi.mgw.nbup",
12676 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12678 },
12679 { &hf_gtpv2_ext_tra_info_loi_mgw_mc,
12680 { "Mc", "gtpv2.ext_tra_info_loi.mgw.mc",
12681 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12683 },
12684 { &hf_gtpv2_ext_tra_info_loi_sgsn_ge,
12685 { "Ge", "gtpv2.ext_tra_info_loi.sgsn.ge",
12686 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12688 },
12689 { &hf_gtpv2_ext_tra_info_loi_sgsn_gs,
12690 { "Gs", "gtpv2.ext_tra_info_loi.sgsn.gs",
12691 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12693 },
12694 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gf,
12695 { "MAP-Gf", "gtpv2.ext_tra_info_loi.sgsn.map_gf",
12696 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12698 },
12699 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gd,
12700 { "MAP-Gd", "gtpv2.ext_tra_info_loi.sgsn.map_gd",
12701 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12703 },
12704 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gr,
12705 { "MAP-Gr", "gtpv2.ext_tra_info_loi.sgsn.map_gr",
12706 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12708 },
12709 { &hf_gtpv2_ext_tra_info_loi_sgsn_gn,
12710 { "Gn", "gtpv2.ext_tra_info_loi.sgsn.gn",
12711 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12713 },
12714 { &hf_gtpv2_ext_tra_info_loi_sgsn_iu,
12715 { "Iu", "gtpv2.ext_tra_info_loi.sgsn.iu",
12716 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12718 },
12719 { &hf_gtpv2_ext_tra_info_loi_sgsn_gb,
12720 { "Gb", "gtpv2.ext_tra_info_loi.sgsn.gb",
12721 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12723 },
12724 { &hf_gtpv2_ext_tra_info_loi_sgsn_s13,
12725 { "S13", "gtpv2.ext_tra_info_loi.sgsn.s13",
12726 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12728 },
12729 { &hf_gtpv2_ext_tra_info_loi_sgsn_s3,
12730 { "S3", "gtpv2.ext_tra_info_loi.sgsn.s3",
12731 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12733 },
12734 { &hf_gtpv2_ext_tra_info_loi_sgsn_s4,
12735 { "S4", "gtpv2.ext_tra_info_loi.sgsn.s4",
12736 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12738 },
12739 { &hf_gtpv2_ext_tra_info_loi_sgsn_s6d,
12740 { "S6d", "gtpv2.ext_tra_info_loi.sgsn.s6d",
12741 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12743 },
12744 { &hf_gtpv2_ext_tra_info_loi_ggsn_gmb,
12745 { "Gmb", "gtpv2.ext_tra_info_loi.ggsn.gmb",
12746 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12748 },
12749 { &hf_gtpv2_ext_tra_info_loi_ggsn_gi,
12750 { "Gi", "gtpv2.ext_tra_info_loi.ggsn.gi",
12751 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12753 },
12754 { &hf_gtpv2_ext_tra_info_loi_ggsn_gn,
12755 { "Gn", "gtpv2.ext_tra_info_loi.ggsn.gn",
12756 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12758 },
12759 { &hf_gtpv2_ext_tra_info_loi_rnc_uu,
12760 { "Uu", "gtpv2.ext_tra_info_loi.rrc.uu",
12761 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12762 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12763 },
12764 { &hf_gtpv2_ext_tra_info_loi_rnc_iub,
12765 { "Iub", "gtpv2.ext_tra_info_loi.rrc.iub",
12766 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12767 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12768 },
12769 { &hf_gtpv2_ext_tra_info_loi_rnc_iur,
12770 { "Iur", "gtpv2.ext_tra_info_loi.rrc.iur",
12771 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12773 },
12774 { &hf_gtpv2_ext_tra_info_loi_rnc_iu,
12775 { "Iu", "gtpv2.ext_tra_info_loi.rrc.iu",
12776 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12778 },
12779 { &hf_gtpv2_ext_tra_info_loi_bm_sc_gmb,
12780 { "Gmb", "gtpv2.ext_tra_info_loi.bm_sc.gmb",
12781 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12783 },
12784 { &hf_gtpv2_ext_tra_info_loi_mme_s13,
12785 { "S13", "gtpv2.ext_tra_info_loi.mme.s13",
12786 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12788 },
12789 { &hf_gtpv2_ext_tra_info_loi_mme_s11,
12790 { "S11", "gtpv2.ext_tra_info_loi.mme.s11",
12791 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12793 },
12794 { &hf_gtpv2_ext_tra_info_loi_mme_s10,
12795 { "S10", "gtpv2.ext_tra_info_loi.mme.s10",
12796 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12798 },
12799 { &hf_gtpv2_ext_tra_info_loi_mme_s6a,
12800 { "S6a", "gtpv2.ext_tra_info_loi.mme.s6a",
12801 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12803 },
12804 { &hf_gtpv2_ext_tra_info_loi_mme_s3,
12805 { "S3", "gtpv2.ext_tra_info_loi.mme.s3",
12806 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12808 },
12809 { &hf_gtpv2_ext_tra_info_loi_mme_s1_mme,
12810 { "S1-mme", "gtpv2.ext_tra_info_loi.mme.s1_mme",
12811 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12813 },
12814 { &hf_gtpv2_ext_tra_info_loi_sgw_gxc,
12815 { "Gxc", "gtpv2.ext_tra_info_loi.sgw.gxc",
12816 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12818 },
12819 { &hf_gtpv2_ext_tra_info_loi_sgw_s11,
12820 { "S11", "gtpv2.ext_tra_info_loi.sgw.s11",
12821 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12823 },
12824 { &hf_gtpv2_ext_tra_info_loi_sgw_s8b,
12825 { "S8b", "gtpv2.ext_tra_info_loi.sgw.s8b",
12826 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12828 },
12829 { &hf_gtpv2_ext_tra_info_loi_sgw_s5,
12830 { "S5", "gtpv2.ext_tra_info_loi.sgw.s5",
12831 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12833 },
12834 { &hf_gtpv2_ext_tra_info_loi_sgw_s4,
12835 { "S4", "gtpv2.ext_tra_info_loi.sgw.s4",
12836 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12838 },
12839 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi,
12840 { "Sgi", "gtpv2.ext_tra_info_loi.pdn_gw.sgi",
12841 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12843 },
12844 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b,
12845 { "S8b", "gtpv2.ext_tra_info_loi.pdn_gw.s8b",
12846 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12848 },
12849 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_gx,
12850 { "Gx", "gtpv2.ext_tra_info_loi.pdn_gw.gx",
12851 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12853 },
12854 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b,
12855 { "S6b", "gtpv2.ext_tra_info_loi.pdn_gw.s6b",
12856 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12858 },
12859 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s5,
12860 { "S5", "gtpv2.ext_tra_info_loi.pdn_gw.s5",
12861 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12863 },
12864 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c,
12865 { "S2c", "gtpv2.ext_tra_info_loi.pdn_gw.s2c",
12866 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12868 },
12869 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b,
12870 { "S2b", "gtpv2.ext_tra_info_loi.pdn_gw.s2b",
12871 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12873 },
12874 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a,
12875 { "S2a", "gtpv2.ext_tra_info_loi.pdn_gw.s2a",
12876 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12878 },
12879 { &hf_gtpv2_ext_tra_info_loi_enb_uu,
12880 { "Uu", "gtpv2.ext_tra_info_loi.enb.uu",
12881 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12883 },
12884 { &hf_gtpv2_ext_tra_info_loi_enb_x2,
12885 { "X2", "gtpv2.ext_tra_info_loi.enb.x2",
12886 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12888 },
12889 { &hf_gtpv2_ext_tra_info_loi_enb_s1_mme,
12890 { "S1-MME", "gtpv2.ext_tra_info_loi.enb.s1_mme",
12891 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12893 },
12894 { &hf_gtpv2_ext_tra_info_loi_hss_sh,
12895 { "Sh", "gtpv2.ext_tra_info_loi.hss.Sh",
12896 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12898 },
12899 { &hf_gtpv2_ext_tra_info_loi_hss_s6a,
12900 { "S6a", "gtpv2.ext_tra_info_loi.hss.S6a",
12901 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12903 },
12904 { &hf_gtpv2_ext_tra_info_loi_hss_s6d,
12905 { "S6d", "gtpv2.ext_tra_info_loi.hss.S6d",
12906 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12908 },
12909 { &hf_gtpv2_ext_tra_info_loi_hss_cx,
12910 { "Cx", "gtpv2.ext_tra_info_loi.hss.cx",
12911 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12913 },
12914 { &hf_gtpv2_ext_tra_info_loi_hss_map_gr,
12915 { "MAP-Gr", "gtpv2.ext_tra_info_loi.hss.map_gr",
12916 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12918 },
12919 { &hf_gtpv2_ext_tra_info_loi_hss_map_gc,
12920 { "MAP-Gc", "gtpv2.ext_tra_info_loi.hss.map_gc",
12921 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12923 },
12924 { &hf_gtpv2_ext_tra_info_loi_hss_map_d,
12925 { "MAP-D", "gtpv2.ext_tra_info_loi.hss.map_d",
12926 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12928 },
12929 { &hf_gtpv2_ext_tra_info_loi_hss_map_c,
12930 { "MAP-C", "gtpv2.ext_tra_info_loi.hss.map_c",
12931 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12933 },
12934 { &hf_gtpv2_ext_tra_info_loi_eir_map_gf,
12935 { "MAP-Gf", "gtpv2.ext_tra_info_loi.eir.map_gf",
12936 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12938 },
12939 { &hf_gtpv2_ext_tra_info_loi_eir_s13p,
12940 { "S13'", "gtpv2.ext_tra_info_loi.eir.s13p",
12941 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12943 },
12944 { &hf_gtpv2_ext_tra_info_loi_eir_s13,
12945 { "S13", "gtpv2.ext_tra_info_loi.eir.s13",
12946 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12948 },
12949 { &hf_gtpv2_ext_tra_info_loi_eir_map_f,
12950 { "MAP-F", "gtpv2.ext_tra_info_loi.eir.map_f",
12951 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12953 },
12954 { &hf_gtpv2_ext_tra_info_loi_amf_n20,
12955 { "N20", "gtpv2.ext_tra_info_loi.amf.n20",
12956 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12958 },
12959 { &hf_gtpv2_ext_tra_info_loi_amf_n15,
12960 { "N15", "gtpv2.ext_tra_info_loi.amf.n15",
12961 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12963 },
12964 { &hf_gtpv2_ext_tra_info_loi_amf_n14,
12965 { "N14", "gtpv2.ext_tra_info_loi.amf.n14",
12966 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12968 },
12969 { &hf_gtpv2_ext_tra_info_loi_amf_n12,
12970 { "N12", "gtpv2.ext_tra_info_loi.amf.n12",
12971 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12973 },
12974 { &hf_gtpv2_ext_tra_info_loi_amf_n11,
12975 { "N11", "gtpv2.ext_tra_info_loi.amf.n11",
12976 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12978 },
12979 { &hf_gtpv2_ext_tra_info_loi_amf_n8,
12980 { "N8", "gtpv2.ext_tra_info_loi.amf.n8",
12981 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12983 },
12984 { &hf_gtpv2_ext_tra_info_loi_amf_n2,
12985 { "N2", "gtpv2.ext_tra_info_loi.amf.n2",
12986 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12988 },
12989 { &hf_gtpv2_ext_tra_info_loi_amf_n1,
12990 { "N1", "gtpv2.ext_tra_info_loi.amf.n1",
12991 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12993 },
12994 { &hf_gtpv2_ext_tra_info_loi_amf_n22,
12995 { "N22", "gtpv2.ext_tra_info_loi.amf.n22",
12996 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12998 },
12999 { &hf_gtpv2_ext_tra_info_loi_amf_n26,
13000 { "N26", "gtpv2.ext_tra_info_loi.amf.n26",
13001 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13003 },
13004 { &hf_gtpv2_ext_tra_info_loi_pcf_n15,
13005 { "N15", "gtpv2.ext_tra_info_loi.pcf.n15",
13006 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13008 },
13009 { &hf_gtpv2_ext_tra_info_loi_pcf_n7,
13010 { "N7", "gtpv2.ext_tra_info_loi.pcf.n7",
13011 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13013 },
13014 { &hf_gtpv2_ext_tra_info_loi_pcf_n5,
13015 { "N5", "gtpv2.ext_tra_info_loi.pcf.n5",
13016 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13018 },
13019 { &hf_gtpv2_ext_tra_info_loi_smf_s5_c,
13020 { "S5-C", "gtpv2.ext_tra_info_loi.smf.s5_c",
13021 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
13022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13023 },
13024 { &hf_gtpv2_ext_tra_info_loi_smf_n11,
13025 { "N11", "gtpv2.ext_tra_info_loi.smf.n11",
13026 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
13027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13028 },
13029 { &hf_gtpv2_ext_tra_info_loi_smf_n10,
13030 { "N10", "gtpv2.ext_tra_info_loi.smf.n10",
13031 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13033 },
13034 { &hf_gtpv2_ext_tra_info_loi_smf_n7,
13035 { "N7", "gtpv2.ext_tra_info_loi.smf.n7",
13036 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13038 },
13039 { &hf_gtpv2_ext_tra_info_loi_smf_n4,
13040 { "N4", "gtpv2.ext_tra_info_loi.smf.n4",
13041 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13043 },
13044 { &hf_gtpv2_ext_tra_info_loi_upf_n4,
13045 { "N4", "gtpv2.ext_tra_info_loi.upf.n4",
13046 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13048 },
13049 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c,
13050 { "E1-C", "gtpv2.ext_tra_info_loi.ng_ran_node.e1_c",
13051 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
13052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13053 },
13054 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c,
13055 { "F1-C", "gtpv2.ext_tra_info_loi.ng_ran_node.f1_c",
13056 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
13057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13058 },
13059 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu,
13060 { "Uu", "gtpv2.ext_tra_info_loi.ng_ran_node.uu",
13061 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13063 },
13064 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c,
13065 { "Xn-C", "gtpv2.ext_tra_info_loi.ng_ran_node.xn_c",
13066 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13068 },
13069 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c,
13070 { "NG-C", "gtpv2.ext_tra_info_loi.ng_ran_node.ng_c",
13071 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13073 },
13074 { &hf_gtpv2_nr_add_exception_rpts,
13075 { "Number of additional exception reports", "gtpv2.r_add_exception_rpts",
13076 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13078 },
13079 { &hf_gtpv2_nr_ul_pkts_all,
13080 { "Number of Uplink packets allowed", "gtpv2.nr_ul_pkts_all",
13081 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13083 },
13084 { &hf_gtpv2_nr_dl_pkts_all,
13085 { "Number of Downlink packets allowed", "gtpv2.nr_dl_pkts_all",
13086 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13088 },
13089 { &hf_apn_rte_cntrl_status_val_time,
13090 { "APN Rate Control Status validity Time", "gtpv2.pn_rte_cntrl_status_val_time",
13091 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0),0x0,
13092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13093 },
13094 { &hf_gtpv2_max_pkt_loss_rte_ul_flg,
13095 { "UL", "gtpv2.max_pkt_loss_rte_ul_flg",
13096 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
13097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13098 },
13099 { &hf_gtpv2_max_pkt_loss_rte_dl_flg,
13100 { "DL", "gtpv2.max_pkt_loss_rte_dl_flg",
13101 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
13102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13103 },
13104 { &hf_gtpv2_max_pkt_loss_rte_ul,
13105 { "Maximum Packet Loss Rate UL", "gtpv2.max_pkt_loss_rte_ul",
13106 FT_UINT16, BASE_CUSTOM, CF_FUNC(value_in_tenth_of_percent_fmt)((const void *) (size_t) (value_in_tenth_of_percent_fmt)), 0x0,
13107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13108 },
13109 { &hf_gtpv2_max_pkt_loss_rte_dl,
13110 { "Maximum Packet Loss Rate DL", "gtpv2.max_pkt_loss_rte_dl",
13111 FT_UINT16, BASE_CUSTOM, CF_FUNC(value_in_tenth_of_percent_fmt)((const void *) (size_t) (value_in_tenth_of_percent_fmt)), 0x0,
13112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13113 },
13114 { &hf_gtpv2_mm_context_iov_updates_counter,
13115 { "IOV_updates counter", "gtpv2.mm_context.iov_updates_counter",
13116 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13118 },
13119 { &hf_gtpv2_mm_context_ear_len,
13120 { "Length of Extended Access Restriction Data", "gtpv2.mm_context.ear_len",
13121 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13123 },
13124 { &hf_gtpv2_node_number_len,
13125 { "Length", "gtpv2.node_number.len",
13126 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13128 },
13129 { &hf_gtpv2_additional_rrm_policy_index,
13130 { "Additional RRM Policy Index", "gtpv2.additional_rrm_policy_index",
13131 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13133 },
13134 { &hf_gtpv2_group_id,
13135 { "Group ID", "gtpv2.group_id",
13136 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13138 },
13139 { &hf_gtpv2_ie_up_security_policy_up_ip_policy,
13140 { "UP IP Policy", "gtpv2.ie_up_security_policy.up_ip_policy",
13141 FT_UINT8, BASE_DEC, VALS(gtpv2_up_ip_policy_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_up_ip_policy_vals
))))
, 0x3,
13142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13143 },
13144 { &hf_gtpv2_ie_pscell_id_spare,
13145 { "Spare", "gtpv2.pscell_id.spare",
13146 FT_UINT40, BASE_DEC, NULL((void*)0), 0xF000000000,
13147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13148 },
13149 { &hf_gtpv2_ie_pscell_id_nr_cgi,
13150 { "NR CGI", "gtpv2.pscell_id.nr_cgi",
13151 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0FFFFFFFFF,
13152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13153 },
13154 { &hf_gtpv2_ie_up_security_policy_spare,
13155 { "Spare", "gtpv2.up_security_policy.spare",
13156 FT_UINT8, BASE_DEC, NULL((void*)0), 0xFC,
13157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13158 },
13159 { &hf_gtpv2_nf_instance_id_nf_instance_id,
13160 { "NF Instance ID", "gtpv2.nf_instance_id_nf_instance_id",
13161 FT_GUID, BASE_NONE, NULL((void*)0), 0x0,
13162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
13163 },
13164 { &hf_gtpv2_nf_timer_in_seconds_timer_value,
13165 { "Timer in Seconds", "gtpv2.timer_in_seconds_timer_value",
13166 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
13168 },
13169 };
13170
13171 /* Setup protocol subtree array */
13172#define GTPV2_NUM_INDIVIDUAL_ELEMS85 85
13173 static int *ett_gtpv2_array[GTPV2_NUM_INDIVIDUAL_ELEMS85 + NUM_GTPV2_IES256];
13174
13175 ett_gtpv2_array[0] = &ett_gtpv2;
13176 ett_gtpv2_array[1] = &ett_gtpv2_flags;
13177 ett_gtpv2_array[2] = &ett_gtpv2_uli_flags;
13178 ett_gtpv2_array[3] = &ett_gtpv2_uli_field;
13179 ett_gtpv2_array[4] = &ett_gtpv2_bearer_ctx;
13180 ett_gtpv2_array[5] = &ett_gtpv2_PDN_conn;
13181 ett_gtpv2_array[6] = &ett_gtpv2_overload_control_information;
13182 ett_gtpv2_array[7] = &ett_gtpv2_mm_context_flag;
13183 ett_gtpv2_array[8] = &ett_gtpv2_pdn_numbers_nsapi;
13184 ett_gtpv2_array[9] = &ett_gtpv2_tra_info_trigg;
13185 ett_gtpv2_array[10] = &ett_gtpv2_tra_info_trigg_msc_server;
13186 ett_gtpv2_array[11] = &ett_gtpv2_tra_info_trigg_mgw;
13187 ett_gtpv2_array[12] = &ett_gtpv2_tra_info_trigg_sgsn;
13188 ett_gtpv2_array[13] = &ett_gtpv2_tra_info_trigg_ggsn;
13189 ett_gtpv2_array[14] = &ett_gtpv2_tra_info_trigg_bm_sc;
13190 ett_gtpv2_array[15] = &ett_gtpv2_tra_info_trigg_sgw_mme;
13191 ett_gtpv2_array[16] = &ett_gtpv2_tra_info_trigg_sgw;
13192 ett_gtpv2_array[17] = &ett_gtpv2_tra_info_trigg_pgw;
13193 ett_gtpv2_array[18] = &ett_gtpv2_tra_info_interfaces;
13194 ett_gtpv2_array[19] = &ett_gtpv2_tra_info_interfaces_imsc_server;
13195 ett_gtpv2_array[20] = &ett_gtpv2_tra_info_interfaces_lmgw;
13196 ett_gtpv2_array[21] = &ett_gtpv2_tra_info_interfaces_lsgsn;
13197 ett_gtpv2_array[22] = &ett_gtpv2_tra_info_interfaces_lggsn;
13198 ett_gtpv2_array[23] = &ett_gtpv2_tra_info_interfaces_lrnc;
13199 ett_gtpv2_array[24] = &ett_gtpv2_tra_info_interfaces_lbm_sc;
13200 ett_gtpv2_array[25] = &ett_gtpv2_tra_info_interfaces_lmme;
13201 ett_gtpv2_array[26] = &ett_gtpv2_tra_info_interfaces_lsgw;
13202 ett_gtpv2_array[27] = &ett_gtpv2_tra_info_interfaces_lpdn_gw;
13203 ett_gtpv2_array[28] = &ett_gtpv2_tra_info_interfaces_lpdn_lenb;
13204 ett_gtpv2_array[29] = &ett_gtpv2_tra_info_ne_types;
13205 ett_gtpv2_array[30] = &ett_gtpv2_rai;
13206 ett_gtpv2_array[31] = &ett_gtpv2_stn_sr;
13207 ett_gtpv2_array[32] = &ett_gtpv2_ms_mark;
13208 ett_gtpv2_array[33] = &ett_gtpv2_supp_codec_list;
13209 ett_gtpv2_array[34] = &ett_gtpv2_bss_con;
13210 ett_gtpv2_array[35] = &ett_gtpv2_utran_con;
13211 ett_gtpv2_array[36] = &ett_gtpv2_eutran_con;
13212 ett_gtpv2_array[37] = &ett_gtpv2_son_con;
13213 ett_gtpv2_array[38] = &ett_gtpv2_endc_son_con;
13214 ett_gtpv2_array[39] = &ett_gtpv2_intersys_son_con;
13215 ett_gtpv2_array[40] = &ett_gtpv2_mm_context_auth_qua;
13216 ett_gtpv2_array[41] = &ett_gtpv2_mm_context_auth_qui;
13217 ett_gtpv2_array[42] = &ett_gtpv2_mm_context_auth_tri;
13218 ett_gtpv2_array[43] = &ett_gtpv2_mm_context_net_cap;
13219 ett_gtpv2_array[44] = &ett_gtpv2_ms_network_capability;
13220 ett_gtpv2_array[45] = &ett_gtpv2_mm_context_sc;
13221 ett_gtpv2_array[46] = &ett_gtpv2_vd_pref;
13222 ett_gtpv2_array[47] = &ett_gtpv2_access_rest_data;
13223 ett_gtpv2_array[48] = &ett_gtpv2_qua;
13224 ett_gtpv2_array[49] = &ett_gtpv2_qui;
13225 ett_gtpv2_array[50] = &ett_gtpv2_preaa_tais;
13226 ett_gtpv2_array[51] = &ett_gtpv2_preaa_menbs;
13227 ett_gtpv2_array[52] = &ett_gtpv2_preaa_henbs;
13228 ett_gtpv2_array[53] = &ett_gtpv2_preaa_ecgis;
13229 ett_gtpv2_array[54] = &ett_gtpv2_preaa_rais;
13230 ett_gtpv2_array[55] = &ett_gtpv2_preaa_sais;
13231 ett_gtpv2_array[56] = &ett_gtpv2_preaa_cgis;
13232 ett_gtpv2_array[57] = &ett_gtpv2_load_control_inf;
13233 ett_gtpv2_array[58] = &ett_gtpv2_eci;
13234 ett_gtpv2_array[59] = &ett_gtpv2_twan_flags;
13235 ett_gtpv2_array[60] = &ett_gtpv2_ciot_support_ind;
13236 ett_gtpv2_array[61] = &ett_gtpv2_rohc_profile_flags;
13237 ett_gtpv2_array[62] = &ett_gtpv2_secondary_rat_usage_data_report;
13238 ett_gtpv2_array[63] = &ett_gtpv2_pres_rep_area_info;
13239 ett_gtpv2_array[64] = &ett_gtpv2_preaa_ext_menbs;
13240 ett_gtpv2_array[65] = &ett_gtpv2_ue_nr_sec_cap_len;
13241 ett_gtpv2_array[66] = &ett_gtpv2_apn_rte_ctrl_sts_len;
13242 ett_gtpv2_array[67] = &ett_gtpv2_if_mgcs;
13243 ett_gtpv2_array[68] = &ett_gtpv2_if_mgw;
13244 ett_gtpv2_array[69] = &ett_gtpv2_if_sgsn;
13245 ett_gtpv2_array[70] = &ett_gtpv2_if_ggsn;
13246 ett_gtpv2_array[71] = &ett_gtpv2_if_rnc;
13247 ett_gtpv2_array[72] = &ett_gtpv2_if_bm_sc;
13248 ett_gtpv2_array[73] = &ett_gtpv2_if_mme;
13249 ett_gtpv2_array[74] = &ett_gtpv2_if_sgw;
13250 ett_gtpv2_array[75] = &ett_gtpv2_if_pdn_gw;
13251 ett_gtpv2_array[76] = &ett_gtpv2_if_enb;
13252 ett_gtpv2_array[77] = &ett_gtpv2_if_hss;
13253 ett_gtpv2_array[78] = &ett_gtpv2_if_eir;
13254 ett_gtpv2_array[79] = &ett_gtpv2_if_amf;
13255 ett_gtpv2_array[80] = &ett_gtpv2_if_pcf;
13256 ett_gtpv2_array[81] = &ett_gtpv2_if_smf;
13257 ett_gtpv2_array[82] = &ett_gtpv2_if_upf;
13258 ett_gtpv2_array[83] = &ett_gtpv2_if_ng_ran_node;
13259 ett_gtpv2_array[84] = &ett_gtpv2_PGW_change_info;
13260 last_offset = GTPV2_NUM_INDIVIDUAL_ELEMS85;
13261
13262 for (i=0; i < NUM_GTPV2_IES256; i++, last_offset++)
13263 {
13264 ett_gtpv2_array[last_offset] = &ett_gtpv2_ies[i];
13265 }
13266
13267 static ei_register_info ei[] = {
13268 { &ei_gtpv2_ie_data_not_dissected, { "gtpv2.ie_data_not_dissected", PI_UNDECODED0x05000000, PI_NOTE0x00400000, "IE data not dissected yet", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13269 { &ei_gtpv2_ie_len_invalid, { "gtpv2.ie_len_invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000, "Wrong length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13270 { &ei_gtpv2_source_type_unknown, { "gtpv2.source_type.unknown", PI_PROTOCOL0x09000000, PI_ERROR0x00800000, "Unknown source type", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13271 { &ei_gtpv2_fq_csid_type_bad, { "gtpv2.fq_csid_type.unknown", PI_PROTOCOL0x09000000, PI_ERROR0x00800000, "Wrong Node-ID Type", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13272 { &ei_gtpv2_mbms_session_duration_days, { "gtpv2.mbms_session_duration_days.invalid", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "Days out of allowed range", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13273 { &ei_gtpv2_mbms_session_duration_secs, { "gtpv2.mbms_session_duration_secs.unknown", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "Seconds out of allowed range", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13274 { &ei_gtpv2_ie, { "gtpv2.ie_type.reserved", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "IE type Zero is Reserved and should not be used", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
13275 { &ei_gtpv2_int_size_not_handled, { "gtpv2.ie_type.int_size_not_handled", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "Integer size not handled yet", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
} },
13276 { &ei_gtpv2_apn_too_long, { "gtpv2.apn_too_long", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "APN encoding has more than 100 octets", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
} },
13277 };
13278
13279 expert_module_t* expert_gtpv2;
13280 module_t *gtpv2_module;
13281
13282 static const enum_val_t decode_srvcc_ps_to_cs_trans_cont_vals[] = {
13283 {"no", "Don't decode", PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0},
13284 {"utran", "Assume UTRAN target", PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1},
13285 {NULL((void*)0), NULL((void*)0), -1}
13286 };
13287
13288 proto_gtpv2 = proto_register_protocol("GPRS Tunneling Protocol V2", "GTPv2", "gtpv2");
13289
13290 gtpv2_module = prefs_register_protocol(proto_gtpv2, NULL((void*)0));
13291 prefs_register_enum_preference(gtpv2_module, "decode_srvcc_p2c_trans_cont_target",
13292 "Decode SRVCC PS-to-CS Transparent Containers",
13293 "Use this setting to decode the Transparent Containers in the SRVCC PS-to-CS messages.\n"
13294 "This is needed until there's a reliable way to determine the contents of the transparent containers.",
13295 &pref_decode_srvcc_p2c_trans_cont, decode_srvcc_ps_to_cs_trans_cont_vals, false0);
13296
13297 prefs_register_uint_preference(gtpv2_module, "pair_max_interval", "Max interval allowed in pair matching", "Request/reply pair matches only if their timestamps are closer than that value, in ms (default 0, i.e. don't use timestamps)", 10, &pref_pair_matching_max_interval_ms);
13298
13299 proto_register_field_array(proto_gtpv2, hf_gtpv2, array_length(hf_gtpv2)(sizeof (hf_gtpv2) / sizeof (hf_gtpv2)[0]));
13300 proto_register_subtree_array(ett_gtpv2_array, array_length(ett_gtpv2_array)(sizeof (ett_gtpv2_array) / sizeof (ett_gtpv2_array)[0]));
13301 expert_gtpv2 = expert_register_protocol(proto_gtpv2);
13302 expert_register_field_array(expert_gtpv2, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
13303
13304 register_dissector("gtpv2", dissect_gtpv2, proto_gtpv2);
13305 /* Dissector table for private extensions */
13306 gtpv2_priv_ext_dissector_table = register_dissector_table("gtpv2.priv_ext", "GTPv2 Private Extension", proto_gtpv2, FT_UINT16, BASE_DEC);
13307
13308 gtpv2_tap = register_tap("gtpv2");
13309
13310 register_srt_table(proto_gtpv2, NULL((void*)0), 1, gtpv2_stat_packet, gtpv2_stat_init, NULL((void*)0));
13311}
13312
13313void
13314proto_reg_handoff_gtpv2(void)
13315{
13316 //static bool Initialized = false;
13317
13318 nas_eps_handle = find_dissector_add_dependency("nas-eps", proto_gtpv2);
13319
13320 radius_register_avp_dissector(VENDOR_THE3GPP10415, 22, dissect_radius_user_loc);
13321
13322 /* AVP Code: 22 3GPP-User-Location-Info */
13323 dissector_add_uint("diameter.3gpp", 22, create_dissector_handle(dissect_diameter_3gpp_uli, proto_gtpv2));
13324
13325 /* AVP Code: 2820 Presence-Reporting-Area-Elements-List */
13326 dissector_add_uint("diameter.3gpp", 2820, create_dissector_handle(dissect_diameter_3gpp_presence_reporting_area_elements_list, proto_gtpv2));
13327
13328}
13329
13330/*
13331 * Editor modelines
13332 *
13333 * Local Variables:
13334 * c-basic-offset: 4
13335 * tab-width: 8
13336 * indent-tabs-mode: nil
13337 * End:
13338 *
13339 * ex: set shiftwidth=4 tabstop=8 expandtab:
13340 * :indentSize=4:tabSize=8:noTabs=true:
13341 */