Bug Summary

File:epan/dissectors/packet-gtpv2.c
Warning:line 3283, column 9
Value stored to 'item' is never read

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-nonliteral -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/2026-01-16-100349-3603-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 <gerald@wireshark.org>
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_tai_tac_name;
463static int hf_gtpv2_5gs_tai_tac;
464static int hf_gtpv2_ecgi_eci;
465static int hf_gtpv2_ncgi_nrci;
466static int hf_gtpv2_uli_lai_lac;
467static int hf_gtpv2_ecgi_eci_spare;
468static int hf_gtpv2_nsapi;
469static int hf_gtpv2_bearer_control_mode;
470
471static int hf_gtpv2_bss_container_phx;
472static int hf_gtpv2_bss_con_sapi_flg;
473static int hf_gtpv2_bss_con_rp_flg;
474static int hf_gtpv2_bss_con_pfi_flg;
475static int hf_gtpv2_bss_con_pfi;
476static int hf_gtpv2_bss_con_rp;
477static int hf_gtpv2_bss_con_sapi;
478static int hf_gtpv2_bss_con_xid_len;
479static int hf_gtpv2_bss_con_xid;
480static int hf_gtpv2_home_enodeb_id;
481static int hf_gtpv2_tac;
482
483/* MBMS */
484static int hf_gtpv2_mbms_service_area_nr;
485static int hf_gtpv2_mbms_service_area_id;
486static int hf_gtpv2_mbms_session_id;
487static int hf_gtpv2_mbms_flow_id;
488static int hf_gtpv2_cteid;
489static int hf_gtpv2_ip_addr_type;
490static int hf_gtpv2_ip_addr_len;
491static int hf_gtpv2_mbms_ip_mc_dist_addrv4;
492static int hf_gtpv2_mbms_ip_mc_dist_addrv6;
493static int hf_gtpv2_mbms_ip_mc_src_addrv4;
494static int hf_gtpv2_mbms_ip_mc_src_addrv6;
495static int hf_gtpv2_mbms_hc_indicator;
496static int hf_gtpv2_mbms_dist_indication;
497static int hf_gtpv2_subscriber_rfsp;
498static int hf_gtpv2_rfsp_inuse;
499static int hf_gtpv2_mbms_service_id;
500static int hf_gtpv2_add_flags_for_srvcc_ics;
501static int hf_gtpv2_vsrvcc_flag;
502static int hf_gtpv2_abs_time_mbms_data;
503static int hf_gtpv2_henb_info_report_fti;
504static int hf_gtpv2_ip4cp_subnet_prefix_len;
505static int hf_gtpv2_ip4cp_ipv4;
506static int hf_gtpv2_change_report_flags_sncr;
507static int hf_gtpv2_change_report_flags_tzcr;
508static int hf_gtpv2_action_indication_val;
509static int hf_gtpv2_uli_timestamp;
510static int hf_gtpv2_mbms_session_duration_days;
511static int hf_gtpv2_mbms_session_duration_secs;
512static int hf_gtpv2_csg_id;
513static int hf_gtpv2_cmi;
514static int hf_gtpv2_service_indicator;
515static int hf_gtpv2_detach_type;
516static int hf_gtpv2_ldn;
517static int hf_gtpv2_node_features_prn;
518static int hf_gtpv2_node_features_mabr;
519static int hf_gtpv2_node_features_ntsr;
520static int hf_gtpv2_node_features_ciot;
521static int hf_gtpv2_node_features_s1un;
522static int hf_gtpv2_node_features_eth;
523static int hf_gtpv2_node_features_mtedt;
524static int hf_gtpv2_node_features_psset;
525static int hf_gtpv2_time_to_data_xfer;
526static int hf_gtpv2_arp_pvi;
527static int hf_gtpv2_arp_pl;
528static int hf_gtpv2_arp_pci;
529static int hf_gtpv2_timer_unit;
530static int hf_gtpv2_throttling_delay_unit;
531static int hf_gtpv2_throttling_delay_value;
532static int hf_gtpv2_timer_value;
533static int hf_gtpv2_lapi;
534
535static int hf_gtpv2_pres_rep_area_act_inapra;
536static int hf_gtpv2_pres_rep_area_action;
537static int hf_gtpv2_pres_rep_area_id;
538static int hf_gtpv2_pres_rep_area_act_no_tai;
539static int hf_gtpv2_pres_rep_area_act_no_rai;
540static int hf_gtpv2_pres_rep_area_act_no_m_enodeb;
541static int hf_gtpv2_pres_rep_area_act_no_h_enodeb;
542static int hf_gtpv2_pres_rep_area_act_no_ecgi;
543static int hf_gtpv2_pres_rep_area_act_no_sai;
544static int hf_gtpv2_pres_rep_area_act_no_cgi;
545static int hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb;
546static int hf_gtpv2_ksi_ps;
547static int hf_gtpv2_ck_ps;
548static int hf_gtpv2_ik_ps;
549static int hf_gtpv2_kc_ps;
550static int hf_gtpv2_cksn_ps;
551
552static int hf_gtpv2_pres_rep_area_info_id;
553static int hf_gtpv2_pres_rep_area_info_additional_id;
554static int hf_gtpv2_pres_rep_area_info_flags;
555static int hf_gtpv2_pres_rep_area_info_flags_no_inapra;
556static int hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare;
557static int hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare;
558static int hf_gtpv2_pres_rep_area_info_flags_b3_inapra;
559static int hf_gtpv2_pres_rep_area_info_flags_b2_apra;
560static int hf_gtpv2_pres_rep_area_info_flags_b1_opra;
561static int hf_gtpv2_pres_rep_area_info_flags_b0_ipra;
562
563/* Generated from convert_proto_tree_add_text.pl */
564static int hf_gtpv2_downlink_subscribed_ue_ambr;
565static int hf_gtpv2_mm_context_sres;
566static int hf_gtpv2_iksrvcc;
567static int hf_gtpv2_nsapi08;
568static int hf_gtpv2_voice_domain_and_ue_usage_setting;
569static int hf_gtpv2_ue_radio_capability_for_paging_information;
570static int hf_gtpv2_port_number;
571static int hf_gtpv2_uplink_used_ue_ambr;
572static int hf_gtpv2_tmsi_bytes;
573static int hf_gtpv2_dl_gtp_u_sequence_number;
574static int hf_gtpv2_mm_context_nh;
575static int hf_gtpv2_teid_c_spare;
576static int hf_gtpv2_uplink_subscribed_ue_ambr;
577static int hf_gtpv2_transparent_container;
578static int hf_gtpv2_packet_flow_id;
579static int hf_gtpv2_utran_srvcc_ik_cs;
580static int hf_gtpv2_downlink_used_ue_ambr;
581static int hf_gtpv2_hop_counter;
582static int hf_gtpv2_ul_gtp_u_sequence_number;
583static int hf_gtpv2_authentication_quadruplets;
584static int hf_gtpv2_utran_srvcc_kc;
585static int hf_gtpv2_spare_bytes;
586static int hf_gtpv2_metric;
587static int hf_gtpv2_throttling_factor;
588static int hf_gtpv2_relative_capacity;
589static int hf_gtpv2_apn_length;
590static int hf_gtpv2_sequence_number;
591static int hf_gtpv2_receive_n_pdu_number;
592static int hf_gtpv2_trace_id;
593static int hf_gtpv2_drx_parameter;
594static int hf_gtpv2_charging_characteristic_remaining_octets;
595static int hf_gtpv2_mm_context_ncc;
596static int hf_gtpv2_proprietary_value;
597static int hf_gtpv2_mobile_station_classmark2;
598static int hf_gtpv2_rrc_container;
599static int hf_gtpv2_send_n_pdu_number;
600static int hf_gtpv2_mobile_station_classmark3;
601static int hf_gtpv2_eps_bearer_id_number;
602static int hf_gtpv2_geographic_location;
603static int hf_gtpv2_cn_id;
604static int hf_gtpv2_utran_srvcc_ck_cs;
605static int hf_gtpv2_authentication_quintuplets;
606static int hf_gtpv2_serving_gw_address_length;
607static int hf_gtpv2_supported_codec_list;
608static int hf_gtpv2_cksrvcc;
609static int hf_gtpv2_mm_context_kc;
610static int hf_gtpv2_dl_pdcp_sequence_number;
611static int hf_gtpv2_ul_pdcp_sequence_number;
612static int hf_gtpv2_fq_csid_node_id;
613static int hf_gtpv2_fq_csid_mcc_mnc;
614static int hf_gtpv2_ppi_value;
615static int hf_gtpv2_ppi_flag;
616static int hf_gtpv2_session;
617static int hf_gtpv2_twan_id_ts;
618static int hf_gtpv2_twan_flags;
619static int hf_gtpv2_twan_bssidi;
620static int hf_gtpv2_twan_civai;
621static int hf_gtpv2_twan_plmni;
622static int hf_gtpv2_twan_opnai;
623static int hf_gtpv2_twan_laii;
624static int hf_gtpv2_twan_ssid_len;
625static int hf_gtpv2_twan_ssid;
626static int hf_gtpv2_twan_bssid;
627static int hf_gtpv2_twan_civa_len;
628static int hf_gtpv2_twan_civa;
629static int hf_gtpv2_twan_plmnid;
630static int hf_gtpv2_twan_op_name_len;
631static int hf_gtpv2_twan_op_name;
632static int hf_gtpv2_twan_relay_id_type;
633static int hf_gtpv2_twan_relay_id_len;
634static int hf_gtpv2_twan_relay_id;
635static int hf_gtpv2_twan_relay_id_ipv4;
636static int hf_gtpv2_twan_relay_id_ipv6;
637static int hf_gtpv2_twan_circuit_id_len;
638static int hf_gtpv2_twan_circuit_id;
639static int hf_gtpv2_integer_number_val;
640static int hf_gtpv2_maximum_wait_time;
641static int hf_gtpv2_dl_buf_sug_pkt_cnt;
642static int hf_gtpv2_ue_usage_type;
643static int hf_gtpv2_rem_run_serv_gap_t;
644static int hf_gtpv2_ran_nas_protocol_type;
645static int hf_gtpv2_ran_nas_cause_type;
646static int hf_gtpv2_ran_nas_cause_value;
647static int hf_gtpv2_emm_cause;
648static int hf_gtpv2_esm_cause;
649static int hf_gtpv2_diameter_cause;
650static int hf_gtpv2_ikev2_cause;
651
652static int hf_gtpv2_ciot_support_ind;
653static int hf_gtpv2_ciot_support_ind_spare_bits;
654static int hf_gtpv2_ciot_support_ind_bit4;
655static int hf_gtpv2_ciot_support_ind_bit3;
656static int hf_gtpv2_ciot_support_ind_bit2;
657static int hf_gtpv2_ciot_support_ind_bit1;
658
659static int hf_gtpv2_length_of_node_name;
660static int hf_gtpv2_node_name;
661static int hf_gtpv2_length_of_node_realm;
662static int hf_gtpv2_node_realm;
663static int hf_gtpv2_ms_ts;
664static int hf_gtpv2_origination_ts;
665static int hf_gtpv2_mon_event_inf_nsur;
666static int hf_gtpv2_mon_event_inf_nsui;
667static int hf_gtpv2_mon_event_inf_nscf;
668static int hf_gtpv2_mon_event_inf_srie;
669static int hf_gtpv2_mon_event_inf_scef_reference_id;
670static int hf_gtpv2_mon_event_inf_scef_reference_id_ext;
671static int hf_gtpv2_mon_event_inf_scef_id_length;
672static int hf_gtpv2_mon_event_inf_scef_id;
673static int hf_gtpv2_mon_event_inf_remaining_number_of_reports;
674static int hf_gtpv2_mon_event_ext_inf_lrtp;
675static int hf_gtpv2_mon_event_ext_inf_srie;
676static int hf_gtpv2_mon_event_ext_inf_scef_reference_id;
677static int hf_gtpv2_mon_event_ext_inf_scef_id_length;
678static int hf_gtpv2_mon_event_ext_inf_scef_id;
679static int hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type;
680static int hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext;
681static int hf_gtpv2_rohc_profiles_bit0;
682static int hf_gtpv2_rohc_profiles_bit1;
683static int hf_gtpv2_rohc_profiles_bit2;
684static int hf_gtpv2_rohc_profiles_bit3;
685static int hf_gtpv2_rohc_profiles_bit4;
686static int hf_gtpv2_rohc_profiles_bit5;
687static int hf_gtpv2_rohc_profiles_bit6;
688static int hf_gtpv2_rohc_profiles_bit7;
689static int hf_gtpv2_max_cid;
690static int hf_gtpv2_uplink_rate_limit;
691static int hf_gtpv2_downlink_rate_limit;
692static int hf_gtpv2_timestamp_value;
693static int hf_gtpv2_counter_value;
694static int hf_gtpv2_mapped_ue_usage_type;
695static int hf_gtpv2_uli_flags;
696static int hf_gtpv2_rohc_profile_flags;
697static int hf_gtpv2_dcnr;
698
699static int hf_gtpv2_secondary_rat_usage_data_report;
700static int hf_gtpv2_secondary_rat_usage_data_report_spare_bits;
701static int hf_gtpv2_secondary_rat_usage_data_report_bit3;
702static int hf_gtpv2_secondary_rat_usage_data_report_bit2;
703static int hf_gtpv2_secondary_rat_usage_data_report_bit1;
704static int hf_gtpv2_secondary_rat_usage_data_report_rat_type;
705static int hf_gtpv2_secondary_rat_usage_data_report_start_timestamp;
706static int hf_gtpv2_secondary_rat_usage_data_report_end_timestamp;
707static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl;
708static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul;
709static int hf_gtpv2_secondary_rat_usage_data_report_srudn_length;
710static int hf_gtpv2_secondary_rat_usage_data_report_srudn_value;
711static int hf_gtpv2_csg_info_rep_action_b0;
712static int hf_gtpv2_csg_info_rep_action_b1;
713static int hf_gtpv2_csg_info_rep_action_b2;
714static int hf_gtpv2_gnodeb_id_len;
715static int hf_gtpv2_gnodeb_id;
716static int hf_gtpv2_macro_ng_enodeb_id;
717static int hf_gtpv2_5gs_tac;
718static int hf_gtpv2_en_gnb_id_len;
719static int hf_gtpv2_5tac;
720static int hf_gtpv2_etac;
721static int hf_gtpv2_en_gnb_id;
722static int hf_gtpv2_trig_event_len;
723static int hf_gtpv2_ne_list_len;
724static int hf_gtpv2_ses_trs_depth;
725static int hf_gtpv2_list_of_if_len;
726static int hf_gtpv2_trs_coll_ip_addr_len;
727static int hf_gtpv2_trs_coll_ipv4_addr;
728static int hf_gtpv2_trs_coll_ipv6_addr;
729
730static int hf_gtpv2_ext_tra_info_loi_mscs_cap;
731static int hf_gtpv2_ext_tra_info_loi_mscs_map_f;
732static int hf_gtpv2_ext_tra_info_loi_mscs_map_e;
733static int hf_gtpv2_ext_tra_info_loi_mscs_map_b;
734static int hf_gtpv2_ext_tra_info_loi_mscs_map_g;
735static int hf_gtpv2_ext_tra_info_loi_mscs_mc;
736static int hf_gtpv2_ext_tra_info_loi_mscs_iu;
737static int hf_gtpv2_ext_tra_info_loi_mscs_a;
738static int hf_gtpv2_ext_tra_info_loi_mscs_map_c;
739static int hf_gtpv2_ext_tra_info_loi_mscs_map_d;
740static int hf_gtpv2_ext_tra_info_loi_mgw_iuup;
741static int hf_gtpv2_ext_tra_info_loi_mgw_nbup;
742static int hf_gtpv2_ext_tra_info_loi_mgw_mc;
743static int hf_gtpv2_ext_tra_info_loi_sgsn_ge;
744static int hf_gtpv2_ext_tra_info_loi_sgsn_gs;
745static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gf;
746static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gd;
747static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gr;
748static int hf_gtpv2_ext_tra_info_loi_sgsn_gn;
749static int hf_gtpv2_ext_tra_info_loi_sgsn_iu;
750static int hf_gtpv2_ext_tra_info_loi_sgsn_gb;
751static int hf_gtpv2_ext_tra_info_loi_sgsn_s13;
752static int hf_gtpv2_ext_tra_info_loi_sgsn_s3;
753static int hf_gtpv2_ext_tra_info_loi_sgsn_s4;
754static int hf_gtpv2_ext_tra_info_loi_sgsn_s6d;
755static int hf_gtpv2_ext_tra_info_loi_ggsn_gmb;
756static int hf_gtpv2_ext_tra_info_loi_ggsn_gi;
757static int hf_gtpv2_ext_tra_info_loi_ggsn_gn;
758static int hf_gtpv2_ext_tra_info_loi_rnc_uu;
759static int hf_gtpv2_ext_tra_info_loi_rnc_iub;
760static int hf_gtpv2_ext_tra_info_loi_rnc_iur;
761static int hf_gtpv2_ext_tra_info_loi_rnc_iu;
762static int hf_gtpv2_ext_tra_info_loi_bm_sc_gmb;
763static int hf_gtpv2_ext_tra_info_loi_mme_s13;
764static int hf_gtpv2_ext_tra_info_loi_mme_s11;
765static int hf_gtpv2_ext_tra_info_loi_mme_s10;
766static int hf_gtpv2_ext_tra_info_loi_mme_s6a;
767static int hf_gtpv2_ext_tra_info_loi_mme_s3;
768static int hf_gtpv2_ext_tra_info_loi_mme_s1_mme;
769static int hf_gtpv2_ext_tra_info_loi_sgw_gxc;
770static int hf_gtpv2_ext_tra_info_loi_sgw_s11;
771static int hf_gtpv2_ext_tra_info_loi_sgw_s8b;
772static int hf_gtpv2_ext_tra_info_loi_sgw_s5;
773static int hf_gtpv2_ext_tra_info_loi_sgw_s4;
774static int hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi;
775static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b;
776static int hf_gtpv2_ext_tra_info_loi_pdn_gw_gx;
777static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b;
778static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s5;
779static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c;
780static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b;
781static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a;
782static int hf_gtpv2_ext_tra_info_loi_enb_uu;
783static int hf_gtpv2_ext_tra_info_loi_enb_x2;
784static int hf_gtpv2_ext_tra_info_loi_enb_s1_mme;
785static int hf_gtpv2_ext_tra_info_loi_hss_sh;
786static int hf_gtpv2_ext_tra_info_loi_hss_s6a;
787static int hf_gtpv2_ext_tra_info_loi_hss_s6d;
788static int hf_gtpv2_ext_tra_info_loi_hss_cx;
789static int hf_gtpv2_ext_tra_info_loi_hss_map_gr;
790static int hf_gtpv2_ext_tra_info_loi_hss_map_gc;
791static int hf_gtpv2_ext_tra_info_loi_hss_map_d;
792static int hf_gtpv2_ext_tra_info_loi_hss_map_c;
793static int hf_gtpv2_ext_tra_info_loi_eir_map_gf;
794static int hf_gtpv2_ext_tra_info_loi_eir_s13p;
795static int hf_gtpv2_ext_tra_info_loi_eir_s13;
796static int hf_gtpv2_ext_tra_info_loi_eir_map_f;
797static int hf_gtpv2_ext_tra_info_loi_amf_n20;
798static int hf_gtpv2_ext_tra_info_loi_amf_n15;
799static int hf_gtpv2_ext_tra_info_loi_amf_n14;
800static int hf_gtpv2_ext_tra_info_loi_amf_n12;
801static int hf_gtpv2_ext_tra_info_loi_amf_n11;
802static int hf_gtpv2_ext_tra_info_loi_amf_n8;
803static int hf_gtpv2_ext_tra_info_loi_amf_n2;
804static int hf_gtpv2_ext_tra_info_loi_amf_n1;
805static int hf_gtpv2_ext_tra_info_loi_amf_n22;
806static int hf_gtpv2_ext_tra_info_loi_amf_n26;
807static int hf_gtpv2_ext_tra_info_loi_pcf_n15;
808static int hf_gtpv2_ext_tra_info_loi_pcf_n7;
809static int hf_gtpv2_ext_tra_info_loi_pcf_n5;
810static int hf_gtpv2_ext_tra_info_loi_smf_s5_c;
811static int hf_gtpv2_ext_tra_info_loi_smf_n11;
812static int hf_gtpv2_ext_tra_info_loi_smf_n10;
813static int hf_gtpv2_ext_tra_info_loi_smf_n7;
814static int hf_gtpv2_ext_tra_info_loi_smf_n4;
815static int hf_gtpv2_ext_tra_info_loi_upf_n4;
816static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c;
817static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c;
818static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu;
819static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c;
820static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c;
821
822static int hf_gtpv2_nr_dl_pkts_all;
823static int hf_gtpv2_nr_ul_pkts_all;
824static int hf_gtpv2_nr_add_exception_rpts;
825static int hf_apn_rte_cntrl_status_val_time;
826static int hf_gtpv2_max_pkt_loss_rte_ul_flg;
827static int hf_gtpv2_max_pkt_loss_rte_dl_flg;
828static int hf_gtpv2_max_pkt_loss_rte_ul;
829static int hf_gtpv2_max_pkt_loss_rte_dl;
830
831static int hf_gtpv2_mm_context_iov_updates_counter;
832static int hf_gtpv2_mm_context_ear_len;
833static int hf_gtpv2_node_number_len;
834static int hf_gtpv2_additional_rrm_policy_index;
835
836static int hf_gtpv2_group_id;
837
838static int hf_gtpv2_ie_pscell_id_spare;
839static int hf_gtpv2_ie_pscell_id_nr_cgi;
840static int hf_gtpv2_ie_up_security_policy_up_ip_policy;
841static int hf_gtpv2_ie_up_security_policy_spare;
842static int hf_gtpv2_nf_instance_id_nf_instance_id;
843static int hf_gtpv2_nf_timer_in_seconds_timer_value;
844
845
846static int ett_gtpv2;
847static int ett_gtpv2_flags;
848static int ett_gtpv2_uli_flags;
849static int ett_gtpv2_uli_field;
850static int ett_gtpv2_bearer_ctx;
851static int ett_gtpv2_PDN_conn;
852static int ett_gtpv2_overload_control_information;
853static int ett_gtpv2_mm_context_flag;
854static int ett_gtpv2_pdn_numbers_nsapi;
855static int ett_gtpv2_tra_info_trigg;
856static int ett_gtpv2_tra_info_trigg_msc_server;
857static int ett_gtpv2_tra_info_trigg_mgw;
858static int ett_gtpv2_tra_info_trigg_sgsn;
859static int ett_gtpv2_tra_info_trigg_ggsn;
860static int ett_gtpv2_tra_info_trigg_bm_sc;
861static int ett_gtpv2_tra_info_trigg_sgw_mme;
862static int ett_gtpv2_tra_info_trigg_sgw;
863static int ett_gtpv2_tra_info_trigg_pgw;
864static int ett_gtpv2_tra_info_interfaces;
865static int ett_gtpv2_tra_info_interfaces_imsc_server;
866static int ett_gtpv2_tra_info_interfaces_lmgw;
867static int ett_gtpv2_tra_info_interfaces_lsgsn;
868static int ett_gtpv2_tra_info_interfaces_lggsn;
869static int ett_gtpv2_tra_info_interfaces_lrnc;
870static int ett_gtpv2_tra_info_interfaces_lbm_sc;
871static int ett_gtpv2_tra_info_interfaces_lmme;
872static int ett_gtpv2_tra_info_interfaces_lsgw;
873static int ett_gtpv2_tra_info_interfaces_lpdn_gw;
874static int ett_gtpv2_tra_info_interfaces_lpdn_lenb;
875static int ett_gtpv2_tra_info_ne_types;
876static int ett_gtpv2_rai;
877static int ett_gtpv2_ms_mark;
878static int ett_gtpv2_stn_sr;
879static int ett_gtpv2_supp_codec_list;
880static int ett_gtpv2_bss_con;
881static int ett_gtpv2_utran_con;
882static int ett_gtpv2_eutran_con;
883static int ett_gtpv2_son_con;
884static int ett_gtpv2_endc_son_con;
885static int ett_gtpv2_intersys_son_con;
886static int ett_gtpv2_mm_context_auth_qua;
887static int ett_gtpv2_mm_context_auth_qui;
888static int ett_gtpv2_mm_context_auth_tri;
889static int ett_gtpv2_mm_context_net_cap;
890static int ett_gtpv2_ms_network_capability;
891static int ett_gtpv2_mm_context_sc;
892static int ett_gtpv2_vd_pref;
893static int ett_gtpv2_access_rest_data;
894static int ett_gtpv2_qua;
895static int ett_gtpv2_qui;
896static int ett_gtpv2_preaa_tais;
897static int ett_gtpv2_preaa_menbs;
898static int ett_gtpv2_preaa_henbs;
899static int ett_gtpv2_preaa_ecgis;
900static int ett_gtpv2_preaa_rais;
901static int ett_gtpv2_preaa_sais;
902static int ett_gtpv2_preaa_cgis;
903static int ett_gtpv2_load_control_inf;
904static int ett_gtpv2_eci;
905static int ett_gtpv2_twan_flags;
906static int ett_gtpv2_ciot_support_ind;
907static int ett_gtpv2_rohc_profile_flags;
908static int ett_gtpv2_secondary_rat_usage_data_report;
909static int ett_gtpv2_pres_rep_area_info;
910static int ett_gtpv2_preaa_ext_menbs;
911static int ett_gtpv2_ue_nr_sec_cap_len;
912static int ett_gtpv2_apn_rte_ctrl_sts_len;
913static int ett_gtpv2_if_mgcs;
914static int ett_gtpv2_if_mgw;
915static int ett_gtpv2_if_sgsn;
916static int ett_gtpv2_if_ggsn;
917static int ett_gtpv2_if_rnc;
918static int ett_gtpv2_if_bm_sc;
919static int ett_gtpv2_if_mme;
920static int ett_gtpv2_if_sgw;
921static int ett_gtpv2_if_pdn_gw;
922static int ett_gtpv2_if_enb;
923static int ett_gtpv2_if_hss;
924static int ett_gtpv2_if_eir;
925static int ett_gtpv2_if_amf;
926static int ett_gtpv2_if_pcf;
927static int ett_gtpv2_if_smf;
928static int ett_gtpv2_if_upf;
929static int ett_gtpv2_if_ng_ran_node;
930static int ett_gtpv2_PGW_change_info;
931
932
933static expert_field ei_gtpv2_ie_data_not_dissected;
934static expert_field ei_gtpv2_ie_len_invalid;
935static expert_field ei_gtpv2_source_type_unknown;
936static expert_field ei_gtpv2_fq_csid_type_bad;
937static expert_field ei_gtpv2_mbms_session_duration_days;
938static expert_field ei_gtpv2_mbms_session_duration_secs;
939static expert_field ei_gtpv2_ie;
940static expert_field ei_gtpv2_int_size_not_handled;
941static expert_field ei_gtpv2_apn_too_long;
942
943static int gtpv2_tap;
944
945/* Definition of User Location Info (AVP 22) masks */
946#define GTPv2_ULI_CGI_MASK0x01 0x01
947#define GTPv2_ULI_SAI_MASK0x02 0x02
948#define GTPv2_ULI_RAI_MASK0x04 0x04
949#define GTPv2_ULI_TAI_MASK0x08 0x08
950#define GTPv2_ULI_ECGI_MASK0x10 0x10
951#define GTPv2_ULI_LAI_MASK0x20 0x20
952#define GTPv2_ULI_MACRO_eNB_ID_MASK0x40 0x40
953#define GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80 0x80
954
955#define GTPV2_PPI_VAL_MASK0x3F 0x3F
956
957#define GTPV2_SRVCC_PS_TO_CS_REQUEST25 25
958#define GTPV2_SRVCC_PS_TO_CS_RESPONSE26 26
959#define GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27 27
960#define GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28 28
961#define GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29 29
962#define GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30 30
963#define GTPV2_CREATE_SESSION_REQUEST32 32
964#define GTPV2_CREATE_SESSION_RESPONSE33 33
965#define GTPV2_MODIFY_BEARER_REQUEST34 34
966#define GTPV2_MODIFY_BEARER_RESPONSE35 35
967#define GTPV2_DELETE_SESSION_REQUEST36 36
968#define GTPV2_DELETE_SESSION_RESPONSE37 37
969#define GTPV2_REMOTE_UE_REPORT_NOTIFICATION40 40
970#define GTPV2_REMOTE_UE_REPORT_ACKNOWLEDGE41 41
971#define GTPV2_MODIFY_BEARER_COMMAND64 64
972#define GTPV2_MODIFY_BEARER_FAILURE_INDICATION65 65
973#define GTPV2_DELETE_BEARER_COMMAND66 66
974#define GTPV2_DELETE_BEARER_FAILURE_INDICATION67 67
975#define GTPV2_BEARER_RESOURCE_COMMAND68 68
976#define GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69 69
977#define GTPV2_CREATE_BEARER_REQUEST95 95
978#define GTPV2_CREATE_BEARER_RESPONSE96 96
979#define GTPV2_UPDATE_BEARER_REQUEST97 97
980#define GTPV2_UPDATE_BEARER_RESPONSE98 98
981#define GTPV2_DELETE_BEARER_REQUEST99 99
982#define GTPV2_DELETE_BEARER_RESPONSE100 100
983#define GTPV2_IDENTIFICATION_RESPONSE129 129
984#define GTPV2_CONTEXT_REQUEST130 130
985#define GTPV2_CONTEXT_RESPONSE131 131
986#define GTPV2_CONTEXT_ACKNOWLEDGE132 132
987#define GTPV2_FORWARD_RELOCATION_REQ133 133
988#define GTPV2_FORWARD_RELOCATION_RESP134 134
989#define GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135 135
990#define GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136 136
991#define GTPV2_FORWARD_CTX_NOTIFICATION137 137
992#define GTPV2_FORWARD_CTX_ACKNOWLEDGE138 138
993#define GTPV2_RELOCATION_CANCEL_REQUEST139 139
994#define GTPV2_RELOCATION_CANCEL_RESPONSE140 140
995#define GTPV2_CONFIGURATION_TRANSFER_TUNNEL141 141
996#define GTPV2_RAN_INFORMATION_RELAY152 152
997#define GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170 170
998#define GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171 171
999#define GTPV2_DL_DATA_NOTIF176 176
1000#define GTPV2_DL_DATA_NOTIF_ACK177 177
1001#define GTPV2_MODIFY_ACESSS_BEARER_REQUEST211 211
1002#define GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212 212
1003
1004/* Table 6.1-1: Message types for GTPv2 */
1005static const value_string gtpv2_message_type_vals[] = {
1006 { 0, "Reserved"},
1007 { 1, "Echo Request"},
1008 { 2, "Echo Response"},
1009 { 3, "Version Not Supported Indication"},
1010 /* 4-24 Reserved for S101 interface TS 29.276 */
1011 { 4, "Node Alive Request"},
1012 { 5, "Node Alive Response"},
1013 { 6, "Redirection Request"},
1014 { 7, "Redirection Response"},
1015 /* 25-31 Reserved for Sv interface TS 29.280 */
1016/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 5.2.1*/
1017 { 25, "SRVCC PS to CS Request"},
1018 { 26, "SRVCC PS to CS Response"},
1019 { 27, "SRVCC PS to CS Complete Notification"},
1020 { 28, "SRVCC PS to CS Complete Acknowledge"},
1021 { 29, "SRVCC PS to CS Cancel Notification"},
1022 { 30, "SRVCC PS to CS Cancel Acknowledge"},
1023 { 31, "SRVCC CS to PS Request"},
1024/*End SRVCC Messages*/
1025 /* SGSN/MME to PGW (S4/S11, S5/S8) */
1026 { 32, "Create Session Request"},
1027 { 33, "Create Session Response"},
1028 { 34, "Modify Bearer Request"},
1029 { 35, "Modify Bearer Response"},
1030 { 36, "Delete Session Request"},
1031 { 37, "Delete Session Response"},
1032 /* SGSN/MME to PGW (S4/S11, S5/S8) */
1033 { 38, "Change Notification Request"},
1034 { 39, "Change Notification Response"},
1035 /* MME to PGW (S11, S5/S8) */
1036 { 40, "Remote UE Report Notification" },
1037 { 41, "Remote UE Report Acknowledge" },
1038 /* 42-63 For future use */
1039 /* Messages without explicit response */
1040 { 64, "Modify Bearer Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
1041 { 65, "Modify Bearer Failure Indication"}, /*(PGW to MME/SGSN -S5/S8, S11/S4) */
1042 { 66, "Delete Bearer Command"}, /* (MME to PGW -S11, S5/S8) */
1043 { 67, "Delete Bearer Failure Indication"}, /* (PGW to MME -S5/S8, S11) */
1044 { 68, "Bearer Resource Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */
1045 { 69, "Bearer Resource Failure Indication"}, /* (PGW to MME/SGSN -S5/S8, S11/S4) */
1046 { 70, "Downlink Data Notification Failure Indication"}, /*(SGSN/MME to SGW -S4/S11) */
1047 { 71, "Trace Session Activation"},
1048 { 72, "Trace Session Deactivation"},
1049 { 73, "Stop Paging Indication"},
1050 /* 74-94 For future use */
1051 /* PGW to SGSN/MME/ TWAN/ePDG (S5/S8, S4/S11, S2a, S2b) */
1052 { 95, "Create Bearer Request"},
1053 { 96, "Create Bearer Response"},
1054 { 97, "Update Bearer Request"},
1055 { 98, "Update Bearer Response"},
1056 { 99, "Delete Bearer Request"},
1057 {100, "Delete Bearer Response"},
1058 /* PGW to MME, MME to PGW, SGW to PGW, SGW to MME (S5/S8, S11) */
1059 {101, "Delete PDN Connection Set Request"},
1060 {102, "Delete PDN Connection Set Response"},
1061 /* PGW to SGSN/MME(S5, S4/S11) */
1062 {103, "PGW Downlink Triggering Notification" },
1063 {104, "PGW Downlink Triggering Acknowledge" },
1064 /* 105-127 For future use */
1065 /* MME to MME, SGSN to MME, MME to SGSN, SGSN to SGSN (S3/10/S16) */
1066 {128, "Identification Request"},
1067 {129, "Identification Response"},
1068 {130, "Context Request"},
1069 {131, "Context Response"},
1070 {132, "Context Acknowledge"},
1071 {133, "Forward Relocation Request"},
1072 {134, "Forward Relocation Response"},
1073 {135, "Forward Relocation Complete Notification"},
1074 {136, "Forward Relocation Complete Acknowledge"},
1075 {137, "Forward Access Context Notification"},
1076 {138, "Forward Access Context Acknowledge"},
1077 {139, "Relocation Cancel Request"},
1078 {140, "Relocation Cancel Response"},
1079 {141, "Configuration Transfer Tunnel"},
1080 /* 142-148 For future use */
1081 /* SGSN to MME, MME to SGSN (S3)*/
1082 {149, "Detach Notification"},
1083 {150, "Detach Acknowledge"},
1084 {151, "CS Paging Indication"},
1085 {152, "RAN Information Relay"},
1086 {153, "Alert MME Notification"},
1087 {154, "Alert MME Acknowledge"},
1088 {155, "UE Activity Notification"},
1089 {156, "UE Activity Acknowledge" },
1090 {157, "ISR Status Indication" },
1091 {158, "UE Registration Query Request" },
1092 {159, "UE Registration Query Response" },
1093 /* MME to SGW (S11) */
1094 {160, "Create Forwarding Tunnel Request"},
1095 {161, "Create Forwarding Tunnel Response"},
1096 {162, "Suspend Notification"},
1097 {163, "Suspend Acknowledge"},
1098 {164, "Resume Notification"},
1099 {165, "Resume Acknowledge"},
1100 {166, "Create Indirect Data Forwarding Tunnel Request"},
1101 {167, "Create Indirect Data Forwarding Tunnel Response"},
1102 {168, "Delete Indirect Data Forwarding Tunnel Request"},
1103 {169, "Delete Indirect Data Forwarding Tunnel Response"},
1104 {170, "Release Access Bearers Request"},
1105 {171, "Release Access Bearers Response"},
1106 /* 172-175 For future use */
1107 /* SGW to SGSN/MME (S4/S11) */
1108 {176, "Downlink Data Notification"},
1109 {177, "Downlink Data Notification Acknowledgement"},
1110 {178, "Reserved. Allocated in earlier version of the specification."},
1111 {179, "PGW Restart Notification"},
1112 {180, "PGW Restart Notification Acknowledge"},
1113 /* 181-199 For future use */
1114 /* SGW to PGW, PGW to SGW (S5/S8) */
1115 {200, "Update PDN Connection Set Request"},
1116 {201, "Update PDN Connection Set Response"},
1117 /* 202 to 210 For future use */
1118 /* MME to SGW (S11) */
1119 {211, "Modify Access Bearers Request"},
1120 {212, "Modify Access Bearers Response"},
1121 /* 213 to 230 For future use */
1122 /* MBMS GW to MME/SGSN (Sm/Sn) */
1123 {231, "MBMS Session Start Request"},
1124 {232, "MBMS Session Start Response"},
1125 {233, "MBMS Session Update Request"},
1126 {234, "MBMS Session Update Response"},
1127 {235, "MBMS Session Stop Request"},
1128 {236, "MBMS Session Stop Response"},
1129 /* 237 to 239 For future use */
1130 /* Reserved for Sv interface (see also types 25 to 31) TS 29.280 */
1131 {240, "SRVCC CS to PS Response"}, /* 5.2.9 3GPP TS 29.280 V11.5.0 (2013-09) */
1132 {241, "SRVCC CS to PS Complete Notification"}, /* 5.2.10 3GPP TS 29.280 V11.5.0 (2013-09) */
1133 {242, "SRVCC CS to PS Complete Acknowledge"}, /* 5.2.11 3GPP TS 29.280 V11.5.0 (2013-09) */
1134 {243, "SRVCC CS to PS Cancel Notification"}, /* 5.2.12 3GPP TS 29.280 V11.5.0 (2013-09) */
1135 {244, "SRVCC CS to PS Cancel Acknowledge"}, /* 5.2.13 3GPP TS 29.280 V11.5.0 (2013-09) */
1136 /* 245 to 247 For future Sv interface use*/
1137 /* 248 to 255 For future use */
1138 {0, NULL((void*)0)}
1139};
1140static 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) }
;
1141
1142#define NUM_GTPV2_IES256 256
1143static int ett_gtpv2_ies[NUM_GTPV2_IES256];
1144
1145#define GTPV2_IE_RESERVED0 0
1146#define GTPV2_IE_IMSI1 1
1147#define GTPV2_IE_CAUSE2 2
1148#define GTPV2_REC_REST_CNT3 3
1149/*Start SRVCC Messages*/
1150#define GTPV2_IE_STN_SR51 51
1151#define GTPV2_IE_SRC_TGT_TRANS_CON52 52
1152#define GTPV2_IE_TGT_SRC_TRANS_CON53 53
1153#define GTPV2_IE_MM_CON_EUTRAN_SRVCC54 54
1154#define GTPV2_IE_MM_CON_UTRAN_SRVCC55 55
1155#define GTPV2_IE_SRVCC_CAUSE56 56
1156#define GTPV2_IE_TGT_RNC_ID57 57
1157#define GTPV2_IE_TGT_GLOGAL_CELL_ID58 58
1158#define GTPV2_IE_TEID_C59 59
1159#define GTPV2_IE_SV_FLAGS60 60
1160#define GTPV2_IE_SAI61 61
1161#define GTPV2_IE_MM_CTX_FOR_CS_TO_PS_SRVCC62 62
1162/* 61 - 70 for future sv interface use*/
1163/*End SRVCC Messages*/
1164#define GTPV2_APN71 71
1165#define GTPV2_AMBR72 72
1166#define GTPV2_EBI73 73
1167#define GTPV2_IP_ADDRESS74 74
1168#define GTPV2_MEI75 75
1169#define GTPV2_IE_MSISDN76 76
1170#define GTPV2_INDICATION77 77
1171#define GTPV2_PCO78 78
1172#define GTPV2_PAA79 79
1173#define GTPV2_BEARER_QOS80 80
1174#define GTPV2_IE_FLOW_QOS81 81
1175#define GTPV2_IE_RAT_TYPE82 82
1176#define GTPV2_IE_SERV_NET83 83
1177#define GTPV2_IE_BEARER_TFT84 84
1178#define GTPV2_IE_TAD85 85
1179#define GTPV2_IE_ULI86 86
1180#define GTPV2_IE_F_TEID87 87
1181#define GTPV2_IE_TMSI88 88
1182#define GTPV2_IE_GLOBAL_CNID89 89
1183#define GTPV2_IE_S103PDF90 90
1184#define GTPV2_IE_S1UDF91 91
1185#define GTPV2_IE_DEL_VAL92 92
1186#define GTPV2_IE_BEARER_CTX93 93
1187#define GTPV2_IE_CHAR_ID94 94
1188#define GTPV2_IE_CHAR_CHAR95 95
1189#define GTPV2_IE_TRA_INFO96 96
1190#define GTPV2_BEARER_FLAG97 97
1191/* define GTPV2_IE_PAGING_CAUSE 98 (void) */
1192#define GTPV2_IE_PDN_TYPE99 99
1193#define GTPV2_IE_PTI100 100
1194#define GTPV2_IE_DRX_PARAM101 101
1195#define GTPV2_IE_UE_NET_CAPABILITY102 102
1196#define GTPV2_IE_MM_CONTEXT_GSM_T103 103
1197#define GTPV2_IE_MM_CONTEXT_UTMS_CQ104 104
1198#define GTPV2_IE_MM_CONTEXT_GSM_CQ105 105
1199#define GTPV2_IE_MM_CONTEXT_UTMS_Q106 106
1200#define GTPV2_IE_MM_CONTEXT_EPS_QQ107 107
1201#define GTPV2_IE_MM_CONTEXT_UTMS_QQ108 108
1202#define GTPV2_IE_PDN_CONNECTION109 109
1203#define GTPV2_IE_PDN_NUMBERS110 110
1204#define GTPV2_IE_P_TMSI111 111
1205#define GTPV2_IE_P_TMSI_SIG112 112
1206#define GTPV2_IE_HOP_COUNTER113 113
1207#define GTPV2_IE_UE_TIME_ZONE114 114
1208#define GTPV2_IE_TRACE_REFERENCE115 115
1209#define GTPV2_IE_COMPLETE_REQUEST_MSG116 116
1210#define GTPV2_IE_GUTI117 117
1211#define GTPV2_IE_F_CONTAINER118 118
1212#define GTPV2_IE_F_CAUSE119 119
1213#define GTPV2_IE_PLMN_ID120 120
1214#define GTPV2_IE_TARGET_ID121 121
1215/* GTPV2_IE_NSAPI 122 */
1216#define GTPV2_IE_PKT_FLOW_ID123 123
1217#define GTPV2_IE_RAB_CONTEXT124 124
1218#define GTPV2_IE_S_RNC_PDCP_CTX_INFO125 125
1219#define GTPV2_IE_PORT_NR126 126
1220#define GTPV2_IE_APN_RESTRICTION127 127
1221#define GTPV2_IE_SEL_MODE128 128
1222#define GTPV2_IE_SOURCE_IDENT129 129
1223#define GTPV2_IE_BEARER_CONTROL_MODE130 130
1224#define GTPV2_IE_CNG_REP_ACT131 131
1225#define GTPV2_IE_FQ_CSID132 132
1226#define GTPV2_IE_CHANNEL_NEEDED133 133
1227#define GTPV2_IE_EMLPP_PRI134 134
1228#define GTPV2_IE_NODE_TYPE135 135
1229#define GTPV2_IE_FQDN136 136
1230#define GTPV2_IE_TI137 137
1231#define GTPV2_IE_MBMS_SESSION_DURATION138 138
1232#define GTPV2_IE_MBMS_SERVICE_AREA139 139
1233#define GTPV2_IE_MBMS_SESSION_ID140 140
1234#define GTPV2_IE_MBMS_FLOW_ID141 141
1235#define GTPV2_IE_MBMS_IP_MC_DIST142 142
1236#define GTPV2_IE_MBMS_DIST_ACK143 143
1237#define GTPV2_IE_RFSP_INDEX144 144
1238#define GTPV2_IE_UCI145 145
1239#define GTPV2_IE_CSG_INFO_REP_ACTION146 146
1240#define GTPV2_IE_CSG_ID147 147
1241#define GTPV2_IE_CMI148 148
1242#define GTPV2_IE_SERVICE_INDICATOR149 149
1243#define GTPV2_IE_DETACH_TYPE150 150
1244#define GTPV2_IE_LDN151 151
1245#define GTPV2_IE_NODE_FEATURES152 152
1246#define GTPV2_IE_MBMS_TIME_TO_DATA_XFER153 153
1247#define GTPV2_IE_THROTTLING154 154
1248#define GTPV2_IE_ARP155 155
1249#define GTPV2_IE_EPC_TIMER156 156
1250#define GTPV2_IE_SIG_PRIO_IND157 157
1251#define GTPV2_IE_TMGI158 158
1252#define GTPV2_IE_ADD_MM_CONT_FOR_SRVCC159 159
1253#define GTPV2_IE_ADD_FLAGS_FOR_SRVCC160 160
1254#define GTPV2_IE_MMBR161 161
1255#define GTPV2_IE_MDT_CONFIG162 162
1256#define GTPV2_IE_APCO163 163
1257#define GTPV2_IE_ABS_MBMS_DATA_TF_TIME164 164
1258#define GTPV2_IE_HENB_INFO_REPORT165 165
1259#define GTPV2_IE_IP4CP166 166
1260#define GTPV2_IE_CHANGE_TO_REPORT_FLAGS167 167
1261#define GTPV2_IE_ACTION_INDICATION168 168
1262#define GTPV2_IE_TWAN_IDENTIFIER169 169
1263#define GTPV2_IE_ULI_TIMESTAMP170 170
1264#define GTPV2_IE_MBMS_FLAGS171 171
1265#define GTPV2_IE_RAN_NAS_CAUSE172 172
1266#define GTPV2_IE_CN_OP_SEL_ENT173 173
1267#define GTPV2_IE_TRUST_WLAN_MODE_IND174 174
1268#define GTPV2_IE_NODE_NUMBER175 175
1269#define GTPV2_IE_NODE_IDENTIFIER176 176
1270#define GTPV2_IE_PRES_REP_AREA_ACT177 177
1271#define GTPV2_IE_PRES_REP_AREA_INF178 178
1272#define GTPV2_IE_TWAN_ID_TS179 179
1273#define GTPV2_IE_OVERLOAD_CONTROL_INF180 180
1274#define GTPV2_IE_LOAD_CONTROL_INF181 181
1275#define GTPV2_IE_METRIC182 182
1276#define GTPV2_IE_SEQ_NO183 183
1277#define GTPV2_IE_APN_AND_REL_CAP184 184
1278#define GTPV2_IE_WLAN_OFFLOADABILITY_IND185 185
1279#define GTPV2_IE_PAGING_AND_SERVICE_INF186 186
1280#define GTPV2_IE_INTEGER_NUMBER187 187
1281#define GTPV2_IE_MILLISECOND_TS188 188
1282#define GTPV2_IE_MON_EVENT_INF189 189
1283/*
1284190 ECGI List
1285191 Remote UE Context
1286192 Remote User ID
1287193 Remote UE IP information
1288*/
1289#define GTPV2_IE_CIOT_OPT_SUPPORT_IND194 194
1290#define GTPV2_IE_SCEF_PDN_CONNECTION195 195
1291#define GTPV2_IE_HEADER_COMP_CONF196 196
1292#define GTPV2_IE_EXTENDED_PCO197 197
1293#define GTPV2_IE_SERV_PLMN_RATE_CONTROL198 198
1294#define GTPV2_IE_COUNTER199 199
1295#define GTPV2_IE_MAPPED_UE_USAGE_TYPE200 200
1296#define GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201 201
1297#define GTPV2_IE_UP_FUNC_SEL_INDI_FLG202 202
1298#define GTPV2_IE_MAX_PKT_LOSS_RTE203 203
1299#define GTPV2_IE_APN_RTE_CNTRL_STATUS204 204
1300#define GTPV2_IE_EXT_TRS_INF205 205
1301#define GTPV2_IE_MON_EVENT_EXT_INF206 206
1302#define GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207 207
1303#define GTPV2_IE_V2X_CONTEXT208 208
1304#define GTPV2_IE_PC5_QOS_PARAMETERS209 209
1305#define GTPV2_IE_SERVICES_AUTHORIZED210 210
1306#define GTPV2_IE_BIT_RATE211 211
1307#define GTPV2_IE_PC5_QOS_FLOW212 212
1308#define GTPV2_IE_SGI_PTP_TUNNEL_ADDRESS213 213
1309#define GTPV2_IE_PGW_CHANGE_INFO214 214
1310#define GTPV2_IE_PGW_FQDN215 215
1311#define GTPV2_IE_GROUP_ID216 216
1312#define GTPV2_IE_PSCELL_ID217 217
1313#define GTPV2_IE_UP_SECURITY_POLICY218 218
1314#define GTPV2_IE_ALT_IMSI219 219
1315#define GTPV2_IE_NF_INSTANCE_ID220 220
1316#define GTPV2_IE_TIMER_IN_SECONDS221 221
1317/*
1318220 to 253 Spare. For future use.
1319254 Special IE type for IE Type Extension
1320255 Private Extension
1321256 to 65535 Spare. For future use.
1322
1323*/
1324/* 169 to 254 reserved for future use */
1325#define GTPV2_IE_PRIVATE_EXT255 255
1326
1327#define SPARE0X0 0X0
1328#define CREATE_NEW_TFT0X20 0X20
1329#define DELETE_TFT0X40 0X40
1330#define ADD_PACKET_FILTERS_TFT0X60 0X60
1331#define REPLACE_PACKET_FILTERS_TFT0X80 0X80
1332#define DELETE_PACKET_FILTERS_TFT0XA0 0XA0
1333#define NO_TFT_OPERATION0XC0 0XC0
1334#define RESERVED0XE0 0XE0
1335
1336/* SRVCC PS-to-CS Transparent Container Preference */
1337#define PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0 0
1338#define PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1 1
1339static int pref_decode_srvcc_p2c_trans_cont = PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0;
1340
1341static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1342
1343/* Table 8.1-1: Information Element types for GTPv2 */
1344static const value_string gtpv2_element_type_vals[] = {
1345 { 0, "Reserved"},
1346 { 1, "International Mobile Subscriber Identity (IMSI)"}, /* Variable Length / 8.3 */
1347 { 2, "Cause"}, /* Variable Length / 8.4 */
1348 { 3, "Recovery (Restart Counter)"}, /* Variable Length / 8.5 */
1349 /* 4-34 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
1350 /* 35-50 / See 3GPP TS 29.276 */
1351/*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 6.1*/
1352 { 51, "STN-SR"}, /* Variable Length / 6.2 */
1353 { 52, "Source to Target Transparent Container"}, /* Variable Length / 6.3 */
1354 { 53, "Target to Source Transparent Container"}, /* Variable Length / 6.4 */
1355 { 54, "MM Context for E-UTRAN SRVCC"}, /* Variable Length / 6.5 */
1356 { 55, "MM Context for UTRAN SRVCC"}, /* Variable Length / 6.6 */
1357 { 56, "SRVCC Cause"}, /* Fixed Length / 6.7 */
1358 { 57, "Target RNC ID"}, /* Variable Length / 6.8 */
1359 { 58, "Target Global Cell ID"}, /* Variable Length / 6.9 */
1360 { 59, "TEID-C"}, /* Extendable / 6.10 */
1361 { 60, "Sv Flags" }, /* Extendable / 6.11 */
1362 { 61, "Service Area Identifier" }, /* Extendable / 6.12 */
1363 { 62, "MM Context for CS to PS SRVCC" }, /* Extendable / 6.13 */
1364 /* 63-70 For future Sv interface use */
1365/*End SRVCC Messages*/
1366 { 71, "Access Point Name (APN)"}, /* Variable Length / 8.6 */
1367 { 72, "Aggregate Maximum Bit Rate (AMBR)"}, /* Fixed Length / 8.7 */
1368 { 73, "EPS Bearer ID (EBI)"}, /* Extendable / 8.8 */
1369 { 74, "IP Address"}, /* Extendable / 8.9 */
1370 { 75, "Mobile Equipment Identity (MEI)"}, /* Variable Length / 8.10 */
1371 { 76, "MSISDN"}, /* Variable Length / 8.11 */
1372 { 77, "Indication"}, /* Extendable / 8.12 */
1373 { 78, "Protocol Configuration Options (PCO)"}, /* Variable Length / 8.13 */
1374 { 79, "PDN Address Allocation (PAA)"}, /* Variable Length / 8.14 */
1375 { 80, "Bearer Level Quality of Service (Bearer QoS)"}, /* Variable Length / 8.15 */
1376 { 81, "Flow Quality of Service (Flow QoS)"}, /* Extendable / 8.16 */
1377 { 82, "RAT Type"}, /* Extendable / 8.17 */
1378 { 83, "Serving Network"}, /* Extendable / 8.18 */
1379 { 84, "EPS Bearer Level Traffic Flow Template (Bearer TFT)"}, /* Variable Length / 8.19 */
1380 { 85, "Traffic Aggregation Description (TAD)"}, /* Variable Length / 8.20 */
1381 { 86, "User Location Info (ULI)"}, /* Variable Length / 8.21 */
1382 { 87, "Fully Qualified Tunnel Endpoint Identifier (F-TEID)"}, /* Extendable / 8.22 */
1383 { 88, "TMSI"}, /* Variable Length / 8.23 */
1384 { 89, "Global CN-Id"}, /* Variable Length / 8.24 */
1385 { 90, "S103 PDN Data Forwarding Info (S103PDF)"}, /* Variable Length / 8.25 */
1386 { 91, "S1-U Data Forwarding Info (S1UDF)"}, /* Variable Length/ 8.26 */
1387 { 92, "Delay Value"}, /* Extendable / 8.27 */
1388 { 93, "Bearer Context"}, /* Extendable / 8.28 */
1389 { 94, "Charging ID"}, /* Extendable / 8.29 */
1390 { 95, "Charging Characteristics"}, /* Extendable / 8.30 */
1391 { 96, "Trace Information"}, /* Extendable / 8.31 */
1392 { 97, "Bearer Flags"}, /* Extendable / 8.32 */
1393 { 98, "Paging Cause"}, /* Variable Length / 8.33 */
1394 { 99, "PDN Type"}, /* Extendable / 8.34 */
1395 {100, "Procedure Transaction ID"}, /* Extendable / 8.35 */
1396 {101, "DRX Parameter"}, /* Variable Length/ 8.36 */
1397 {102, "UE Network Capability"}, /* Variable Length / 8.37 */
1398 {103, "MM Context (GSM Key and Triplets)"}, /* Variable Length / 8.38 */
1399 {104, "MM Context (UMTS Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
1400 {105, "MM Context (GSM Key, Used Cipher and Quintuplets)"}, /* Variable Length / 8.38 */
1401 {106, "MM Context (UMTS Key and Quintuplets)"}, /* Variable Length / 8.38 */
1402 {107, "MM Context (EPS Security Context, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
1403 {108, "MM Context (UMTS Key, Quadruplets and Quintuplets)"}, /* Variable Length / 8.38 */
1404 {109, "PDN Connection"}, /* Extendable / 8.39 */
1405 {110, "PDU Numbers"}, /* Extendable / 8.40 */
1406 {111, "P-TMSI"}, /* Variable Length / 8.41 */
1407 {112, "P-TMSI Signature"}, /* Variable Length / 8.42 */
1408 {113, "Hop Counter"}, /* Extendable / 8.43 */
1409 {114, "UE Time Zone"}, /* Variable Length / 8.44 */
1410 {115, "Trace Reference"}, /* Fixed Length / 8.45 */
1411 {116, "Complete Request Message"}, /* Variable Length / 8.46 */
1412 {117, "GUTI"}, /* Variable Length / 8.47 */
1413 {118, "F-Container"}, /* Variable Length / 8.48 */
1414 {119, "F-Cause"}, /* Variable Length / 8.49 */
1415 {120, "PLMN ID"}, /* Variable Length / 8.50 */
1416 {121, "Target Identification"}, /* Variable Length / 8.51 */
1417 {122, "NSAPI"}, /* Extendable / 8.52 */
1418 {123, "Packet Flow ID"}, /* Variable Length / 8.53 */
1419 {124, "RAB Context"}, /* Fixed Length / 8.54 */
1420 {125, "Source RNC PDCP Context Info"}, /* Variable Length / 8.55 */
1421 {126, "Port Number"}, /* Extendable / 8.56 */
1422 {127, "APN Restriction"}, /* Extendable / 8.57 */
1423 {128, "Selection Mode"}, /* Extendable / 8.58 */
1424 {129, "Source Identification"}, /* Variable Length / 8.50 */
1425 {130, "Bearer Control Mode"}, /* Extendable / 8.60 */
1426 {131, "Change Reporting Action"}, /* Variable Length / 8.61 */
1427 {132, "Fully Qualified PDN Connection Set Identifier (FQ-CSID)"}, /* Variable Length / 8.62 */
1428 {133, "Channel needed"}, /* Extendable / 8.63 */
1429 {134, "eMLPP Priority"}, /* Extendable / 8.64 */
1430 {135, "Node Type"}, /* Extendable / 8.65 */
1431 {136, "Fully Qualified Domain Name (FQDN)"}, /* Variable Length / 8.66 */
1432 {137, "Transaction Identifier (TI)"}, /* Variable Length / 8.68 */
1433 {138, "MBMS Session Duration"}, /* Duration Extendable / 8.69 */
1434 {139, "MBMS Service Area"}, /* Extendable / 8.70 */
1435 {140, "MBMS Session Identifier"}, /* Extendable / 8.71 */
1436 {141, "MBMS Flow Identifier"}, /* Extendable / 8.72 */
1437 {142, "MBMS IP Multicast Distribution"}, /* Extendable / 8.73 */
1438 {143, "MBMS Distribution Acknowledge"}, /* Extendable / 8.74 */
1439 {144, "RFSP Index"}, /* Fixed Length / 8.77 */
1440 {145, "User CSG Information (UCI)"}, /* Extendable / 8.75 */
1441 {146, "CSG Information Reporting Action"}, /* Extendable / 8.76 */
1442 {147, "CSG ID"}, /* Extendable / 8.78 */
1443 {148, "CSG Membership Indication (CMI)"}, /* Extendable / 8.79 */
1444 {149, "Service indicator"}, /* Fixed Length / 8.80 */
1445 {150, "Detach Type"}, /* Fixed Length / 8.81 */
1446 {151, "Local Distinguished Name (LDN)"}, /* Variable Length / 8.82 */
1447 {152, "Node Features"}, /* Extendable / 8.83 */
1448 {153, "MBMS Time to Data Transfer"}, /* Extendable / 8.84 */
1449 {154, "Throttling"}, /* Extendable / 8.85 */
1450 {155, "Allocation/Retention Priority (ARP)"}, /* Extendable / 8.86 */
1451 {156, "EPC Timer"}, /* Extendable / 8.87 */
1452 {157, "Signalling Priority Indication"}, /* Extendable / 8.88 */
1453 {158, "Temporary Mobile Group Identity"}, /* Extendable / 8.89 */
1454 {159, "Additional MM context for SRVCC"}, /* Extendable / 8.90 */
1455 {160, "Additional flags for SRVCC"}, /* Extendable / 8.91 */
1456 {161, "Max MBR/APN-AMBR (MMBR)"}, /* Extendable / 8.92 */
1457 {162, "MDT Configuration"}, /* Extendable / 8.93 */
1458 {163, "Additional Protocol Configuration Options (APCO)"}, /* Extendable / 8.94 */
1459 {164, "Absolute Time of MBMS Data Transfer"}, /* Extendable / 8.95 */
1460 {165, "H(e)NB Information Reporting"}, /* Extendable / 8.96*/
1461 {166, "IPv4 Configuration Parameters (IP4CP)"}, /* Extendable / 8.97*/
1462 {167, "Change to Report Flags"}, /* Extendable / 8.98 */
1463 {168, "Action Indication"}, /* Extendable / 8.99 */
1464 {169, "TWAN Identifier "}, /* Extendable / 8.100 */
1465 {170, "ULI Timestamp"}, /* Extendable / 8.101 */
1466 {171, "MBMS Flags"}, /* Extendable / 8.102 */
1467 {172, "RAN/NAS Cause"}, /* Extendable / 8.103 */
1468 {173, "CN Operator Selection Entity"}, /* Extendable / 8.104 */
1469 {174, "Trusted WLAN Mode Indication"}, /* Extendable / 8.105 */
1470 {175, "Node Number"}, /* Extendable / 8.106 */
1471 {176, "Node Identifier"}, /* Extendable / 8.107 */
1472 {177, "Presence Reporting Area Action"}, /* Extendable / 8.108 */
1473 {178, "Presence Reporting Area Information"}, /* Extendable / 8.109 */
1474 {179, "TWAN Identifier Timestamp"}, /* Extendable / 8.110 */
1475 {180, "Overload Control Information"}, /* Extendable / 8.111 */
1476 {181, "Load Control Information"}, /* Extendable / 8.112 */
1477 {182, "Metric"}, /* Fixed Length / 8.113 */
1478 {183, "Sequence Number"}, /* Fixed Length / 8.114 */
1479 {184, "APN and Relative Capacity"}, /* Extendable / 8.115 */
1480 {185, "WLAN Offloadability Indication"}, /* Extendable / 8.116 */
1481 {186, "Paging and Service Information"}, /* Extendable / 8.117 */
1482 {187, "Integer Number" }, /* Variable / 8.118 */
1483 {188, "Millisecond Time Stamp" }, /* Extendable / 8.119 */
1484 {189, "Monitoring Event Information"}, /* Extendable / 8.120 */
1485 {190, "ECGI List"}, /* Extendable / 8.121 */
1486 {191, "Remote UE Context"}, /* Extendable / 8.122 */
1487 {192, "Remote User ID"}, /* Extendable / 8.123 */
1488 {193, "Remote UE IP information"}, /* Variable Length / 8.124 */
1489 {194, "CIoT Optimizations Support Indication"}, /* Extendable / 8.125 */
1490 {195, "SCEF PDN Connection"}, /* Extendable / 8.126 */
1491 {196, "Header Compression Configuration"}, /* Extendable / 8.127 */
1492 {197, "Extended Protocol Configuration Options(ePCO)"}, /* Variable Length / 8.128 */
1493 {198, "Serving PLMN Rate Control"}, /* Extendable / 8.129 */
1494 {199, "Counter" }, /* Extendable / 8.130 */
1495 {200, "Mapped UE Usage Type" }, /* Extendable / 8.131 */
1496 {201, "Secondary RAT Usage Data Report" }, /* Extendable / 8.132 */
1497 {202, "UP Function Selection Indication Flags" }, /* Extendable / 8.133 */
1498 {203, "Maximum Packet Loss Rate" }, /* Extendable / 8.134 */
1499 {204, "APN Rate Control Status" }, /* Extendable / 8.135 */
1500 {205, "Extended Trace Information" }, /* Extendable / 8.136 */
1501 {206, "Monitoring Event Extension Information" }, /* Extendable / 8.137 */
1502 {207, "Additional RRM Policy Index" }, /* Fixed Length / 8.138 */
1503 {208, "V2X Context" }, /* Extendable / 8.139 */
1504 {209, "PC5 QoS Parameters" }, /* Extendable / 8.140 */
1505 {210, "Services Authorized" }, /* Extendable / 8.141 */
1506 {211, "Bit Rate" }, /* Extendable / 8.142 */
1507 {212, "PC5 QoS Flow" }, /* Extendable / 8.143 */
1508 {213, "SGi PtP Tunnel Address" }, /* Extendable / 8.144 */
1509 {214, "PGW Change Info" }, /* Extendable / 8.145 */
1510 {215, "PGW FQDN" }, /* Extendable / 8.146 */
1511 {216, "Group Id" }, /* Variable Length / 8.147 */
1512 {217, "PSCell ID" }, /* Fixed Length / 8.148*/
1513 {218, "UP Security Policy" }, /* Extendable / 8.149*/
1514 {219, "Alternative IMSI" }, /* Variable Length / 8.150 */
1515 {220, "NF Instance ID" }, /* Fixed Length / 8.151 */
1516 {221, "Timer in Seconds"}, /* Variable Length / 8.152 */
1517 /* 222 to 254 Spare. For future use. */
1518 {255, "Private Extension"}, /* Variable Length / 8.67 */
1519 {0, NULL((void*)0)}
1520};
1521static 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) }
;
1522
1523typedef struct _gtpv2_hdr {
1524 uint8_t flags; /* GTP header flags */
1525 uint8_t message; /* Message type */
1526 uint16_t length; /* Length of header */
1527 int64_t teid; /* Tunnel End-point ID */
1528} gtpv2_hdr_t;
1529
1530/* Data structure attached to a conversation,
1531to keep track of request/response-pairs
1532*/
1533typedef struct gtpv2_conv_info_t {
1534 wmem_map_t *unmatched;
1535 wmem_map_t *matched;
1536} gtpv2_conv_info_t;
1537
1538/*structure used to track responses to requests using sequence number*/
1539typedef struct gtpv2_msg_hash_entry {
1540 bool_Bool is_request; /*true/false*/
1541 uint32_t req_frame; /*frame with request */
1542 nstime_t req_time; /*req time */
1543 uint32_t rep_frame; /*frame with reply */
1544 unsigned seq_nr; /*sequence number*/
1545 unsigned msgtype; /*messagetype*/
1546 uint32_t conv_id; /*IP conversation ID, for handling deinterlacing*/
1547} gtpv2_msg_hash_t;
1548
1549static unsigned
1550gtpv2_sn_hash(const void *k)
1551{
1552 const gtpv2_msg_hash_t *key = (const gtpv2_msg_hash_t *)k;
1553
1554 return key->seq_nr;
1555}
1556
1557static int
1558gtpv2_sn_equal_matched(const void *k1, const void *k2)
1559{
1560 const gtpv2_msg_hash_t *key1 = (const gtpv2_msg_hash_t *)k1;
1561 const gtpv2_msg_hash_t *key2 = (const gtpv2_msg_hash_t *)k2;
1562 double diff;
1563 nstime_t delta;
1564
1565 if (key1->req_frame && key2->req_frame && (key1->req_frame != key2->req_frame)) {
1566 return 0;
1567 }
1568
1569 if (key1->rep_frame && key2->rep_frame && (key1->rep_frame != key2->rep_frame)) {
1570 return 0;
1571 }
1572
1573 if (pref_pair_matching_max_interval_ms) {
1574 nstime_delta(&delta, &key1->req_time, &key2->req_time);
1575 diff = fabs(nstime_to_msec(&delta));
1576
1577 return key1->seq_nr == key2->seq_nr && diff < pref_pair_matching_max_interval_ms;
1578 }
1579
1580 return key1->seq_nr == key2->seq_nr;
1581}
1582
1583static int
1584gtpv2_sn_equal_unmatched(const void *k1, const void *k2)
1585{
1586 const gtpv2_msg_hash_t *key1 = (const gtpv2_msg_hash_t *)k1;
1587 const gtpv2_msg_hash_t *key2 = (const gtpv2_msg_hash_t *)k2;
1588 double diff;
1589 nstime_t delta;
1590
1591 if (pref_pair_matching_max_interval_ms) {
1592 nstime_delta(&delta, &key1->req_time, &key2->req_time);
1593 diff = fabs(nstime_to_msec(&delta));
1594
1595 return key1->seq_nr == key2->seq_nr && diff < pref_pair_matching_max_interval_ms;
1596 }
1597
1598 return key1->seq_nr == key2->seq_nr;
1599}
1600
1601static GHashTable *gtpv2_stat_msg_idx_hash;
1602
1603static void
1604gtpv2_stat_init(struct register_srt* srt _U___attribute__((unused)), GArray*srt_array)
1605{
1606 if (gtpv2_stat_msg_idx_hash != NULL((void*)0)) {
1607 g_hash_table_destroy(gtpv2_stat_msg_idx_hash);
1608 }
1609 gtpv2_stat_msg_idx_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
1610
1611 init_srt_table("GTPv2 Requests", NULL((void*)0), srt_array, 0, NULL((void*)0), NULL((void*)0), NULL((void*)0));
1612}
1613
1614static tap_packet_status
1615gtpv2_stat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *prv, tap_flags_t flags _U___attribute__((unused)))
1616{
1617 unsigned i = 0;
1618 srt_stat_table *gtpv2_srt_table;
1619 srt_data_t *srt_data = (srt_data_t*)pss;
1620 const gtpv2_msg_hash_t *gcrp = (const gtpv2_msg_hash_t *)prv;
1621 int idx = 0;
1622
1623 /* We are only interested in matched reply packets. */
1624 if (gcrp->is_request) {
1625 return TAP_PACKET_DONT_REDRAW;
1626 }
1627 if (!gcrp->req_frame) {
1628 return TAP_PACKET_DONT_REDRAW;
1629 }
1630
1631 gtpv2_srt_table = g_array_index(srt_data->srt_array, srt_stat_table*, i)(((srt_stat_table**) (void *) (srt_data->srt_array)->data
) [(i)])
;
1632
1633 /* XXX: It would be nice if srt_table handled hashing so that the
1634 * real procedure number could be displayed in the table without
1635 * having to add empty rows for unused message types and responses
1636 * (requests and responses have different message types, and we
1637 * only use the request value.)
1638 */
1639 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)))))
;
1640
1641 /* Store the row value incremented by 1 to distinguish 0 from NULL */
1642 if (idx == 0) {
1643 idx = g_hash_table_size(gtpv2_stat_msg_idx_hash);
1644 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)));
1645 init_srt_table_row(gtpv2_srt_table, idx, val_to_str_ext_const(gcrp->msgtype, &gtpv2_message_type_vals_ext, "Unknown"));
1646 } else {
1647 idx -= 1;
1648 }
1649
1650 add_srt_table_data(gtpv2_srt_table, idx, &gcrp->req_time, pinfo);
1651
1652 return TAP_PACKET_REDRAW;
1653}
1654
1655/* Make this a common function ???*/
1656static void
1657value_in_tenth_of_percent_fmt(char* s, uint32_t v)
1658{
1659 snprintf(s, ITEM_LABEL_LENGTH240, "%.1f%% (%u)", (float)v / 10, v);
1660}
1661
1662/* Add Info element on IE types with multiple instances in same group */
1663typedef struct _gtpv2_information_element_instance {
1664 uint8_t message_type; /* Message type */
1665 uint8_t parent_ie; /* Parent group IE for which our IE is in. 0 if on message level */
1666 uint8_t type; /* This IE type */
1667 uint8_t instance; /* Which Instance */
1668 const char *info_element; /* Information element for the IE type */
1669} gtpv2_information_element_instance_t;
1670
1671/* IE types which defines with multiple instances in ch7.2 Tunnel Management Messages and ch7.3 Mobility Management Messages */
1672static const gtpv2_information_element_instance_t gtpv2_information_element_instance_vals[] = {
1673 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_F_TEID87, 0, "Sender F-TEID for Control Plane" },
1674 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_F_TEID87, 1, "PGW S5/S8 Address for Control Plane or PMIP" },
1675 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Created" },
1676 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1677 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1678 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1679 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1680 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1681 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 0, "MME/S4-SGSN LDN" },
1682 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 1, "SGW LDN" },
1683 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 2, "ePDG LDN" },
1684 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_LDN151, 3, "TWAN LDN" },
1685 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 0, "UE Local IP Address" },
1686 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 1, "H(e)NB Local IP Address" },
1687 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 2, "MME/S4-SGSN Identifier" },
1688 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IP_ADDRESS74, 3, "ePDG IP Address" },
1689 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1690 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 1, "H(e)NB Local UDP Port" },
1691 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_PORT_NR126, 2, "UE TCP Port" },
1692 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1693 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1694 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1695 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1696 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1697 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_TWAN_ID_TS179, 0, "WLAN Location Timestamp" },
1698 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_ULI86, 0, "User Location Info" },
1699 { GTPV2_CREATE_SESSION_REQUEST32, 0, GTPV2_IE_ULI86, 1, "User Location Info for SGW" },
1700
1701 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_F_TEID87, 0, "Sender F-TEID for Control Plane" },
1702 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_F_TEID87, 1, "PGW S5/S8 Address for Control Plane or PMIP" },
1703 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Created" },
1704 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1705 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1706 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1707 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LDN151, 0, "SGW LDN" },
1708 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LDN151, 1, "PGW LDN" },
1709 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1710 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1711 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1712 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1713 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1714 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 0, "Charging Gateway Name" },
1715 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 1, "PGW Node Name" },
1716 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IE_FQDN136, 1, "Alternative PGW-C/SMF FQDN" },
1717 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IP_ADDRESS74, 0, "Charging Gateway Address" },
1718 { GTPV2_CREATE_SESSION_RESPONSE33, 0, GTPV2_IP_ADDRESS74, 1, "Alternative PGW-C/SMF Address" },
1719 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1720 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1721 { GTPV2_CREATE_SESSION_RESPONSE33, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1722
1723 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1724 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1725 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1726 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1727 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1728 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1729 { GTPV2_CREATE_BEARER_REQUEST95, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1730 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1731 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1732 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1733 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1734 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1735 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1736 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1737 { GTPV2_CREATE_BEARER_REQUEST95, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1738
1739 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1740 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1741 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1742 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1743 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1744 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1745 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1746 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1747 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1748 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1749 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1750 { GTPV2_CREATE_BEARER_RESPONSE96, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1751
1752 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1753 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_EBI73, 1, "EPS Bearer ID" },
1754 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1755 { GTPV2_BEARER_RESOURCE_COMMAND68, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1756
1757 { GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1758 { GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1759
1760 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1761 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1762 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1763 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1764 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 0, "H(e)NB Local IP Address" },
1765 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 1, "UE Local IP Address" },
1766 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IP_ADDRESS74, 2, "MME/S4-SGSN Identifier" },
1767 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_PORT_NR126, 0, "H(e)NB Local UDP Port" },
1768 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_PORT_NR126, 1, "UE UDP Port" },
1769 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1770 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1771 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "ePDG Overload Control Info" },
1772 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_ULI86, 0, "User Location Info" }, /* redundant */
1773 { GTPV2_MODIFY_BEARER_REQUEST34, 0, GTPV2_IE_ULI86, 1, "User Location Info for SGW" }, /* redundant ? */
1774
1775 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1776 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1777 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1778 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1779 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LDN151, 0, "SGW LDN" },
1780 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LDN151, 1, "PGW LDN" },
1781 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1782 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1783 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1784 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1785 { GTPV2_MODIFY_BEARER_RESPONSE35, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1786 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1787 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1788 { GTPV2_MODIFY_BEARER_RESPONSE35, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1789
1790 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1791 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1792 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1793 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1794 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1795 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1796 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1797 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1798 { GTPV2_DELETE_SESSION_REQUEST36, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1799
1800 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1801 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_EBI73, 1, "EPS Bearer ID" },
1802 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1803 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1804 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1805 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1806 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1807 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1808 { GTPV2_DELETE_BEARER_REQUEST99, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1809 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1810 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1811 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1812 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1813 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1814 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1815 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1816 { GTPV2_DELETE_BEARER_REQUEST99, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1817
1818 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1819 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1820 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1821 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1822 { GTPV2_DELETE_SESSION_RESPONSE37, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1823
1824 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_EBI73, 0, "Linked EPS Bearer ID (LBI)" },
1825 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1826 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1827 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1828 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1829 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1830 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1831 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1832 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1833 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1834 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1835 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1836 { GTPV2_DELETE_BEARER_RESPONSE100, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1837
1838 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1839 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1840 { GTPV2_MODIFY_BEARER_COMMAND64, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1841
1842 { GTPV2_MODIFY_BEARER_FAILURE_INDICATION65, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1843 { GTPV2_MODIFY_BEARER_FAILURE_INDICATION65, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "SGW node level Load Control Info" },
1844
1845 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_FQ_CSID132, 0, "PGW-FQ-CSID" },
1846 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1847 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1848 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "PGW APN level Load Control Info" },
1849 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_LOAD_CONTROL_INF181, 2, "SGW node level Load Control Info" },
1850 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "PGW Overload Control Info" },
1851 { GTPV2_UPDATE_BEARER_REQUEST97, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1852 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1853 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1854 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1855 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1856 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 2, "PGW Control Plane IP Address" },
1857 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 3, "New SGW-C Address" },
1858 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 0, "Group Id" },
1859 { GTPV2_UPDATE_BEARER_REQUEST97, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_GROUP_ID216, 1, "New Group Id" },
1860
1861 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 0, "MME-FQ-CSID" },
1862 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 1, "SGW-FQ-CSID" },
1863 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 2, "ePDG-FQ-CSID" },
1864 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_FQ_CSID132, 3, "TWAN-FQ-CSID" },
1865 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1866 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1867 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 2, "TWAN/ePDG Overload Control Info" },
1868 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_IDENTIFIER169, 0, "TWAN Identifier" },
1869 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_IDENTIFIER169, 1, "WLAN Location Info" },
1870 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_TWAN_ID_TS179, 1, "WLAN Location Timestamp" },
1871 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_PORT_NR126, 0, "UE UDP Port" },
1872 { GTPV2_UPDATE_BEARER_RESPONSE98, 0, GTPV2_IE_PORT_NR126, 1, "UE TCP Por" },
1873
1874 { GTPV2_DELETE_BEARER_COMMAND66, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 0, "MME/S4-SGSN Overload Control Info" },
1875 { GTPV2_DELETE_BEARER_COMMAND66, 0, GTPV2_IE_OVERLOAD_CONTROL_INF180, 1, "SGW Overload Control Info" },
1876
1877 { GTPV2_DELETE_BEARER_FAILURE_INDICATION67, 0, GTPV2_IE_LOAD_CONTROL_INF181, 0, "PGW node level Load Control Info" },
1878 { GTPV2_DELETE_BEARER_FAILURE_INDICATION67, 0, GTPV2_IE_LOAD_CONTROL_INF181, 1, "SGW node level Load Control Info" },
1879
1880 { GTPV2_MODIFY_ACESSS_BEARER_REQUEST211, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1881 { GTPV2_MODIFY_ACESSS_BEARER_REQUEST211, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1882
1883 { GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212, 0, GTPV2_IE_BEARER_CTX93, 0, "Bearer Contexts to be Modified" },
1884 { GTPV2_MODIFY_ACCESS_BEARER_RESPONSE212, 0, GTPV2_IE_BEARER_CTX93, 1, "Bearer Contexts to be Removed" },
1885
1886 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 0, "E-UTRAN Transparent Container" },
1887 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 1, "UTRAN Transparent Container" },
1888 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_F_CONTAINER118, 2, "BSS Container" },
1889 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IP_ADDRESS74, 0, "HRPD access node S101 IP Address" },
1890 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IP_ADDRESS74, 1, "1xIWS S102 IP Address" },
1891 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 0, "S1-AP Cause" },
1892 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 1, "RANAP Cause" },
1893 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_CAUSE2, 2, "BSSGP Cause" },
1894 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_RFSP_INDEX144, 0, "Subscribed RFSP Index" },
1895 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_RFSP_INDEX144, 1, "RFSP Index in Use" },
1896 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 0, "SGW FQDN" },
1897 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 1, "SGSN FQDN" },
1898 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_FQDN136, 2, "MME FQDN" },
1899 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 0, "Subscribed Additional RRM Policy Index" },
1900 { GTPV2_FORWARD_RELOCATION_REQ133, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 1, "Additional RRM Policy Index in Use" },
1901 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 0, "PGW FQDN" },
1902 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 1, "Local Home Network ID" },
1903 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_SERVICES_AUTHORIZED210, 0, "LTE V2X Service Authorized" },
1904 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_SERVICES_AUTHORIZED210, 1, "NR V2X Service Authorized" },
1905 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_BIT_RATE211, 0, "LTE UE Sidelink Aggregate Maximum Bit Rate" },
1906 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_V2X_CONTEXT208, GTPV2_IE_BIT_RATE211, 1, "NR UE Sidelink Aggregate Maximum Bit Rate" },
1907 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1908 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1909 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1910 { GTPV2_FORWARD_RELOCATION_REQ133, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 1, "New PGW-C/SMF Address" },
1911
1912 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 0, "List of Set-up Bearers" },
1913 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 1, "List of Set-up RABs" },
1914 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 2, "List of Set-up PFCs" },
1915 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_BEARER_CTX93, 2, "List of Set-up Bearers for SCEF PDN Connections" },
1916 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 0, "S1-AP Cause" },
1917 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 1, "RANAP Cause" },
1918 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_CAUSE2, 2, "BSSGP Cause" },
1919 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 0, "E-UTRAN Transparent Container" },
1920 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 1, "UTRAN Transparent Container" },
1921 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_F_CONTAINER118, 2, "BSS Container" },
1922 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_FQDN136, 0, "SGSN Node Name" },
1923 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_FQDN136, 1, "MME Node Name" },
1924 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier" },
1925 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier" },
1926 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 2, "SGSN Identifier for MT-SMS" },
1927 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_IDENTIFIER176, 3, "MME Identifier for MT-SMS" },
1928 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 0, "SGSN Number" },
1929 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 1, "MME Number for MT-SMS" },
1930 { GTPV2_FORWARD_RELOCATION_RESP134, 0, GTPV2_IE_NODE_NUMBER175, 2, "MSC Number" },
1931
1932 { GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136, 0, GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, 0, "Secondary RAT Usage Data Report" },
1933 { GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136, 0, GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, 1, "Secondary RAT Usage Data Report from NG-RAN" },
1934
1935 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_FQDN136, 0, "SGSN Node Name" },
1936 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_FQDN136, 1, "MME Node Name" },
1937 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier" },
1938 { GTPV2_CONTEXT_REQUEST130, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier" },
1939
1940 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IP_ADDRESS74, 0, "HRPD access node S101 IP Address" },
1941 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IP_ADDRESS74, 1, "1xIWS S102 IP Address" },
1942 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_RFSP_INDEX144, 0, "Subscribed RFSP Index" },
1943 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_RFSP_INDEX144, 1, "RFSP Index in Use" },
1944 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 0, "SGW Node Name" },
1945 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 1, "SGSN Node Name" },
1946 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_FQDN136, 2, "MME Node Name" },
1947 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_INTEGER_NUMBER187, 0, "UE Usage Type" },
1948 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_INTEGER_NUMBER187, 1, "Remaining Running Service Gap Timer" },
1949 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 0, "Subscribed Additional RRM Policy Index" },
1950 { GTPV2_CONTEXT_RESPONSE131, 0, GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, 1, "Additional RRM Policy Index in Use" },
1951 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 0, "PGW FQDN" },
1952 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PDN_CONNECTION109, GTPV2_IE_FQDN136, 1, "Local Home Network ID" },
1953 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 0, "PGW Set FQDN" },
1954 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IE_PGW_FQDN215, 1, "Alternative PGW-C/SMF FQDN" },
1955 { GTPV2_CONTEXT_RESPONSE131, GTPV2_IE_PGW_CHANGE_INFO214, GTPV2_IP_ADDRESS74, 0, "Alternative PGW-C/SMF Address" },
1956
1957 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_NUMBER175, 0, "SGSN Number" },
1958 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_NUMBER175, 1, "MME Number for MT-SMS" },
1959 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_IDENTIFIER176, 0, "SGSN Identifier for MT-SMS" },
1960 { GTPV2_CONTEXT_ACKNOWLEDGE132, 0, GTPV2_IE_NODE_IDENTIFIER176, 1, "MME Identifier for MT-SMS" },
1961
1962 { GTPV2_CONFIGURATION_TRANSFER_TUNNEL141, 0, GTPV2_IE_TARGET_ID121, 0, "Target eNodeB ID / en-gNB ID / gnB ID" },
1963 { GTPV2_CONFIGURATION_TRANSFER_TUNNEL141, 0, GTPV2_IE_TARGET_ID121, 1, "Connected Target eNodeB ID" },
1964
1965 { 0, 0, 0, 0, NULL((void*)0) },
1966};
1967
1968#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])
1969
1970/* Code to dissect IE's */
1971
1972static void
1973dissect_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)))
1974{
1975 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
1976}
1977
1978/*
1979 * 8.3 International Mobile Subscriber Identity (IMSI)
1980 *
1981 * IMSI is defined in 3GPP TS 23.003
1982 * Editor's note: IMSI coding will be defined in 3GPP TS 24.301
1983 * Editor's note: In the first release of GTPv2 spec (TS 29.274v8.0.0) n = 8.
1984 * That is, the overall length of the IE is 11 octets.
1985 */
1986
1987static void
1988dissect_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)
1989{
1990 unsigned offset = 0;
1991 const char *imsi_str;
1992
1993 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
1994 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the wmem
1995 * allocated string will be returned.
1996 */
1997 imsi_str = dissect_e212_imsi(tvb, pinfo, tree, offset, length, false0);
1998 proto_item_append_text(item, "%s", imsi_str);
1999
2000 if (g_gtp_session) {
2001 args->imsi = imsi_str;
2002 }
2003}
2004
2005/*
2006 * 8.4 Cause
2007 */
2008
2009/* Table 8.4-1: Cause values */
2010static const value_string gtpv2_cause_vals[] = {
2011 {0, "Reserved"},
2012 /* Request / Initial message */
2013 { 1, "Reserved"},
2014 { 2, "Local Detach"},
2015 { 3, "Complete Detach"},
2016 { 4, "RAT changed from 3GPP to Non-3GPP"},
2017 { 5, "ISR deactivation"},
2018 { 6, "Error Indication received from RNC/eNodeB/S4-SGSN"},
2019 { 7, "IMSI Detach Only"},
2020 { 8, "Reactivation Requested"},
2021 { 9, "PDN reconnection to this APN disallowed"},
2022 { 10, "Access changed from Non-3GPP to 3GPP"},
2023 { 11, "PDN connection inactivity timer expires"},
2024 { 12, "PGW not responding"},
2025 { 13, "Network Failure"},
2026 { 14, "QoS parameter mismatch"},
2027 { 15, "EPS to 5GS Mobility"},
2028 /* Acceptance in a Response / triggered message */
2029 { 16, "Request accepted"},
2030 { 17, "Request accepted partially"},
2031 { 18, "New PDN type due to network preference"},
2032 { 19, "New PDN type due to single address bearer only"},
2033 /* 20-63 Spare. This value range shall be used by Cause values in an acceptance response/triggered message */
2034 { 20, "Spare"},
2035 { 21, "Spare"},
2036 { 22, "Spare"},
2037 { 23, "Spare"},
2038 { 24, "Spare"},
2039 { 25, "Spare"},
2040 { 26, "Spare"},
2041 { 27, "Spare"},
2042 { 28, "Spare"},
2043 { 29, "Spare"},
2044 { 30, "Spare"},
2045 { 31, "Spare"},
2046 { 32, "Spare"},
2047 { 33, "Spare"},
2048 { 34, "Spare"},
2049 { 35, "Spare"},
2050 { 36, "Spare"},
2051 { 37, "Spare"},
2052 { 38, "Spare"},
2053 { 39, "Spare"},
2054 { 40, "Spare"},
2055 { 41, "Spare"},
2056 { 42, "Spare"},
2057 { 43, "Spare"},
2058 { 44, "Spare"},
2059 { 45, "Spare"},
2060 { 46, "Spare"},
2061 { 47, "Spare"},
2062 { 48, "Spare"},
2063 { 49, "Spare"},
2064 { 50, "Spare"},
2065 { 51, "Spare"},
2066 { 52, "Spare"},
2067 { 53, "Spare"},
2068 { 54, "Spare"},
2069 { 55, "Spare"},
2070 { 56, "Spare"},
2071 { 57, "Spare"},
2072 { 58, "Spare"},
2073 { 59, "Spare"},
2074 { 60, "Spare"},
2075 { 61, "Spare"},
2076 { 62, "Spare"},
2077 { 63, "Spare"},
2078 /* Rejection in a Response / triggered message */
2079 { 64, "Context Not Found"},
2080 { 65, "Invalid Message Format"},
2081 { 66, "Version not supported by next peer"},
2082 { 67, "Invalid length"},
2083 { 68, "Service not supported"},
2084 { 69, "Mandatory IE incorrect"},
2085 { 70, "Mandatory IE missing"},
2086 { 71, "Shall not be used"},
2087 { 72, "System failure"},
2088 { 73, "No resources available"},
2089 { 74, "Semantic error in the TFT operation"},
2090 { 75, "Syntactic error in the TFT operation"},
2091 { 76, "Semantic errors in packet filter(s)"},
2092 { 77, "Syntactic errors in packet filter(s)"},
2093 { 78, "Missing or unknown APN"},
2094 { 79, "Shall not be used"},
2095 { 80, "GRE key not found"},
2096 { 81, "Relocation failure"},
2097 { 82, "Denied in RAT"},
2098 { 83, "Preferred PDN type not supported"},
2099 { 84, "All dynamic addresses are occupied"},
2100 { 85, "UE context without TFT already activated"},
2101 { 86, "Protocol type not supported"},
2102 { 87, "UE not responding"},
2103 { 88, "UE refuses"},
2104 { 89, "Service denied"},
2105 { 90, "Unable to page UE"},
2106 { 91, "No memory available"},
2107 { 92, "User authentication failed"},
2108 { 93, "APN access denied - no subscription"},
2109 { 94, "Request rejected(reason not specified)"},
2110 { 95, "P-TMSI Signature mismatch"},
2111 { 96, "IMSI/IMEI not known"},
2112 { 97, "Semantic error in the TAD operation"},
2113 { 98, "Syntactic error in the TAD operation"},
2114 { 99, "Shall not be used"},
2115 {100, "Remote peer not responding"},
2116 {101, "Collision with network initiated request"},
2117 {102, "Unable to page UE due to Suspension"},
2118 {103, "Conditional IE missing"},
2119 {104, "APN Restriction type Incompatible with currently active PDN connection"},
2120 {105, "Invalid overall length of the triggered response message and a piggybacked initial message"},
2121 {106, "Data forwarding not supported"},
2122 {107, "Invalid reply from remote peer"},
2123 {108, "Fallback to GTPv1"},
2124 {109, "Invalid peer"},
2125 {110, "Temporarily rejected due to handover/TAU/RAU procedure in progress"},
2126 {111, "Modifications not limited to S1-U bearers"},
2127 {112, "Request rejected for a PMIPv6 reason "},
2128 {113, "APN Congestion"},
2129 {114, "Bearer handling not supported"},
2130 {115, "UE already re-attached"},
2131 {116, "Multiple PDN connections for a given APN not allowed"},
2132 {117, "Target access restricted for the subscriber"},
2133 {118, "Shall not be used. See NOTE 2 and NOTE 3."},
2134 {119, "MME/SGSN refuses due to VPLMN Policy"},
2135 {120, "GTP-C Entity Congestion"},
2136 {121, "Late Overlapping Request"},
2137 {122, "Timed out Request"},
2138 {123, "UE is temporarily not reachable due to power saving"},
2139 {124, "Relocation failure due to NAS message redirection"},
2140 {125, "UE not authorised by OCS or external AAA Server"},
2141 {126, "Multiple accesses to a PDN connection not allowed"},
2142 {127, "Request rejected due to UE capability"},
2143 {128, "S1-U Path Failure" },
2144 {129, "5GC not allowed" },
2145 {130, "PGW mismatch with network slice subscribed by the UE" },
2146 {131, "Rejection due to paging restriction" },
2147
2148 /* 132-239 Spare. For future use in a triggered/response message */
2149 /* 240-255 Spare. For future use in an initial/request message */
2150 {0, NULL((void*)0)}
2151};
2152value_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) }
;
2153
2154/* Table 8.4-1: CS (Cause Source) */
2155static const true_false_string gtpv2_cause_cs = {
2156 "Originated by remote node",
2157 "Originated by node sending the message",
2158};
2159
2160static void
2161dissect_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)
2162{
2163 unsigned offset = 0;
2164 uint8_t tmp;
2165
2166 /* Cause value octet 5 */
2167 tmp = tvb_get_uint8(tvb, offset);
2168 if (g_gtp_session) {
2169 args->last_cause = tmp;
2170 }
2171 proto_tree_add_item(tree, hf_gtpv2_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2172
2173 /* Add Cause to ie_tree */
2174 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(tmp, &gtpv2_cause_vals_ext, "Unknown"), tmp);
2175 offset += 1;
2176
2177 /* Octet 6 Spare PCE BCE CS */
2178 static int* const oct6_flags[] = {
2179 &hf_gtpv2_spare_b7_b3,
2180 &hf_gtpv2_cause_pce,
2181 &hf_gtpv2_cause_bce,
2182 &hf_gtpv2_cause_cs,
2183 NULL((void*)0)
2184 };
2185
2186 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct6_flags, ENC_NA0x00000000);
2187 offset += 1;
2188
2189 /* If n = 2, a = 0 and the Cause IE shall be 6 octets long.
2190 * Therefore, octets "a(n+1) to a(n+4)" will not be present.
2191 * If n = 6, a = 1 and the Cause IE will be 10 octets long.
2192 */
2193 if ( length == 2 ) {
2194 return;
2195 }
2196 /*
2197 * If the rejection is due to a mandatory IE or a verifiable conditional IE is faulty
2198 * or missing, the offending IE shall be included within an additional field "a(n+1)
2199 * to a(n+4)". Only Type and Instance fields of the offending IE that caused the
2200 * rejection have a meaning. The length in the Octet 8-9 and spare bits in the Octet 10
2201 * shall be set to "0". In this case, the value of "n" shall be "6".
2202 * Otherwise, the value of "n" is equal to "2".
2203 */
2204
2205 /* Type of the offending IE */
2206 proto_tree_add_item(tree, hf_gtpv2_cause_off_ie_t, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2207 offset += 1;
2208
2209 /* Length */
2210 proto_tree_add_item(tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2211 offset += 2;
2212 /* a(n+4) Spare Instance */
2213 proto_tree_add_bits_item(tree, hf_gtpv2_spare_half_octet, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
2214 proto_tree_add_item(tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2215
2216}
2217
2218/*
2219 * 8.5 Recovery (Restart Counter)
2220 */
2221static void
2222dissect_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)))
2223{
2224 unsigned offset = 0;
2225 uint8_t recovery;
2226
2227 recovery = tvb_get_uint8(tvb, offset);
2228 proto_tree_add_item(tree, hf_gtpv2_rec, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2229 proto_item_append_text(item, "%u", recovery);
2230
2231}
2232
2233
2234/*Start SRVCC Messages*/
2235
2236/* 6.2 STN-SR */
2237static void
2238dissect_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)))
2239{
2240 proto_item *stn_sr_item;
2241 proto_tree *sub_tree;
2242 tvbuff_t *new_tvb;
2243 unsigned offset = 0;
2244
2245 stn_sr_item = proto_tree_add_item(tree, hf_gtpv2_stn_sr, tvb, offset, length, ENC_NA0x00000000);
2246 new_tvb = tvb_new_subset_length(tvb, offset, length);
2247 sub_tree = proto_item_add_subtree(stn_sr_item, ett_gtpv2_stn_sr);
2248
2249 /* Octet 5
2250 * contains the Nature of Address and Numbering Plan Indicator (NANPI) of the "AddressString" ASN.1 type (see 3GPP
2251 * 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
2252 * 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
2253 * filler "1111".
2254 */
2255 dissect_gsm_map_msisdn(new_tvb, pinfo, sub_tree);
2256}
2257
2258/* 6.3 Source to Target Transparent Container */
2259
2260static void
2261dissect_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)))
2262{
2263 unsigned offset = 0;
2264
2265 proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2266 offset += 1;
2267 /*ra_type_flag = 0;*/
2268
2269 /* Transparent Container
2270 * When target network is GERAN, this container carries the Old BSS to New BSS
2271 * Information IE defined in 3GPP TS 48.008 [8]. When target network is UTRAN, this container carries the Source RNC
2272 * to Target RNC Transparent Container IE defined in 3GPP TS 25.413 [9]. The Transparent container field includes the
2273 * IE value part as it is specified in the respective specification.
2274 */
2275 proto_tree_add_item(tree, hf_gtpv2_transparent_container, tvb, offset, length-1, ENC_NA0x00000000);
2276 /*
2277 * bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
2278 * dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU
2279 */
2280 if ((message_type == GTPV2_SRVCC_PS_TO_CS_REQUEST25) && (pref_decode_srvcc_p2c_trans_cont == PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1)) {
2281 tvbuff_t *new_tvb;
2282 proto_tree *sub_tree;
2283
2284 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");
2285 new_tvb = tvb_new_subset_remaining(tvb, offset);
2286 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
2287 }
2288
2289}
2290
2291/* 6.4 Target to Source Transparent Container */
2292static void
2293dissect_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)))
2294{
2295 unsigned offset = 0;
2296
2297 proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2298 offset += 1;
2299
2300 /* Transparent Container */
2301 proto_tree_add_item(tree, hf_gtpv2_transparent_container, tvb, offset, length-1, ENC_NA0x00000000);
2302
2303 /* It's too hard to figure out the content...
2304 6.4 Target to Source Transparent Container
2305
2306 The Target to Source Transparent Container contains information that shall be transferred transparently by CN entities
2307 from the target RAN to the source RAN.
2308
2309 When the target network is GERAN, the Transparent container field contains the value part of the Layer 3 Information
2310 IE defined in 3GPP TS 48.008 [8], i.e., octets 3 to n, excluding octet 1 (Element ID) and octet 2 (Length).
2311
2312 When the target network is UTRAN, this container carries the Target RNC to Source RNC Transparent Container IE
2313 defined in 3GPP TS 25.413 [9]. The Transparent container field contains a transparent copy of the corresponding
2314 ASN.1/PER IE (see subclauses 8.2.2 and 8.48 in 3GPP TS 29.274 [3]).
2315
2316 When the target network is E-UTRAN, the container carries the Target eNB To Source eNB Transparent Container IE
2317 defined in 3GPP TS 36.413 [14]. The Transparent container field contains a transparent copy of the corresponding
2318 ASN.1/PER IE (see subclauses 8.2.2 and 8.48 in 3GPP TS 29.274 [3]).
2319
2320 The receiver of this Information Element shall ignore the length of the transparent container encoded in octet 5 and shall
2321 derive the actual length of the container from the length encoded in octets 2 to 3 minus 1.
2322
2323 For backward compatibility, the sender of this Information Element shall set the octet 5 to the actual length of the
2324 transparent container if the size of the container is smaller or equal to 255 octets, and to the value "255" otherwise.
2325
2326 */
2327 if ((message_type == GTPV2_SRVCC_PS_TO_CS_RESPONSE26) && (pref_decode_srvcc_p2c_trans_cont == PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1)) {
2328 tvbuff_t *new_tvb;
2329 proto_tree *sub_tree;
2330
2331 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");
2332 new_tvb = tvb_new_subset_remaining(tvb, offset);
2333 dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
2334 }
2335
2336}
2337
2338/* 6.5 MM Context for E-UTRAN SRVCC */
2339static void
2340dissect_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)))
2341{
2342 unsigned offset = 0;
2343 uint8_t elm_len;
2344 proto_tree *ms_tree, *fi;
2345
2346 proto_tree_add_item(tree, hf_gtpv2_eksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2347 offset += 1;
2348 proto_tree_add_item(tree, hf_gtpv2_cksrvcc, tvb, offset, 16, ENC_NA0x00000000);
2349 offset += 16;
2350 proto_tree_add_item(tree, hf_gtpv2_iksrvcc, tvb, offset, 16, ENC_NA0x00000000);
2351 offset += 16;
2352
2353 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters, if they are not available,
2354 then the associated length field shall be set to zero, and the particular parameter field shall not be present.
2355 */
2356 /* Length of Mobile Station Classmark2 */
2357 elm_len = tvb_get_uint8(tvb, offset);
2358 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2359 offset += 1;
2360 if (elm_len) {
2361 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
2362 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2363 de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2364 offset += elm_len;
2365 }
2366
2367 /* Length of Mobile Station Classmark3 */
2368 elm_len = tvb_get_uint8(tvb, offset);
2369 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2370 offset += 1;
2371 if (elm_len) {
2372 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
2373 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2374 de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2375 offset += elm_len;
2376 }
2377
2378 /*Length of Supported Codec List */
2379 elm_len = tvb_get_uint8(tvb, offset);
2380 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2381 offset += 1;
2382 if (elm_len) {
2383 fi = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
2384 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
2385 de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2386 }
2387}
2388
2389/* 6.6 MM Context for UTRAN SRVCC */
2390static void
2391dissect_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)))
2392{
2393 unsigned offset = 0;
2394 uint8_t elm_len;
2395 proto_tree *ms_tree, *fi;
2396
2397 proto_tree_add_item(tree, hf_gtpv2_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2398 offset += 1;
2399
2400 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_ck_cs, tvb, offset, 16, ENC_NA0x00000000);
2401 offset += 16;
2402 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_ik_cs, tvb, offset, 16, ENC_NA0x00000000);
2403 offset += 16;
2404 proto_tree_add_item(tree, hf_gtpv2_utran_srvcc_kc, tvb, offset, 8, ENC_NA0x00000000);
2405 offset += 8;
2406 proto_tree_add_item(tree, hf_gtpv2_cksn, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2407 offset += 1;
2408
2409 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters, if they are not available,
2410 then the associated length field shall be set to zero, and the particular parameter field shall not be present.
2411 */
2412
2413 /*Length of Mobile Station Classmark2 */
2414 elm_len = tvb_get_uint8(tvb, offset);
2415 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2416 offset += 1;
2417 if (elm_len) {
2418 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
2419 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2420 de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2421 offset += elm_len;
2422 }
2423
2424 /*Length of Mobile Station Classmark3 */
2425 elm_len = tvb_get_uint8(tvb, offset);
2426 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2427 offset += 1;
2428 if (elm_len) {
2429 fi = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
2430 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
2431 de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2432 offset += elm_len;
2433 }
2434
2435 /*Length of Supported Codec List */
2436 elm_len = tvb_get_uint8(tvb, offset);
2437 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2438 offset += 1;
2439 if (elm_len) {
2440 fi = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
2441 ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
2442 de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
2443 }
2444
2445}
2446
2447/* 6.7 SRVCC Cause */
2448static const value_string gtpv2_srvcc_cause_vals[] = {
2449 {0, "Reserved"},
2450 {1, "Unspecified"},
2451 {2, "Handover/Relocation cancelled by source system "},
2452 {3, "Handover /Relocation Failure with Target system"},
2453 {4, "Handover/Relocation Target not allowed"},
2454 {5, "Unknown Target ID"},
2455 {6, "Target Cell not available"},
2456 {7, "No Radio Resources Available in Target Cell"},
2457 {8, "Failure in Radio Interface Procedure"},
2458 {9, "Permanent session leg establishment error"},
2459 {10, "Temporary session leg establishment error"},
2460
2461 {0, NULL((void*)0)}
2462};
2463static 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) }
;
2464
2465static void
2466dissect_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)))
2467{
2468 unsigned offset = 0;
2469 uint8_t srvcc_cause;
2470
2471 srvcc_cause = tvb_get_uint8(tvb, offset);
2472 proto_tree_add_item(tree, hf_gtpv2_srvcc_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2473 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(srvcc_cause, &gtpv2_srvcc_cause_vals_ext, "Unknown"), srvcc_cause);
2474
2475}
2476
2477/*
2478 * 3GPP TS 29.280 version 10.3.0
2479 * 6.8 Target RNC ID
2480 */
2481static void
2482dissect_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)))
2483{
2484 unsigned offset = 0;
2485 uint16_t rnc_id;
2486 proto_tree *subtree;
2487 uint32_t mcc;
2488 uint32_t mnc;
2489 uint32_t lac;
2490 uint32_t curr_offset;
2491
2492 /*ra_type_flag = 1;*/ /*Flag to be set to differentiate GERAN and UTRAN*/
2493 curr_offset = offset;
2494
2495 mcc = (tvb_get_uint8(tvb, curr_offset) & 0x0f) << 8;
2496 mcc |= (tvb_get_uint8(tvb, curr_offset) & 0xf0);
2497 mcc |= (tvb_get_uint8(tvb, curr_offset+1) & 0x0f);
2498 mnc = (tvb_get_uint8(tvb, curr_offset+2) & 0x0f) << 8;
2499 mnc |= (tvb_get_uint8(tvb, curr_offset+2) & 0xf0);
2500 mnc |= (tvb_get_uint8(tvb, curr_offset+1) & 0xf0) >> 4;
2501 if ((mnc & 0x000f) == 0x000f)
2502 mnc = mnc >> 4;
2503
2504 lac = tvb_get_ntohs(tvb, curr_offset + 3);
2505 rnc_id = tvb_get_ntohs(tvb, curr_offset + 5);
2506
2507 subtree = proto_tree_add_subtree_format(tree,
2508 tvb, curr_offset, 6, ett_gtpv2_rai, NULL((void*)0),
2509 "Routing area identification: %x-%x-%u-%u",
2510 mcc, mnc, lac, rnc_id);
2511
2512 dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, E212_RAI, true1);
2513 curr_offset+=3;
2514
2515 proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN0x00000000);
2516 curr_offset+=2;
2517 proto_tree_add_item(subtree, hf_gtpv2_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN0x00000000);
2518 /*curr_offset+=2;*/
2519
2520 /* no length check possible */
2521
2522
2523}
2524
2525/*
2526 * 3GPP TS 29.280
2527 * 6.9 Target Global Cell ID
2528 * The encoding of this IE is defined in 3GPP TS 29.002
2529 * GlobalCellId ::= OCTET STRING (SIZE (5..7))
2530 * -- Refers to Cell Global Identification defined in TS 3GPP TS 23.003 [17].
2531 * -- The internal structure is defined as follows:
2532 * -- octet 1 bits 4321 Mobile Country Code 1st digit
2533 * -- bits 8765 Mobile Country Code 2nd digit
2534 * -- octet 2 bits 4321 Mobile Country Code 3rd digit
2535 * -- bits 8765 Mobile Network Code 3rd digit
2536 * -- or filler (1111) for 2 digit MNCs
2537 * -- octet 3 bits 4321 Mobile Network Code 1st digit
2538 * -- bits 8765 Mobile Network Code 2nd digit
2539 * -- octets 4 and 5 Location Area Code according to TS 3GPP TS 24.008 [35]
2540 * -- octets 6 and 7 Cell Identity (CI) according to TS 3GPP TS 24.008 [35]
2541 */
2542static void
2543dissect_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)))
2544{
2545 unsigned offset = 0;
2546 uint8_t tgt_cell_id;
2547 proto_tree *subtree;
2548 uint32_t mcc;
2549 uint32_t mnc;
2550 uint32_t lac;
2551 uint32_t curr_offset;
2552
2553 curr_offset = offset;
2554
2555 mcc = (tvb_get_uint8(tvb, curr_offset) & 0x0f) << 8;
2556 mcc |= (tvb_get_uint8(tvb, curr_offset) & 0xf0);
2557 mcc |= (tvb_get_uint8(tvb, curr_offset+1) & 0x0f);
2558 mnc = (tvb_get_uint8(tvb, curr_offset+2) & 0x0f) << 8;
2559 mnc |= (tvb_get_uint8(tvb, curr_offset+2) & 0xf0);
2560 mnc |= (tvb_get_uint8(tvb, curr_offset+1) & 0xf0) >> 4;
2561 if ((mnc & 0x000f) == 0x000f)
2562 mnc = mnc >> 4;
2563
2564 lac = tvb_get_ntohs(tvb, curr_offset + 3);
2565 tgt_cell_id = tvb_get_uint8(tvb, curr_offset + 5);
2566
2567 subtree = proto_tree_add_subtree_format(tree,
2568 tvb, curr_offset, 6, ett_gtpv2_rai, NULL((void*)0),
2569 "Routing area identification: %x-%x-%u-%u",
2570 mcc, mnc, lac, tgt_cell_id);
2571
2572 dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, E212_RAI, true1);
2573
2574 proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset + 3, 2, ENC_BIG_ENDIAN0x00000000);
2575 proto_tree_add_item(subtree, hf_gtpv2_tgt_g_cell_id, tvb, curr_offset + 5, 2, ENC_BIG_ENDIAN0x00000000);
2576
2577 proto_item_append_text(item, "%x-%x-%u-%u", mcc, mnc, lac, tgt_cell_id);
2578 /* no length check possible */
2579
2580}
2581
2582/* 6.10 Tunnel Endpoint Identifier for Control Plane (TEID-C) */
2583static void
2584dissect_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)))
2585{
2586 unsigned offset = 0;
2587
2588 proto_tree_add_item(tree, hf_gtpv2_teid_c, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2589 offset += 4;
2590 if (length > 4)
2591 proto_tree_add_item(tree, hf_gtpv2_teid_c_spare, tvb, offset, length-4, ENC_NA0x00000000);
2592
2593 proto_item_append_text(item, "%u", tvb_get_ntohl(tvb, offset-4));
2594}
2595
2596/* 6.11 Sv Flags */
2597static void
2598dissect_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)))
2599{
2600 unsigned offset = 0;
2601 static int* const sv_flags[] = {
2602 &hf_gtpv2_sv_sti,
2603 &hf_gtpv2_sv_ics,
2604 &hf_gtpv2_sv_emind,
2605 NULL((void*)0)
2606 };
2607
2608 proto_tree_add_bitmask_list(tree, tvb, offset, 1, sv_flags, ENC_NA0x00000000);
2609 offset += 1;
2610 if (length > 1)
2611 proto_tree_add_item(tree, hf_gtpv2_teid_c_spare, tvb, offset, length-1, ENC_NA0x00000000);
2612}
2613
2614/* 6.12 Service Area Identifier */
2615
2616static void
2617dissect_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)))
2618{
2619 unsigned offset = 0;
2620
2621 /* 5 MCC digit 2 MCC digit 1
2622 * 6 MNC digit 3 MCC digit 3
2623 * 7 MNC digit 2 MNC digit 1
2624 */
2625 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_SAI, true1);
2626 offset += 3;
2627
2628 /* 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
2629 * least significant bit. The coding of the location area code is the responsibility of each administration. Coding using full
2630 * hexadecimal representation shall be used.
2631 */
2632 proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2633 offset += 2;
2634
2635 /* 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
2636 * least significant bit. The SAC is defined by the operator. See 3GPP TS 23.003 [4] subclause 12.5 for more information
2637 */
2638 proto_tree_add_item(tree, hf_gtpv2_sac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2639}
2640
2641/* 6.13 MM Context for CS to PS SRVCC */
2642static void
2643dissect_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)))
2644{
2645 unsigned offset = 0;
2646
2647 /* Octet 5 KSI"PS */
2648 proto_tree_add_item(tree, hf_gtpv2_ksi_ps, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2649 offset++;
2650
2651 /* octet 6 - 21 CK'PS */
2652 proto_tree_add_item(tree, hf_gtpv2_ck_ps, tvb, offset, 16, ENC_NA0x00000000);
2653 offset+=16;
2654
2655 /* octet 22 - 37 IK'PS */
2656 proto_tree_add_item(tree, hf_gtpv2_ik_ps, tvb, offset, 16, ENC_NA0x00000000);
2657 offset += 16;
2658
2659 /* octet 38 to 45 kc'PS */
2660 proto_tree_add_item(tree, hf_gtpv2_kc_ps, tvb, offset, 8, ENC_NA0x00000000);
2661 offset += 8;
2662
2663 /* Octet 46 CKSN"PS */
2664 proto_tree_add_item(tree, hf_gtpv2_cksn_ps, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2665 /*offset++;*/
2666
2667}
2668/*End SRVCC Messages*/
2669
2670
2671/*
2672 * 8.6 Access Point Name (APN)
2673 * The encoding the APN field follows 3GPP TS 23.003 [2] subclause 9.1.
2674 * The content of the APN field shall be the full APN with both the APN Network Identifier
2675 * and APN Operator Identifier being present as specified in 3GPP TS 23.003 [2]
2676 * 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.
2677 */
2678void
2679dissect_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)))
2680{
2681 const uint8_t *apn = NULL((void*)0);
2682
2683 proto_tree_add_item_ret_string(tree, hf_gtpv2_apn, tvb, 0, length, ENC_APN_STR0x00000054 | ENC_NA0x00000000, pinfo->pool, &apn);
2684 if (apn) {
2685 proto_item_append_text(item, "%s", apn);
2686 }
2687
2688}
2689
2690/*
2691 * 8.7 Aggregate Maximum Bit Rate (AMBR)
2692 */
2693
2694void
2695dissect_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)))
2696{
2697 unsigned offset = 0;
2698
2699 proto_tree_add_item(tree, hf_gtpv2_ambr_up, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2700 offset += 4;
2701 proto_tree_add_item(tree, hf_gtpv2_ambr_down, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2702}
2703
2704/*
2705 * 8.8 EPS Bearer ID (EBI)
2706 */
2707static void
2708dissect_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)))
2709{
2710
2711 unsigned offset = 0;
2712 uint8_t ebi;
2713
2714 /* Spare (all bits set to 0) B8 - B5*/
2715 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2716 /* EPS Bearer ID (EBI) B4 - B1 */
2717 ebi = tvb_get_uint8(tvb, offset);
2718 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2719 proto_item_append_text(item, "%u", ebi);
2720
2721}
2722/*
2723 * 8.9 IP Address
2724 */
2725static void
2726dissect_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)))
2727{
2728 int offset = 0;
2729
2730 if (length == 4)
2731 {
2732 proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv4, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
2733 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));
2734 }
2735 else if (length == 16)
2736 {
2737 proto_tree_add_item(tree, hf_gtpv2_ip_address_ipv6, tvb, offset, length, ENC_NA0x00000000);
2738 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));
2739 }
2740}
2741/*
2742 * 8.10 Mobile Equipment Identity (MEI)
2743 * The ME Identity field contains either the IMEI or the IMEISV
2744 * as defined in clause 6.2 of 3GPP TS 23.003 [2]. It is encoded
2745 * as specified in clause 7.7.53 of 3GPP TS 29.060 [4], beginning
2746 * with octet 4 of Figure 7.7.53.1. The IMEI(SV) digits are encoded
2747 * using BCD coding where IMEI is 15 BCD digits and IMEISV is 16 BCD
2748 * digits. For IMEI, bits 5 to 8 of the last octet shall be filled
2749 * with an end mark coded as '1111'.
2750 */
2751
2752void
2753dissect_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)))
2754{
2755 int offset = 0;
2756 char *mei_str;
2757
2758 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
2759 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
2760 * allocated string will be returned.
2761 */
2762 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);
2763 proto_item_append_text(item, "%s", mei_str);
2764}
2765
2766/*
2767 * 8.11 MSISDN
2768 *
2769 * MSISDN is defined in 3GPP TS 23.003
2770 * Editor's note: MSISDN coding will be defined in TS 24.301.
2771 */
2772static void
2773dissect_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)))
2774{
2775 const char *digit_str;
2776
2777 /* Octets 5 to (n+4) represent the MSISDN value is in international number format
2778 * as described in ITU-T Rec E.164 [25] and 3GPP TS 29.002 [41].
2779 * MSISDN value contains only the actual MSISDN number (does not contain the "nature of
2780 * address indicator" octet, which indicates "international number"
2781 * as in 3GPP TS 29.002 [41]) and is encoded as TBCD digits, i.e.
2782 * digits from 0 through 9 are encoded "0000" to "1001".
2783 * When there is an odd number of digits, bits 8 to 5 of the last octet are encoded with
2784 * the filler "1111".
2785 */
2786 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
2787 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
2788 * allocated string will be returned.
2789 */
2790 digit_str = dissect_e164_msisdn(tvb, pinfo, tree, 0, length, E164_ENC_BCD);
2791 proto_item_append_text(item, "%s", digit_str);
2792}
2793
2794/*
2795 * 8.12 Indication
2796 */
2797void
2798dissect_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)))
2799{
2800 unsigned offset = 0;
2801
2802 static int* const oct5_flags[] = {
2803 &hf_gtpv2_daf,
2804 &hf_gtpv2_dtf,
2805 &hf_gtpv2_hi,
2806 &hf_gtpv2_dfi,
2807 &hf_gtpv2_oi,
2808 &hf_gtpv2_isrsi,
2809 &hf_gtpv2_israi,
2810 &hf_gtpv2_sgwci,
2811 NULL((void*)0)
2812 };
2813
2814 /* Octet 5 DAF DTF HI DFI OI ISRSI ISRAI SGWCI */
2815 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct5_flags, ENC_NA0x00000000);
2816 if (length == 1) {
2817 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");
2818 return;
2819 }
2820
2821 offset += 1;
2822
2823 static int* const oct6_flags[] = {
2824 &hf_gtpv2_sqci,
2825 &hf_gtpv2_uimsi,
2826 &hf_gtpv2_cfsi,
2827 &hf_gtpv2_crsi,
2828 &hf_gtpv2_ps,
2829 &hf_gtpv2_pt,
2830 &hf_gtpv2_si,
2831 &hf_gtpv2_msv,
2832 NULL((void*)0)
2833 };
2834
2835 /* Octet 6 SQCI UIMSI CFSI CRSI P PT SI MSV
2836 * 3GPP TS 29.274 version 9.4.0 Release 9
2837 */
2838
2839 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct6_flags, ENC_NA0x00000000);
2840 offset += 1;
2841
2842 if (length == 2) {
2843 return;
2844 }
2845 /* Only present in version 9 and higher */
2846 static int* const oct7_flags[] = {
2847 &hf_gtpv2_retloc,
2848 &hf_gtpv2_pbic,
2849 &hf_gtpv2_srni,
2850 &hf_gtpv2_s6af,
2851 &hf_gtpv2_s4af,
2852 &hf_gtpv2_mbmdt,
2853 &hf_gtpv2_israu,
2854 &hf_gtpv2_ccrsi,
2855 NULL((void*)0)
2856 };
2857
2858 /* Octet 7 RetLoc PBIC SRNI S6AF S4AF MBMDT ISRAU CCRSI */
2859 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct7_flags, ENC_NA0x00000000);
2860 offset += 1;
2861
2862 if (length == 3) {
2863 return;
2864 }
2865 static int* const oct8_flags[] = {
2866 &hf_gtpv2_cprai,
2867 &hf_gtpv2_arrl,
2868 &hf_gtpv2_ppof,
2869 &hf_gtpv2_ppon_ppei,
2870 &hf_gtpv2_ppsi,
2871 &hf_gtpv2_csfbi,
2872 &hf_gtpv2_clii,
2873 &hf_gtpv2_cpsr,
2874 NULL((void*)0)
2875 };
2876
2877 /* Octet 8 CPRAI ARRL PPOF PPON/PPEI PPSI CSFBI CLII CPSR */
2878 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct8_flags, ENC_NA0x00000000);
2879 offset += 1;
2880
2881 if (length == 4) {
2882 return;
2883 }
2884
2885 static int* const oct9_flags[] = {
2886 &hf_gtpv2_nsi,
2887 &hf_gtpv2_uasi,
2888 &hf_gtpv2_dtci,
2889 &hf_gtpv2_bdwi,
2890 &hf_gtpv2_psci,
2891 &hf_gtpv2_pcri,
2892 &hf_gtpv2_aosi,
2893 &hf_gtpv2_aopi,
2894 NULL((void*)0)
2895 };
2896
2897 /* Octet 9 NSI UASI DTCI BDWI PSCI PCRI AOSI AOPI */
2898 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct9_flags, ENC_NA0x00000000);
2899 offset += 1;
2900
2901 if (length == 5) {
2902 return;
2903 }
2904
2905 static int* const oct10_flags[] = {
2906 &hf_gtpv2_roaai,
2907 &hf_gtpv2_epcosi,
2908 &hf_gtpv2_cpopci,
2909 &hf_gtpv2_pmtsmi,
2910 &hf_gtpv2_s11tf,
2911 &hf_gtpv2_pnsi,
2912 &hf_gtpv2_unaccsi,
2913 &hf_gtpv2_wpmsi,
2914 NULL((void*)0)
2915 };
2916 /* Octet 10 ROAAI EPCOSI CPOPCI PMTSMI S11TF PNSI UNACCSI WPMSI */
2917 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct10_flags, ENC_NA0x00000000);
2918 offset += 1;
2919
2920 if (length == 6){
2921 return;
2922 }
2923
2924 static int* const oct11_flags[] = {
2925 &hf_gtpv2_5gsnn26,
2926 &hf_gtpv2_reprefi,
2927 &hf_gtpv2_5gsiwk,
2928 &hf_gtpv2_eevrsi,
2929 &hf_gtpv2_ltemui,
2930 &hf_gtpv2_ltempi,
2931 &hf_gtpv2_enbcrsi,
2932 &hf_gtpv2_tspcmi,
2933 NULL((void*)0)
2934 };
2935 /*Octet 11 5GSNN26 REPREFI 5GSIWK EEVRSI LTEMUI LTEMPI ENBCRSI TSPCMI */
2936 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct11_flags, ENC_NA0x00000000);
2937 offset += 1;
2938
2939 if (length == 7){
2940 return;
2941 }
2942
2943 static int* const oct12_flags[] = {
2944 &hf_gtpv2_csrmfi,
2945 &hf_gtpv2_mtedtn,
2946 &hf_gtpv2_mtedta,
2947 &hf_gtpv2_n5gnmi,
2948 &hf_gtpv2_5gcnrs,
2949 &hf_gtpv2_5gcnri,
2950 &hf_gtpv2_5srhoi,
2951 &hf_gtpv2_ethpdn,
2952 NULL((void*)0)
2953 };
2954 /* Octet 12 CSRMFI MTEDTN MTEDTA N5GNMI 5GCNRS 5GCNRI 5SRHOI ETHPDN */
2955
2956 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct12_flags, ENC_NA0x00000000);
2957 offset += 1;
2958
2959 if (length == 8) {
2960 return;
2961 }
2962
2963 static int* const oct13_flags[] = {
2964 &hf_gtpv2_nspusi,
2965 &hf_gtpv2_pgwrnsi,
2966 &hf_gtpv2_rppcsi,
2967 &hf_gtpv2_pgwchi,
2968 &hf_gtpv2_sissme,
2969 &hf_gtpv2_nsenbi,
2970 &hf_gtpv2_idfupf,
2971 &hf_gtpv2_emci,
2972 NULL((void*)0)
2973 };
2974
2975 /* Octet 13 NSOUSI PGWRNSI RPPCSI PGWCHI SISSME NSENBI IDFUPF EMCI */
2976 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct13_flags, ENC_NA0x00000000);
2977 offset += 1;
2978
2979 if (length == 9) {
2980 return;
2981 }
2982
2983 static int* const oct14_flags[] = {
2984 &hf_gtpv2_spare_b7_b4,
2985 &hf_gtpv2_lapcosi,
2986 &hf_gtpv2_ltemsai,
2987 &hf_gtpv2_srtpi,
2988 &hf_gtpv2_upipsi,
2989 NULL((void*)0)
2990 };
2991
2992 /* Octet 13 Spare LAPCOSI LTEMSAI SRTPI UPIPSI */
2993 proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct14_flags, ENC_NA0x00000000);
2994 offset += 1;
2995
2996 if (length == 10) {
2997 return;
2998 }
2999
3000 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
3001
3002
3003}
3004
3005/*
3006 * 8.13 Protocol Configuration Options (PCO)
3007 * Protocol Configuration Options (PCO) is transferred via GTP tunnels. The sending entity copies the value part of the
3008 * 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
3009 * as per clause 10.5.6.3 of 3GPP TS 24.008 [5], starting with octet 3.
3010 * Dissected in packet-gsm_a_gm.c
3011 */
3012static void
3013dissect_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)))
3014{
3015 switch (message_type) {
3016 case GTPV2_CREATE_SESSION_REQUEST32:
3017 case GTPV2_DELETE_SESSION_REQUEST36:
3018 case GTPV2_BEARER_RESOURCE_COMMAND68:
3019 case GTPV2_CREATE_BEARER_RESPONSE96:
3020 case GTPV2_UPDATE_BEARER_RESPONSE98:
3021 case GTPV2_DELETE_BEARER_RESPONSE100:
3022 /* PCO options as MS to network direction */
3023 pinfo->link_dir = P2P_DIR_UL0;
3024 break;
3025 case GTPV2_CREATE_SESSION_RESPONSE33:
3026 case GTPV2_MODIFY_BEARER_RESPONSE35:
3027 case GTPV2_DELETE_SESSION_RESPONSE37:
3028 case GTPV2_CREATE_BEARER_REQUEST95:
3029 case GTPV2_UPDATE_BEARER_REQUEST97:
3030 case GTPV2_DELETE_BEARER_REQUEST99:
3031 /* PCO options as Network to MS direction: */
3032 pinfo->link_dir = P2P_DIR_DL1;
3033 break;
3034 default:
3035 break;
3036 }
3037 de_sm_pco(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3038}
3039
3040/*
3041 * 8.14 PDN Address Allocation (PAA)
3042 */
3043
3044static const value_string gtpv2_pdn_type_vals[] = {
3045 {1, "IPv4"},
3046 {2, "IPv6"},
3047 {3, "IPv4/IPv6"},
3048 {4, "Non-IP"},
3049 {5, "Ethernet"},
3050 {0, NULL((void*)0)}
3051};
3052value_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) }
;
3053
3054void
3055dissect_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)))
3056{
3057 unsigned offset = 0;
3058 uint8_t pdn_type;
3059
3060 pdn_type = tvb_get_uint8(tvb, offset);
3061 proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3062 offset += 1;
3063 switch (pdn_type)
3064 {
3065 case 1:
3066 /* IPv4 */
3067 if (length != 5) {
3068 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3069 "Wrong length indicated. Expected 5, got %u", length);
3070 return;
3071 }
3072 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3073 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));
3074 break;
3075 case 2:
3076 /* IPv6*/
3077 /* If PDN type value indicates IPv6, octet 6 contains the IPv6 Prefix Length.
3078 * Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
3079 * Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
3080 * and Interface Identifier and bit 1 of octet 22 the least significant bit.
3081 */
3082 if (length != 18) {
3083 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3084 "Wrong length indicated. Expected 18, got %u", length);
3085 return;
3086 }
3087 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3088 offset += 1;
3089 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3090 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));
3091 break;
3092 case 3:
3093 /* IPv4/IPv6 */
3094 /* If PDN type value indicates IPv4v6, octet 6 contains the IPv6 Prefix Length.
3095 * Octets 7 through 22 contain an IPv6 Prefix and Interface Identifier.
3096 * Bit 8 of octet 7 represents the most significant bit of the IPv6 Prefix
3097 * and Interface Identifier and bit 1 of octet 22 the least significant bit.
3098 * Octets 23 through 26 contain an IPv4 address. Bit 8 of octet 23 represents
3099 * the most significant bit of the IPv4 address and bit 1 of octet 26 the least
3100 * significant bit.
3101 */
3102 if (length != 22) {
3103 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3104 "Wrong length indicated. Expected 22, got %u", length);
3105 return;
3106 }
3107 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3108 offset += 1;
3109 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3110 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));
3111 offset += 16;
3112 proto_tree_add_item(tree, hf_gtpv2_pdn_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3113 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));
3114 break;
3115 case 4: /* Non IP */
3116 case 5: /* Ethernet */
3117 /* If PDN type value indicates Non-IP or Ethernet, octets from 6 to 'n+4'
3118 shall not be present. */
3119 if (length != 1) {
3120 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3121 "Wrong length indicated. Expected 1, got %u", length);
3122 return;
3123 }
3124 default:
3125 break;
3126 }
3127}
3128/*
3129 * 8.15 Bearer Quality of Service (Bearer QoS)
3130 */
3131
3132void
3133dissect_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)))
3134{
3135 unsigned offset = 0;
3136 static int* const bearer_qos_oct1_flags[] = {
3137 &hf_gtpv2_bearer_qos_pci,
3138 &hf_gtpv2_bearer_qos_pl,
3139 &hf_gtpv2_bearer_qos_pvi,
3140 NULL((void*)0)
3141 };
3142 proto_tree_add_bitmask_list(tree, tvb, offset, 1, bearer_qos_oct1_flags, ENC_BIG_ENDIAN0x00000000);
3143 offset += 1;
3144 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3145 offset += 1;
3146 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3147 offset += 5;
3148 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3149 offset += 5;
3150 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3151 offset += 5;
3152 proto_tree_add_item(tree, hf_gtpv2_bearer_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3153}
3154
3155/*
3156 * 8.16 Flow Quality of Service (Flow QoS)
3157 */
3158
3159static void
3160dissect_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)))
3161{
3162 unsigned offset = 0;
3163 proto_tree_add_item(tree, hf_gtpv2_flow_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3164 offset += 1;
3165 proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3166 offset += 5;
3167 proto_tree_add_item(tree, hf_gtpv2_flow_qos_mbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3168 offset += 5;
3169 proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_up, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3170 offset += 5;
3171 proto_tree_add_item(tree, hf_gtpv2_flow_qos_gbr_down, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
3172}
3173
3174/*
3175 * 8.17 RAT Type
3176 */
3177static const value_string gtpv2_rat_type_vals[] = {
3178 {0, "Reserved"},
3179 {1, "UTRAN"},
3180 {2, "GERAN"},
3181 {3, "WLAN"},
3182 {4, "GAN"},
3183 {5, "HSPA Evolution"},
3184 {6, "EUTRAN"},
3185 {7, "Virtual"},
3186 {8, "EUTRAN-NB-IoT"},
3187 {9, "LTE-M"},
3188 {10, "NR"},
3189 {11, "WB-E-UTRAN(LEO)"},
3190 {12, "WB-E-UTRAN(MEO)"},
3191 {13, "WB-E-UTRAN(GEO)"},
3192 {14, "WB-E-UTRAN(OTHERSAT)"},
3193 {15, "EUTRAN-NB-IoT(LEO)"},
3194 {16, "EUTRAN-NB-IoT(MEO)"},
3195 {17, "EUTRAN-NB-IoT(GEO)"},
3196 {18, "EUTRAN-NB-IoT(OTHERSAT)"},
3197 {19, "LTE-M(LEO)"},
3198 {20, "LTE-M(MEO)"},
3199 {21, "LTE-M(GEO)"},
3200 {22, "LTE-M(OTHERSAT)"},
3201 {0, NULL((void*)0)}
3202};
3203value_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) }
;
3204
3205
3206static void
3207dissect_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)))
3208{
3209 uint8_t rat_type;
3210
3211 rat_type = tvb_get_uint8(tvb, 0);
3212 proto_tree_add_item(tree, hf_gtpv2_rat_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
3213 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(rat_type, &gtpv2_rat_type_vals_ext, "Unknown"), rat_type);
3214
3215}
3216
3217/*
3218 * 8.18 Serving Network
3219 */
3220static void
3221dissect_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)))
3222{
3223 char *mcc_mnc_str;
3224
3225 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_SERV_NET, true1);
3226 proto_item_append_text(item, "%s", mcc_mnc_str);
3227}
3228
3229/*
3230 * 8.19 EPS Bearer Level Traffic Flow Template (Bearer TFT)
3231 */
3232
3233static void
3234dissect_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)))
3235{
3236 /* The detailed coding of Traffic Aggregate
3237 * Description is specified in 3GPP TS 24.008 [5] ,
3238 * clause 10.5.6.12, beginning with octet 3..
3239 * Use the decoding in packet-gsm_a_gm.c
3240 */
3241 de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3242
3243}
3244 /* 8.20 Traffic Aggregate Description (TAD)
3245 */
3246static void
3247dissect_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)))
3248{
3249 /* The detailed coding of Traffic Aggregate
3250 * Description is specified in 3GPP TS 24.008 [5] ,
3251 * clause 10.5.6.12, beginning with octet 3..
3252 * Use the decoding in packet-gsm_a_gm.c
3253 */
3254 de_sm_tflow_temp(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
3255}
3256
3257/*
3258 * 8.21 User Location Info (ULI)
3259 *
3260 * The flags ECGI, TAI, RAI, SAI and CGI in octed 5 indicate if the corresponding
3261 * fields are present in the IE or not. If one of these flags is set to "0",
3262 * the corresponding field is not present at all. The respective identities are defined in 3GPP
3263 * TS 23.003 [2].
3264 * Editor's Note: The definition of ECGI is missing in 3GPP TS 23.003 v8.1.0.
3265 * It can be found in 3GPP TS 36.413 v8.3.0, but it is expected that it will be moved
3266 * to 23.003 in a future version.
3267 */
3268char*
3269dissect_gtpv2_tai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset, bool_Bool is_5gs)
3270{
3271 char *str = NULL((void*)0);
3272 char *mcc_mnc_str;
3273 uint32_t tac;
3274 const char *tac_name_str = NULL((void*)0);
3275 proto_item *item;
3276
3277 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_TAI, true1);
3278 *offset += 3;
3279 if (is_5gs) {
3280 proto_tree_add_item_ret_uint(tree, hf_gtpv2_5gs_tai_tac, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &tac);
3281 *offset += 3;
3282 } else {
3283 item = proto_tree_add_item_ret_uint(tree, hf_gtpv2_tai_tac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000, &tac);
Value stored to 'item' is never read
3284 if (gbl_resolv_flags.tac_name && (tac_name_str = tac_name_lookup(tac)) != NULL((void*)0)) {
3285 item = proto_tree_add_string(tree, hf_gtpv2_tai_tac_name, tvb, *offset, 2, tac_name_str);
3286 proto_item_set_generated(item);
3287 }
3288 *offset += 2;
3289 }
3290 str = wmem_strdup_printf(pinfo->pool, "%s, TAC 0x%x",
3291 mcc_mnc_str,
3292 tac);
3293
3294 return str;
3295}
3296
3297static char*
3298dissect_gtpv2_ecgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
3299{
3300 char *str = NULL((void*)0);
3301 char *mcc_mnc_str;
3302 uint8_t octet;
3303 uint32_t octet4;
3304 uint8_t spare;
3305 uint32_t ECGI;
3306 static int* const ECGI_flags[] = {
3307 &hf_gtpv2_enodebid,
3308 &hf_gtpv2_cellid,
3309 NULL((void*)0)
3310 };
3311
3312 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_ECGI, true1);
3313 *offset += 3;
3314 /* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare
3315 * and hence they would not make any difference to the hex string following it,
3316 * thus we directly read 4 bytes from the tvb
3317 */
3318
3319 octet = tvb_get_uint8(tvb, *offset);
3320 spare = octet & 0xF0;
3321 octet4 = tvb_get_ntohl(tvb, *offset);
3322 ECGI = octet4 & 0x0FFFFFFF;
3323 proto_tree_add_uint(tree, hf_gtpv2_ecgi_eci_spare, tvb, *offset, 1, spare);
3324 /* The coding of the E-UTRAN cell identifier is the responsibility of each administration.
3325 * Coding using full hexadecimal representation shall be used.
3326 */
3327 proto_tree_add_bitmask(tree, tvb, *offset, hf_gtpv2_ecgi_eci, ett_gtpv2_eci, ECGI_flags, ENC_BIG_ENDIAN0x00000000);
3328 *offset += 4;
3329 str = wmem_strdup_printf(pinfo->pool, "%s, ECGI 0x%x",
3330 mcc_mnc_str,
3331 ECGI);
3332
3333
3334 return str;
3335}
3336
3337static char*
3338dissect_gtpv2_rai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
3339{
3340 char *str = NULL((void*)0);
3341 char *mcc_mnc_str;
3342 uint16_t lac, rac;
3343
3344 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_RAI, true1);
3345 *offset += 3;
3346 lac = tvb_get_ntohs(tvb, *offset);
3347 proto_tree_add_item(tree, hf_gtpv2_rai_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3348 *offset += 2;
3349 /* 3GPP 29.274 8.21.3 RAI Field
3350 * "Only Octet c+5 contains the RAC. Octet c+6 is coded as all 1's (11111111)."
3351 * (We could, here and in GTP, check that the other octet is all 1's.)
3352 */
3353 rac = tvb_get_uint8(tvb, *offset);
3354 proto_tree_add_item(tree, hf_gtpv2_rai_rac, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
3355 *offset += 2;
3356 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, RAC 0x%x",
3357 mcc_mnc_str,
3358 lac,
3359 rac);
3360
3361 return str;
3362}
3363
3364static char*
3365dissect_gtpv2_sai_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
3366{
3367 char *str = NULL((void*)0);
3368 char *mcc_mnc_str;
3369 uint16_t lac, sac;
3370
3371 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_SAI, true1);
3372 *offset += 3;
3373 lac = tvb_get_ntohs(tvb, *offset);
3374 proto_tree_add_item(tree, hf_gtpv2_sai_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3375 *offset += 2;
3376 sac = tvb_get_ntohs(tvb, *offset);
3377 proto_tree_add_item(tree, hf_gtpv2_sai_sac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3378 *offset += 2;
3379 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, SAC 0x%x",
3380 mcc_mnc_str,
3381 lac,
3382 sac);
3383
3384 return str;
3385}
3386
3387static char*
3388dissect_gtpv2_cgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
3389{
3390 char *str = NULL((void*)0);
3391 char *mcc_mnc_str;
3392 uint16_t lac, ci;
3393
3394 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_CGI, true1);
3395 *offset += 3;
3396 lac = tvb_get_ntohs(tvb, *offset);
3397 proto_tree_add_item(tree, hf_gtpv2_uli_cgi_lac, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3398 *offset += 2;
3399 ci = tvb_get_ntohs(tvb, *offset);
3400 proto_tree_add_item(tree, hf_gtpv2_uli_cgi_ci, tvb, *offset, 2, ENC_BIG_ENDIAN0x00000000);
3401 *offset += 2;
3402 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x, CI 0x%x",
3403 mcc_mnc_str,
3404 lac,
3405 ci);
3406
3407 return str;
3408}
3409
3410static char*
3411dissect_gtpv2_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
3412{
3413 char *str = NULL((void*)0);
3414 char *mcc_mnc_str;
3415 uint32_t macro_enodeb_id;
3416
3417 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
3418 *offset += 3;
3419 /* The Macro eNodeB ID consists of 20 bits.
3420 * Bit 4 of Octet 4 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
3421 */
3422 proto_tree_add_item_ret_uint(tree, hf_gtpv2_macro_enodeb_id, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &macro_enodeb_id);
3423 *offset += 3;
3424
3425 str = wmem_strdup_printf(pinfo->pool, "%s, Macro eNodeB ID 0x%x",
3426 mcc_mnc_str,
3427 macro_enodeb_id);
3428
3429 return str;
3430}
3431
3432static const true_false_string gtpv2_smenb = {
3433 "Short Macro eNodeB ID",
3434 "Long Macro eNodeB ID",
3435};
3436
3437static char*
3438dissect_gtpv2_ext_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset, int hfindex)
3439{
3440 char *str = NULL((void*)0);
3441 char *mcc_mnc_str;
3442 uint32_t ext_macro_enodeb_id;
3443
3444 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
3445 *offset += 3;
3446 /* The Extended Macro eNodeB ID consists of 21 bits. */
3447 proto_tree_add_item(tree, hf_gtpv2_smenb, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
3448 proto_tree_add_item_ret_uint(tree, hfindex, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &ext_macro_enodeb_id);
3449 *offset += 3;
3450
3451 str = wmem_strdup_printf(pinfo->pool, "%s, Extended Macro %seNodeB ID 0x%x",
3452 mcc_mnc_str,
3453 hfindex == hf_gtpv2_ext_macro_ng_enodeb_id ? "ng-" : "",
3454 ext_macro_enodeb_id);
3455
3456 return str;
3457}
3458
3459
3460static char*
3461decode_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)
3462{
3463 unsigned offset = 1; /* flags are already dissected */
3464 proto_tree *part_tree;
3465 char *mcc_mnc_str;
3466 char *str = NULL((void*)0);
3467
3468 /* 8.21.1 CGI field */
3469 if (flags & GTPv2_ULI_CGI_MASK0x01)
3470 {
3471
3472 proto_item_append_text(item, "CGI ");
3473 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3474 ett_gtpv2_uli_field, NULL((void*)0), "Cell Global Identity (CGI)");
3475
3476 str = dissect_gtpv2_cgi(tvb, pinfo, part_tree, &offset);
3477
3478 if (offset == length)
3479 return str;
3480 }
3481
3482 /* 8.21.2 SAI field */
3483 if (flags & GTPv2_ULI_SAI_MASK0x02)
3484 {
3485 proto_item_append_text(item, "SAI ");
3486 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3487 ett_gtpv2_uli_field, NULL((void*)0), "Service Area Identity (SAI)");
3488
3489 str = dissect_gtpv2_sai_common(tvb, pinfo, part_tree, &offset);
3490
3491 if (offset == length)
3492 return str;
3493 }
3494 /* 8.21.3 RAI field */
3495 if (flags & GTPv2_ULI_RAI_MASK0x04)
3496 {
3497 proto_item_append_text(item, "RAI ");
3498 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3499 ett_gtpv2_uli_field, NULL((void*)0), "Routeing Area Identity (RAI)");
3500
3501 str = dissect_gtpv2_rai(tvb, pinfo, part_tree, &offset);
3502
3503 if (offset == length)
3504 return str;
3505 }
3506 /* 8.21.4 TAI field */
3507 if (flags & GTPv2_ULI_TAI_MASK0x08)
3508 {
3509 proto_item_append_text(item, "TAI ");
3510 part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
3511 ett_gtpv2_uli_field, NULL((void*)0), "Tracking Area Identity (TAI)");
3512
3513 str = dissect_gtpv2_tai(tvb, pinfo, part_tree, &offset, false0);
3514
3515 if (offset == length)
3516 return str;
3517 }
3518 /* 8.21.5 ECGI field */
3519 if (flags & GTPv2_ULI_ECGI_MASK0x10)
3520 {
3521 proto_item_append_text(item, "ECGI ");
3522 part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
3523 ett_gtpv2_uli_field, NULL((void*)0), "E-UTRAN Cell Global Identifier (ECGI)");
3524
3525 str = dissect_gtpv2_ecgi(tvb, pinfo, part_tree, &offset);
3526
3527 if (offset == length)
3528 return str;
3529
3530 }
3531 /* 8.21.6 LAI field */
3532 if (flags & GTPv2_ULI_LAI_MASK0x20)
3533 {
3534 uint32_t lac;
3535 proto_item_append_text(item, "LAI ");
3536 part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
3537 ett_gtpv2_uli_field, NULL((void*)0), "LAI (Location Area Identifier)");
3538 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, E212_LAI, true1);
3539 offset += 3;
3540
3541 /* The Location Area Code (LAC) consists of 2 octets. Bit 8 of Octet f+3 is the most significant bit
3542 * and bit 1 of Octet f+4 the least significant bit. The coding of the location area code is the
3543 * responsibility of each administration. Coding using full hexadecimal representation shall be used.
3544 */
3545 proto_tree_add_item_ret_uint(part_tree, hf_gtpv2_uli_lai_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &lac);
3546 offset += 2;
3547 str = wmem_strdup_printf(pinfo->pool, "%s, LAC 0x%x",
3548 mcc_mnc_str,
3549 lac);
3550
3551 }
3552 /* 8.21.7 Macro eNodeB ID field */
3553 if (flags & GTPv2_ULI_MACRO_eNB_ID_MASK0x40)
3554 {
3555 proto_item_append_text(item, "Macro eNodeB ID ");
3556 part_tree = proto_tree_add_subtree(tree, tvb, offset, 6,
3557 ett_gtpv2_uli_field, NULL((void*)0), "Macro eNodeB ID");
3558
3559 str = dissect_gtpv2_macro_enodeb_id(tvb, pinfo, part_tree, &offset);
3560
3561 if (offset == length)
3562 return str;
3563 }
3564
3565 /* 8.21.8 Extended Macro eNodeB ID field */
3566 if (flags & GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80)
3567 {
3568 proto_item_append_text(item, "Ext Macro eNodeB ID ");
3569 part_tree = proto_tree_add_subtree(tree, tvb, offset, 6,
3570 ett_gtpv2_uli_field, NULL((void*)0), "Extended Macro eNodeB ID");
3571
3572 str = dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, part_tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
3573
3574 if (offset == length)
3575 return str;
3576 }
3577
3578 return str;
3579
3580}
3581
3582void
3583dissect_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)))
3584{
3585 unsigned offset = 0;
3586 uint64_t flags;
3587
3588 static int * const gtpv2_uli_flags[] = {
3589 &hf_gtpv2_uli_ext_macro_enb_id_flg,
3590 &hf_gtpv2_uli_macro_enb_id_flg,
3591 &hf_gtpv2_uli_lai_flg,
3592 &hf_gtpv2_uli_ecgi_flg,
3593 &hf_gtpv2_uli_tai_flg,
3594 &hf_gtpv2_uli_rai_flg,
3595 &hf_gtpv2_uli_sai_flg,
3596 &hf_gtpv2_uli_cgi_flg,
3597 NULL((void*)0)
3598 };
3599
3600 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_gtpv2_uli_flags,
3601 ett_gtpv2_uli_flags, gtpv2_uli_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04| BMT_NO_INT0x02, &flags);
3602
3603 decode_gtpv2_uli(tvb, pinfo, tree, item, length, instance, (unsigned)flags);
3604
3605 return;
3606}
3607
3608/* Diameter 3GPP AVP Code: 22 3GPP-User-Location-Info */
3609/*
3610 * TS 29.061 v15.5.0
3611 * 16.4.7.2 Coding 3GPP Vendor-Specific RADIUS attributes
3612 */
3613static const value_string geographic_location_type_vals[] = {
3614 {0, "CGI"},
3615 {1, "SAI"},
3616 {2, "RAI"},
3617 {128, "TAI"},
3618 {129, "ECGI"},
3619 {130, "TAI and ECGI"},
3620 {131, "eNodeB ID"},
3621 {132, "TAI and eNodeB ID"},
3622 {133, "extended eNodeB ID"},
3623 {134, "TAI and extended eNodeB ID"},
3624 {135, "NCGI"},
3625 {136, "5GS TAI"},
3626 {137, "5GS TAI and NCGI"},
3627 {138, "NG-RAN Node ID"},
3628 {139, "5GS TAI and NG-RAN Node ID"},
3629 /* 140-255 Spare for future use */
3630 {0, NULL((void*)0)}
3631};
3632
3633static int
3634dissect_3gpp_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, char **avp_str)
3635{
3636 unsigned offset = 0;
3637 unsigned length;
3638 unsigned flags;
3639 uint32_t flags_3gpp;
3640 char *str_buf = NULL((void*)0);
3641 length = tvb_reported_length(tvb);
3642
3643 if (!avp_str)
3644 avp_str = &str_buf;
3645
3646 proto_tree_add_item_ret_uint(tree, hf_gtpv2_glt, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &flags_3gpp);
3647 offset++;
3648
3649 switch (flags_3gpp)
3650 {
3651 case 0:
3652 /* CGI */
3653 flags = GTPv2_ULI_CGI_MASK0x01;
3654 break;
3655 case 1:
3656 /* SAI */
3657 flags = GTPv2_ULI_SAI_MASK0x02;
3658 break;
3659 case 2:
3660 /* RAI */
3661 flags = GTPv2_ULI_RAI_MASK0x04;
3662 break;
3663 case 128:
3664 /* TAI */
3665 flags = GTPv2_ULI_TAI_MASK0x08;
3666 break;
3667 case 129:
3668 /* ECGI */
3669 flags = GTPv2_ULI_ECGI_MASK0x10;
3670 break;
3671 case 130:
3672 /* TAI and ECGI */
3673 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_ECGI_MASK0x10;
3674 break;
3675 case 131:
3676 /* eNodeB ID */
3677 flags = GTPv2_ULI_MACRO_eNB_ID_MASK0x40;
3678 break;
3679 case 132:
3680 /* TAI and eNodeB ID */
3681 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_MACRO_eNB_ID_MASK0x40;
3682 break;
3683 case 133:
3684 /* extended eNodeB ID */
3685 flags = GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80;
3686 break;
3687 case 134:
3688 /* TAI and extended eNodeB ID */
3689 flags = GTPv2_ULI_TAI_MASK0x08 + GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80;
3690 break;
3691 case 135:
3692 /* NCGI */
3693 {
3694 char *mcc_mnc_str;
3695 uint64_t nr_cell_id;
3696 proto_tree *subtree;
3697
3698 subtree = proto_tree_add_subtree(tree, tvb, offset, 8, ett_gtpv2_uli_field, NULL((void*)0),
3699 "NR Cell Global Identifier (NCGI)");
3700 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, subtree, offset, E212_NRCGI, true1);
3701 offset += 3;
3702 proto_tree_add_item_ret_uint64(subtree, hf_gtpv2_ncgi_nrci, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000, &nr_cell_id);
3703 *avp_str = wmem_strdup_printf(pinfo->pool,
3704 "%s, NR Cell Id 0x%" PRIx64"l" "x",
3705 mcc_mnc_str, nr_cell_id);
3706 }
3707 return length;
3708 case 136:
3709 /* 5GS TAI */
3710 {
3711 proto_tree *subtree;
3712
3713 subtree = proto_tree_add_subtree(tree, tvb, offset, 6, ett_gtpv2_uli_field, NULL((void*)0),
3714 "Tracking Area Identity (TAI)");
3715 *avp_str = dissect_gtpv2_tai(tvb, pinfo, subtree, &offset, true1);
3716 }
3717 return length;
3718 case 137:
3719 /* 5GS TAI and NCGI */
3720 {
3721 char *mcc_mnc_str;
3722 uint64_t nr_cell_id;
3723 proto_tree *subtree;
3724
3725 subtree = proto_tree_add_subtree(tree, tvb, offset, 6, ett_gtpv2_uli_field, NULL((void*)0),
3726 "Tracking Area Identity (TAI)");
3727 *avp_str = dissect_gtpv2_tai(tvb, pinfo, subtree, &offset, true1);
3728 subtree = proto_tree_add_subtree(tree, tvb, offset, 8, ett_gtpv2_uli_field, NULL((void*)0),
3729 "NR Cell Global Identifier (NCGI)");
3730 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, subtree, offset, E212_NRCGI, true1);
3731 offset += 3;
3732 proto_tree_add_item_ret_uint64(subtree, hf_gtpv2_ncgi_nrci, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000, &nr_cell_id);
3733 *avp_str = wmem_strdup_printf(pinfo->pool,
3734 "%s, %s, NR Cell Id 0x%" PRIx64"l" "x",
3735 *avp_str, mcc_mnc_str, nr_cell_id);
3736 }
3737 return length;
3738 default:
3739 proto_tree_add_item(tree, hf_gtpv2_geographic_location, tvb, offset, -1, ENC_NA0x00000000);
3740 return length;
3741 }
3742
3743 *avp_str = decode_gtpv2_uli(tvb, pinfo, tree, NULL((void*)0), length, 0, flags);
3744 return length;
3745}
3746
3747static const
3748char *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* pinfo)
3749{
3750 uint16_t length;
3751
3752 length = dissect_3gpp_uli(tvb, pinfo, tree, NULL((void*)0));
3753 return tvb_bytes_to_str(pinfo->pool, tvb, 0, length);
3754
3755}
3756
3757int
3758dissect_diameter_3gpp_uli(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
3759{
3760 diam_sub_dis_t* diam_sub_dis = (diam_sub_dis_t*)data;
3761
3762 if (diam_sub_dis) {
3763 return dissect_3gpp_uli(tvb, pinfo, tree, &diam_sub_dis->avp_str);
3764 } else {
3765 return dissect_3gpp_uli(tvb, pinfo, tree, NULL((void*)0));
3766 }
3767}
3768
3769/*
3770 * 8.22 Fully Qualified TEID (F-TEID)
3771 */
3772static const value_string gtpv2_f_teid_interface_type_vals[] = {
3773 { 0, "S1-U eNodeB GTP-U interface"},
3774 { 1, "S1-U SGW GTP-U interface"},
3775 { 2, "S12 RNC GTP-U interface"},
3776 { 3, "S12 SGW GTP-U interface"},
3777 { 4, "S5/S8 SGW GTP-U interface"},
3778 { 5, "S5/S8 PGW GTP-U interface"},
3779 { 6, "S5/S8 SGW GTP-C interface"},
3780 { 7, "S5/S8 PGW GTP-C interface"},
3781 { 8, "S5/S8 SGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
3782 "and since alternate CoA is not used the control plane and user plane addresses are the same for PMIPv6)"}, */
3783 { 9, "S5/S8 PGW PMIPv6 interface"}, /* (the 32 bit GRE key is encoded in 32 bit TEID field "
3784 "and the control plane and user plane addresses are the same for PMIPv6)"}, */
3785 {10, "S11 MME GTP-C interface"},
3786 {11, "S11/S4 SGW GTP-C interface"},
3787 {12, "S10 MME GTP-C interface"},
3788 {13, "S3 MME GTP-C interface"},
3789 {14, "S3 SGSN GTP-C interface"},
3790 {15, "S4 SGSN GTP-U interface"},
3791 {16, "S4 SGW GTP-U interface"},
3792 {17, "S4 SGSN GTP-C interface"},
3793 {18, "S16 SGSN GTP-C interface"},
3794 {19, "eNodeB/gNodeB GTP-U interface for DL data forwarding"},
3795 {20, "eNodeB GTP-U interface for UL data forwarding"},
3796 {21, "RNC GTP-U interface for data forwarding"},
3797 {22, "SGSN GTP-U interface for data forwarding"},
3798 {23, "SGW GTP-U interface for data forwarding"},
3799 {24, "Sm MBMS GW GTP-C interface"},
3800 {25, "Sn MBMS GW GTP-C interface"},
3801 {26, "Sm MME GTP-C interface"},
3802 {27, "Sn SGSN GTP-C interface"},
3803 {28, "SGW GTP-U interface for UL data forwarding"},
3804 {29, "Sn SGSN GTP-U interface"},
3805 {30, "S2b ePDG GTP-C interface"},
3806 {31, "S2b-U ePDG GTP-U interface"},
3807 {32, "S2b PGW GTP-C interface"},
3808 {33, "S2b-U PGW GTP-U interface"},
3809 {34, "S2a TWAN GTP-U interface"},
3810 {35, "S2a TWAN GTP-C interface"},
3811 {36, "S2a PGW GTP-C interface"},
3812 {37, "S2a PGW GTP-U interface"},
3813 {38, "S11 MME GTP-U interface"},
3814 {39, "S11 SGW GTP-U interface"},
3815 {40, "N26 AMF GTP-C interface"},
3816 {41, "N19mb UPF GTP-U interface"},
3817 {0, NULL((void*)0)}
3818};
3819static 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) }
;
3820
3821static const true_false_string gtpv2_f_teid_v4_vals = {
3822 "IPv4 address present",
3823 "IPv4 address not present",
3824};
3825
3826static const true_false_string gtpv2_f_teid_v6_vals = {
3827 "IPv6 address present",
3828 "IPv6 address not present",
3829};
3830
3831static void
3832dissect_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)
3833{
3834 unsigned offset = 0;
3835 uint8_t flags;
3836 address *ipv4 = NULL((void*)0), *ipv6 = NULL((void*)0);
3837 uint32_t teid_cp, *teid, session;
3838
3839 flags = tvb_get_uint8(tvb, offset);
3840 proto_tree_add_item(tree, hf_gtpv2_f_teid_v4, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3841 proto_tree_add_item(tree, hf_gtpv2_f_teid_v6, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3842 /* NOTE: "Interface type" IE is defined with 5 bits only in the earlier releases of this specification,
3843 * thus pre-Rel-10 GTPv2-C nodes can ignore bit "6" which is marked as "Spare" in earlier releases,
3844 * allowing backward compatibility.
3845 */
3846 proto_tree_add_item(tree, hf_gtpv2_f_teid_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3847
3848 offset += 1;
3849 proto_tree_add_item_ret_uint(tree, hf_gtpv2_f_teid_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &teid_cp);
3850 proto_item_append_text(item, "%s, TEID/GRE Key: 0x%s",
3851 val_to_str_ext_const((flags & 0x3f), &gtpv2_f_teid_interface_type_vals_ext, "Unknown"),
3852 tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
3853
3854 offset += 4;
3855 if (flags & 0x80)
3856 {
3857 ipv4 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3858 proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3859 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));
3860 set_address_tvb(ipv4, AT_IPv4, 4, tvb, offset);
3861 offset += 4;
3862 }
3863 if (flags & 0x40)
3864 {
3865 ipv6 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3866 proto_tree_add_item(tree, hf_gtpv2_f_teid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3867 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));
3868 set_address_tvb(ipv6, AT_IPv6, 16, tvb, offset);
3869 }
3870
3871 if (g_gtp_session && args) {
3872 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)))))
;
3873 if (!session) {
3874 /* We save the teid so that we could assignate its corresponding session ID later */
3875 args->last_teid = teid_cp;
3876 if (!teid_exists(teid_cp, args->teid_list)) {
3877 teid = wmem_new(pinfo->pool, uint32_t)((uint32_t*)wmem_alloc((pinfo->pool), sizeof(uint32_t)));
3878 *teid = teid_cp;
3879 wmem_list_prepend(args->teid_list, teid);
3880 }
3881 if (ipv4 != NULL((void*)0) && !ip_exists(*ipv4, args->ip_list)) {
3882 copy_address_wmem(pinfo->pool, &args->last_ip, ipv4);
3883 wmem_list_prepend(args->ip_list, ipv4);
3884 }
3885 if (ipv6 != NULL((void*)0) && !ip_exists(*ipv6, args->ip_list)) {
3886 copy_address_wmem(pinfo->pool, &args->last_ip, ipv6);
3887 wmem_list_prepend(args->ip_list, ipv6);
3888 }
3889 }
3890 }
3891}
3892/*
3893 * 8.23 TMSI
3894 */
3895static void
3896dissect_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)))
3897{
3898 proto_tree_add_item(tree, hf_gtpv2_tmsi, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
3899 proto_tree_add_item(item, hf_gtpv2_tmsi_bytes, tvb, 0, length, ENC_NA0x00000000);
3900}
3901/*
3902 * 8.24 Global CN-Id
3903 * (TS 23.003)
3904 * 12.3 CN Identifier
3905 *
3906 * A CN node is uniquely identified within a PLMN by its CN Identifier (CN-Id). The CN-Id together with the PLMN
3907 * identifier globally identifies the CN node. The CN-Id together with the PLMN-Id is used as the CN node identifier in
3908 * RANAP signalling over the Iu interface.
3909 * Global CN-Id = PLMN-Id || CN-Id
3910 * The CN-Id is defined by the operator, and set in the nodes via O&M.
3911 * For the syntax description and the use of this identifier in RANAP signalling, see 3GPP TS 25.413 [17].
3912 */
3913
3914static void
3915dissect_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)))
3916{
3917 unsigned offset = 0;
3918
3919 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
3920 offset += 3;
3921
3922 /* >CN-ID M INTEGER (0..4095) */
3923 proto_tree_add_item(tree, hf_gtpv2_cn_id, tvb, offset, 2, ENC_NA0x00000000);
3924}
3925/*
3926 * 8.25 S103 PDN Data Forwarding Info (S103PDF)
3927 */
3928static void
3929dissect_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)))
3930{
3931 unsigned offset = 0;
3932 uint8_t m, k, i;
3933
3934 /* The HSGW Address and GRE Key identify a GRE Tunnel towards a HSGW over S103 interface for a specific PDN
3935 * connection of the UE. The EPS Bearer IDs specify the EPS Bearers which require data forwarding that belonging to this
3936 * PDN connection. The number of EPS bearer Ids included is specified by the value of EPS Bearer ID Number.
3937 */
3938 /* Octet 5 HSGW Address for forwarding Length = m */
3939 m = tvb_get_uint8(tvb, offset);
3940 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_f_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3941 offset += 1;
3942
3943 /* 6 to (m+5) HSGW Address for forwarding [4..16] */
3944 switch (m) {
3945 case 4:
3946 /* IPv4 */
3947 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv4, tvb, offset, m, ENC_BIG_ENDIAN0x00000000);
3948 offset += 4;
3949 break;
3950 case 16:
3951 /* IPv6 */
3952 proto_tree_add_item(tree, hf_gtpv2_hsgw_addr_ipv6, tvb, offset, m, ENC_NA0x00000000);
3953 offset += 16;
3954 break;
3955 default:
3956 /* Error */
3957 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
3958 "Wrong length %u, should be 4 or 16", m);
3959 return;
3960 }
3961
3962 /* (m+6)- to (m+9) GRE Key */
3963 proto_tree_add_item(tree, hf_gtpv2_gre_key, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3964 offset += 4;
3965
3966 /* (m+10) EPS Bearer ID Number = k */
3967 k = tvb_get_uint8(tvb, offset);
3968 proto_tree_add_item(tree, hf_gtpv2_eps_bearer_id_number, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3969 offset += 1;
3970
3971 /* (m+11) to (m+10+k)
3972 * Spare EPS Bearer ID
3973 */
3974 for ( i = 0; i < k; i++ ) {
3975 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
3976 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3977 offset += 1;
3978 }
3979
3980}
3981/*
3982 * 8.26 S1-U Data Forwarding (S1UDF)
3983 */
3984static void
3985dissect_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)))
3986{
3987 unsigned offset = 0;
3988 uint8_t m;
3989
3990 /* 5 Spare EPS Bearer ID */
3991 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
3992 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3993 offset += 1;
3994 /* 6 Serving GW Address Length = m */
3995 m = tvb_get_uint8(tvb, offset);
3996 proto_tree_add_item(tree, hf_gtpv2_serving_gw_address_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3997 offset += 1;
3998 /* 7 to (m+6) Serving GW Address [4..16] */
3999 switch (m) {
4000 case 4:
4001 /* IPv4 */
4002 proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv4, tvb, offset, m, ENC_BIG_ENDIAN0x00000000);
4003 offset += 4;
4004 break;
4005 case 16:
4006 /* IPv6 */
4007 proto_tree_add_item(tree, hf_gtpv2_sgw_addr_ipv6, tvb, offset, m, ENC_NA0x00000000);
4008 offset += 16;
4009 break;
4010 default:
4011 /* Error */
4012 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
4013 "Wrong length %u, should be 4 or 16", m);
4014 return;
4015 }
4016
4017 /* (m+7) to (m+10)
4018 * Serving GW S1-U TEID
4019 */
4020 proto_tree_add_item(tree, hf_gtpv2_sgw_s1u_teid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4021
4022}
4023/*
4024 * 8.27 Delay Value
4025 */
4026
4027static void
4028dissect_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)))
4029{
4030 unsigned offset = 0;
4031
4032 proto_tree_add_item(tree, hf_gtpv2_delay_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4033}
4034
4035/*
4036 * 8.28 Bearer Context (grouped IE)
4037 */
4038
4039static void
4040dissect_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)))
4041{
4042 unsigned offset = 0;
4043 tvbuff_t *new_tvb;
4044 proto_tree *grouped_tree;
4045
4046 proto_item_append_text(item, "[Grouped IE]");
4047 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_bearer_ctx);
4048
4049 new_tvb = tvb_new_subset_length(tvb, offset, length);
4050 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, 0, message_type, args, GTPV2_IE_BEARER_CTX93);
4051}
4052
4053/* 8.29 Charging ID */
4054static void
4055dissect_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)))
4056{
4057 unsigned offset = 0;
4058
4059 proto_tree_add_item(tree, hf_gtpv2_charging_id, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4060}
4061
4062
4063 /* 8.30 Charging Characteristics
4064 * The charging characteristics information element is defined in 3GPP TS 32.251 [8]
4065 * and is a way of informing both the SGW and PGW of the rules for producing charging
4066 * information based on operator configured triggers. For the encoding of this
4067 * information element see 3GPP TS 32.298 [9].
4068 */
4069static void
4070dissect_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)))
4071{
4072 unsigned offset = 0;
4073
4074 proto_tree_add_item(tree, hf_gtpv2_charging_characteristic, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4075 if (length > 2) {
4076 offset += 2;
4077 /* These octet(s) is/are present only if explicitly specified */
4078 proto_tree_add_item(tree, hf_gtpv2_charging_characteristic_remaining_octets, tvb, offset, length-2, ENC_NA0x00000000);
4079 }
4080
4081}
4082
4083/*
4084 * 8.30 Bearer Flag
4085 */
4086static void
4087dissect_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)))
4088{
4089
4090 unsigned offset = 0;
4091
4092 /* Octet 5 Spare VB PPC */
4093 proto_tree_add_item(tree, hf_gtpv2_bearer_flag_ppc, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4094 proto_tree_add_item(tree, hf_gtpv2_bearer_flag_vb, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4095
4096}
4097/*
4098 * 8.34 PDN Type
4099 */
4100void
4101dissect_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)))
4102{
4103
4104 unsigned offset = 0;
4105 uint8_t pdn;
4106
4107 if (length != 1) {
4108 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, 0, length,
4109 "Wrong length indicated. Expected 1, got %u", length);
4110 return;
4111 }
4112
4113 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN0x00000000);
4114 pdn = tvb_get_uint8(tvb, offset)& 0x7;
4115 proto_tree_add_item(tree, hf_gtpv2_pdn_type, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
4116 proto_item_append_text(item, "%s", val_to_str_ext_const(pdn, &gtpv2_pdn_type_vals_ext, "Unknown"));
4117
4118}
4119
4120/*
4121 * 8.31 Trace Information
4122 */
4123 /* List of NE Types */
4124static int* const trace_ne_types_flags_oct1[] = {
4125 &hf_gtpv2_tra_info_lne_sgw,
4126 &hf_gtpv2_tra_info_lne_mme,
4127 &hf_gtpv2_tra_info_lne_bm_sc,
4128 &hf_gtpv2_tra_info_lne_rnc,
4129 &hf_gtpv2_tra_info_lne_ggsn,
4130 &hf_gtpv2_tra_info_lne_sgsn,
4131 &hf_gtpv2_tra_info_lne_mgw,
4132 &hf_gtpv2_tra_info_lne_msc_s,
4133 NULL((void*)0)
4134};
4135
4136static int* const trace_ne_types_flags_oct2[] = {
4137 &hf_gtpv2_tra_info_tra_info_ng_ran_node,
4138 &hf_gtpv2_tra_info_lne_upf,
4139 &hf_gtpv2_tra_info_lne_pcf,
4140 &hf_gtpv2_tra_info_lne_smf,
4141 &hf_gtpv2_tra_info_lne_amf,
4142 &hf_gtpv2_tra_info_lne_enb,
4143 &hf_gtpv2_tra_info_lne_pdn_gw,
4144 NULL((void*)0)
4145};
4146
4147static void
4148dissect_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)))
4149{
4150 proto_tree *trigg_tree, *msc_server_tree, *mgw_tree, *sgsn_tree, *ggsn_tree;
4151 proto_tree *bm_sc_tree, *sgw_mme_tree, *sgw_tree, *pgw_tree, *ne_types_tree;
4152 proto_tree *interfaces_tree, *imsc_server_tree, *lmgw_tree, *lsgsn_tree, *lggsn_tree, *lrnc_tree;
4153 proto_tree *lbm_sc_tree, *lmme_tree, *lsgw_tree, *lpdn_gw_tree, *lenb_tree;
4154
4155 unsigned offset = 0;
4156#if 0
4157 uint8_t *trace_id = NULL((void*)0);
4158#endif
4159 uint16_t tid;
4160 uint32_t bit_offset;
4161
4162 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
4163 offset += 3;
4164
4165 /* Append Trace ID to main tree */
4166 tid = tvb_get_ntohs(tvb, offset);
4167 proto_item_append_text(item, "Trace ID: %d ", tid);
4168
4169 /* Trace ID */
4170 /*--------------------------------------------------
4171 * trace_id = tvb_format_text(tvb, offset, 2);
4172 * proto_tree_add_string(tree, hf_gtpv2_tra_info, tvb, offset, length, trace_id);
4173 *--------------------------------------------------*/
4174 proto_tree_add_item(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
4175 offset += 3;
4176
4177 /* Triggering Events, put all into a new tree called triggering_tree */
4178 trigg_tree = proto_tree_add_subtree(tree, tvb, offset, 9, ett_gtpv2_tra_info_trigg, NULL((void*)0), "Triggering Events");
4179
4180 /* Create all subtrees */
4181 msc_server_tree = proto_tree_add_subtree(trigg_tree, tvb, offset, 2, ett_gtpv2_tra_info_trigg_msc_server, NULL((void*)0), "MSC Server");
4182
4183 mgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_trigg_mgw, NULL((void*)0), "MGW");
4184
4185 sgsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_trigg_sgsn, NULL((void*)0), "SGSN");
4186
4187 ggsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_trigg_ggsn, NULL((void*)0), "GGSN");
4188
4189 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");
4190
4191 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");
4192
4193 sgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_trigg_sgw, NULL((void*)0), "SGW");
4194
4195 pgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_trigg_pgw, NULL((void*)0), "PGW");
4196
4197 /* MSC Server - 2 octets */
4198 static int* const tra_info_msc_flags[] = {
4199 &hf_gtpv2_tra_info_msc_ss,
4200 &hf_gtpv2_tra_info_msc_handovers,
4201 &hf_gtpv2_tra_info_msc_lu_imsi_ad,
4202 &hf_gtpv2_tra_info_msc_momt_sms,
4203 &hf_gtpv2_tra_info_msc_momt_calls,
4204 NULL((void*)0)
4205 };
4206 proto_tree_add_bitmask_list(msc_server_tree, tvb, offset, 1, tra_info_msc_flags, ENC_BIG_ENDIAN0x00000000);
4207 bit_offset = offset << 3;
4208 proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN0x00000000);
4209 offset += 1;
4210 bit_offset = offset << 3;
4211 proto_tree_add_bits_item(msc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN0x00000000);
4212 offset += 1;
4213
4214 /* MGW - 1 octet */
4215 proto_tree_add_item(mgw_tree, hf_gtpv2_tra_info_mgw_context, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4216 bit_offset = offset << 3;
4217 proto_tree_add_bits_item(mgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4218 offset += 1;
4219 /* SGSN - 2 octets */
4220 static int* const tra_info_sgsn_flags[] = {
4221 &hf_gtpv2_tra_info_sgsn_mbms,
4222 &hf_gtpv2_tra_info_sgsn_rau_gprs_ad,
4223 &hf_gtpv2_tra_info_sgsn_momt_sms,
4224 &hf_gtpv2_tra_info_sgsn_pdp_context,
4225 NULL((void*)0)
4226 };
4227 proto_tree_add_bitmask_list(sgsn_tree, tvb, offset, 1, tra_info_sgsn_flags, ENC_BIG_ENDIAN0x00000000);
4228 bit_offset = offset << 3;
4229 proto_tree_add_bits_item(sgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4230 offset += 1;
4231 proto_tree_add_item(sgsn_tree, hf_gtpv2_tra_info_sgsn_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4232 offset += 1;
4233 /* GGSN - 1 octet */
4234 proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_pdp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4235 proto_tree_add_item(ggsn_tree, hf_gtpv2_tra_info_ggsn_mbms, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4236 bit_offset = offset << 3;
4237 proto_tree_add_bits_item(ggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN0x00000000);
4238 offset += 1;
4239 /* BM-SC - 1 octet */
4240 proto_tree_add_item(bm_sc_tree, hf_gtpv2_tra_info_bm_sc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4241 bit_offset = offset << 3;
4242 proto_tree_add_bits_item(bm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4243 offset += 1;
4244 /* MME/SGW - 1 octet */
4245 static int* const tra_info_mme_flags[] = {
4246 &hf_gtpv2_tra_info_mme_sgw_ho,
4247 &hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del,
4248 &hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc,
4249 &hf_gtpv2_tra_info_mme_sgw_iataud,
4250 &hf_gtpv2_tra_info_mme_sgw_sr,
4251 &hf_gtpv2_tra_info_mme_sgw_ss,
4252 NULL((void*)0)
4253 };
4254 proto_tree_add_bitmask_list(sgw_mme_tree, tvb, offset, 1, tra_info_mme_flags, ENC_BIG_ENDIAN0x00000000);
4255 bit_offset = offset << 3;
4256 proto_tree_add_bits_item(sgw_mme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN0x00000000);
4257 offset += 1;
4258 /* PGW/SGW - 1 octet */
4259 static int* const tra_info_sgw_pdn_flags[] = {
4260 &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
4261 &hf_gtpv2_tra_info_sgw_pdn_con_term,
4262 &hf_gtpv2_tra_info_sgw_pdn_con_creat,
4263 NULL((void*)0)
4264 };
4265 proto_tree_add_bitmask_list(sgw_mme_tree, tvb, offset, 1, tra_info_sgw_pdn_flags, ENC_BIG_ENDIAN0x00000000);
4266 bit_offset = (offset << 3) + 4;
4267 proto_tree_add_bits_item(sgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4268
4269 static int* const tra_info_pgw_flags[] = {
4270 &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
4271 &hf_gtpv2_tra_info_pgw_pdn_con_term,
4272 &hf_gtpv2_tra_info_pgw_pdn_con_creat,
4273 NULL((void*)0)
4274 };
4275 proto_tree_add_bitmask_list(pgw_tree, tvb, offset, 1, tra_info_pgw_flags, ENC_BIG_ENDIAN0x00000000);
4276
4277 bit_offset = offset << 3;
4278 proto_tree_add_bits_item(pgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4279 offset += 1;
4280
4281 /* Create NE Types subtree */
4282 ne_types_tree = proto_tree_add_subtree(tree, tvb, offset, 2, ett_gtpv2_tra_info_ne_types, NULL((void*)0), "List of NE Types");
4283
4284 proto_tree_add_bitmask_list(tree, tvb, offset, 1, trace_ne_types_flags_oct1, ENC_BIG_ENDIAN0x00000000);
4285 offset += 1;
4286
4287 proto_tree_add_bitmask_list(tree, tvb, offset, 1, trace_ne_types_flags_oct2, ENC_BIG_ENDIAN0x00000000);
4288 bit_offset = offset << 3;
4289 proto_tree_add_bits_item(ne_types_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN0x00000000);
4290 offset += 1;
4291
4292 /* Trace Depth Length */
4293 proto_tree_add_item(tree, hf_gtpv2_tra_info_tdl, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4294 offset += 1;
4295
4296 /* Set up subtree interfaces and put all interfaces under it */
4297 interfaces_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_gtpv2_tra_info_interfaces, NULL((void*)0), "List of Interfaces");
4298
4299 /* Create all subtrees */
4300 imsc_server_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset, 2, ett_gtpv2_tra_info_interfaces_imsc_server, NULL((void*)0), "MSC Server");
4301
4302 lmgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_interfaces_lmgw, NULL((void*)0), "MGW");
4303
4304 lsgsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_interfaces_lsgsn, NULL((void*)0), "SGSN");
4305
4306 lggsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_interfaces_lggsn, NULL((void*)0), "GGSN");
4307
4308 lrnc_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 6, 1, ett_gtpv2_tra_info_interfaces_lrnc, NULL((void*)0), "RNC");
4309
4310 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");
4311
4312 lmme_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_interfaces_lmme, NULL((void*)0), "MME");
4313
4314 lsgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 9, 1,ett_gtpv2_tra_info_interfaces_lsgw, NULL((void*)0), "SGW");
4315
4316 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");
4317
4318 lenb_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 11, 1, ett_gtpv2_tra_info_interfaces_lpdn_lenb, NULL((void*)0), "eNB");
4319
4320 /* MSC Server - 2 octets */
4321 static int* const tra_info_lmsc_flags[] = {
4322 &hf_gtpv2_tra_info_lmsc_cap,
4323 &hf_gtpv2_tra_info_lmsc_map_f,
4324 &hf_gtpv2_tra_info_lmsc_map_e,
4325 &hf_gtpv2_tra_info_lmsc_map_b,
4326 &hf_gtpv2_tra_info_lmsc_map_g,
4327 &hf_gtpv2_tra_info_lmsc_mc,
4328 &hf_gtpv2_tra_info_lmsc_lu,
4329 &hf_gtpv2_tra_info_lmsc_a,
4330 NULL((void*)0)
4331 };
4332 proto_tree_add_bitmask_list(imsc_server_tree, tvb, offset, 1, tra_info_lmsc_flags, ENC_BIG_ENDIAN0x00000000);
4333 offset += 1;
4334 proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_d, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4335 proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_map_c, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4336 bit_offset = offset << 3;
4337 proto_tree_add_bits_item(imsc_server_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN0x00000000);
4338 offset += 1;
4339 /* MGW - 1 octet */
4340 static int* const tra_info_lmgw_flags[] = {
4341 &hf_gtpv2_tra_info_lmgw_lu_up,
4342 &hf_gtpv2_tra_info_lmgw_nb_up,
4343 &hf_gtpv2_tra_info_lmgw_mc,
4344 NULL((void*)0)
4345 };
4346 proto_tree_add_bitmask_list(lmgw_tree, tvb, offset, 1, tra_info_lmgw_flags, ENC_BIG_ENDIAN0x00000000);
4347 bit_offset = offset << 3;
4348 proto_tree_add_bits_item(lmgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4349 offset += 1;
4350 /* SGSN - 2 octets */
4351 static int* const tra_info_lsgsn_flags[] = {
4352 &hf_gtpv2_tra_info_lsgsn_ge,
4353 &hf_gtpv2_tra_info_lsgsn_gs,
4354 &hf_gtpv2_tra_info_lsgsn_map_gf,
4355 &hf_gtpv2_tra_info_lsgsn_map_gd,
4356 &hf_gtpv2_tra_info_lsgsn_map_gr,
4357 &hf_gtpv2_tra_info_lsgsn_gn,
4358 &hf_gtpv2_tra_info_lsgsn_lu,
4359 &hf_gtpv2_tra_info_lsgsn_gb,
4360 NULL((void*)0)
4361 };
4362 proto_tree_add_bitmask_list(lsgsn_tree, tvb, offset, 1, tra_info_lsgsn_flags, ENC_BIG_ENDIAN0x00000000);
4363 offset += 1;
4364 bit_offset = offset << 3;
4365 proto_tree_add_bits_item(lsgsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 8, ENC_BIG_ENDIAN0x00000000);
4366 offset += 1;
4367
4368 /* GGSN - 1 octet */
4369 static int* const tra_info_lggsn_flags[] = {
4370 &hf_gtpv2_tra_info_lggsn_gmb,
4371 & hf_gtpv2_tra_info_lggsn_gi,
4372 & hf_gtpv2_tra_info_lggsn_gn,
4373 NULL((void*)0)
4374 };
4375 proto_tree_add_bitmask_list(lggsn_tree, tvb, offset, 1, tra_info_lggsn_flags, ENC_BIG_ENDIAN0x00000000);
4376 bit_offset = offset << 3;
4377 proto_tree_add_bits_item(lggsn_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4378 offset += 1;
4379 /* RNC - 1 octet */
4380 static int* const tra_info_lrnc_flags[] = {
4381 &hf_gtpv2_tra_info_lrnc_uu,
4382 &hf_gtpv2_tra_info_lrnc_lub,
4383 &hf_gtpv2_tra_info_lrnc_lur,
4384 &hf_gtpv2_tra_info_lrnc_lu,
4385 NULL((void*)0)
4386 };
4387 proto_tree_add_bitmask_list(lrnc_tree, tvb, offset, 1, tra_info_lrnc_flags, ENC_BIG_ENDIAN0x00000000);
4388 bit_offset = offset << 3;
4389 proto_tree_add_bits_item(lrnc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4390 offset += 1;
4391 /* BM_SC - 1 octet */
4392 proto_tree_add_item(lbm_sc_tree, hf_gtpv2_tra_info_lbm_sc_gmb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4393 bit_offset = offset << 3;
4394 proto_tree_add_bits_item(lbm_sc_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 7, ENC_BIG_ENDIAN0x00000000);
4395 offset += 1;
4396 /* MME - 1 octet */
4397 static int* const tra_info_lmme_flags[] = {
4398 &hf_gtpv2_tra_info_lmme_s11,
4399 &hf_gtpv2_tra_info_lmme_s10,
4400 &hf_gtpv2_tra_info_lmme_s6a,
4401 &hf_gtpv2_tra_info_lmme_s3,
4402 &hf_gtpv2_tra_info_lmme_s1_mme,
4403 NULL((void*)0)
4404 };
4405 proto_tree_add_bitmask_list(lmme_tree, tvb, offset, 1, tra_info_lmme_flags, ENC_BIG_ENDIAN0x00000000);
4406 bit_offset = offset << 3;
4407 proto_tree_add_bits_item(lmme_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN0x00000000);
4408 offset += 1;
4409 /* SGW - 1 octet */
4410 static int* const tra_info_lsgw_flags[] = {
4411 &hf_gtpv2_tra_info_lsgw_s11,
4412 &hf_gtpv2_tra_info_lsgw_s8b,
4413 &hf_gtpv2_tra_info_lsgw_s5,
4414 &hf_gtpv2_tra_info_lsgw_s4,
4415 NULL((void*)0)
4416 };
4417 proto_tree_add_bitmask_list(lsgw_tree, tvb, offset, 1, tra_info_lsgw_flags, ENC_BIG_ENDIAN0x00000000);
4418 bit_offset = offset << 3;
4419 proto_tree_add_bits_item(lsgw_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 4, ENC_BIG_ENDIAN0x00000000);
4420 offset += 1;
4421 /* PDN GW - 1 octet */
4422 static int* const tra_info_lpdn_gw_flags[] = {
4423 &hf_gtpv2_tra_info_lpdn_gw_sgi,
4424 &hf_gtpv2_tra_info_lpdn_gw_s8b,
4425 &hf_gtpv2_tra_info_lpdn_gw_gx,
4426 &hf_gtpv2_tra_info_lpdn_gw_s6c,
4427 &hf_gtpv2_tra_info_lpdn_gw_s5,
4428 &hf_gtpv2_tra_info_lpdn_gw_s2c,
4429 &hf_gtpv2_tra_info_lpdn_gw_s2b,
4430 &hf_gtpv2_tra_info_lpdn_gw_s2a,
4431 NULL((void*)0)
4432 };
4433 proto_tree_add_bitmask_list(lpdn_gw_tree, tvb, offset, 1, tra_info_lpdn_gw_flags, ENC_BIG_ENDIAN0x00000000);
4434 offset += 1;
4435 /* eNB - 1 octet */
4436 static int* const tra_info_lenb_flags[] = {
4437 &hf_gtpv2_tra_info_lenb_uu,
4438 &hf_gtpv2_tra_info_lenb_x2,
4439 &hf_gtpv2_tra_info_lenb_s1_mme,
4440 NULL((void*)0)
4441 };
4442 proto_tree_add_bitmask_list(lenb_tree, tvb, offset, 1, tra_info_lenb_flags, ENC_BIG_ENDIAN0x00000000);
4443 bit_offset = offset << 3;
4444 proto_tree_add_bits_item(lenb_tree, hf_gtpv2_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN0x00000000);
4445
4446 /*--------------------------------------------------
4447 * offset += 1;
4448 *--------------------------------------------------*/
4449
4450 /* IP Address of Trace Collection Entity */
4451 while ( (offset + 4) <= length ) {
4452 offset += 1;
4453 proto_tree_add_item(tree, hf_gtpv2_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4454 offset += 3;
4455 }
4456}
4457
4458/*
4459 * 8.33 Paging Cause
4460 * 8.33 Void (TS 129 274 V9.4.0 (2010-10))
4461 */
4462
4463/* 8.35 Procedure Transaction ID (PTI) */
4464static void
4465dissect_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)))
4466{
4467 proto_tree_add_item(tree, hf_gtpv2_pti, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
4468}
4469/*
4470 * 8.36 DRX Parameter
4471 */
4472static void
4473dissect_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)))
4474{
4475 unsigned offset = 0;
4476
4477 /* 36.413 : 9.2.1.17 Paging Cause, void */
4478 proto_tree_add_item(tree, hf_gtpv2_drx_parameter, tvb, offset, length, ENC_NA0x00000000);
4479}
4480
4481/*
4482 * 8.37 UE Network Capability
4483 * UE Network Capability is coded as depicted in Figure 8.37-1. Actual coding of the UE Network Capability field is
4484 * defined in 3GPP TS 24.301
4485 */
4486static void
4487dissect_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)))
4488{
4489 de_emm_ue_net_cap(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
4490
4491}
4492/*
4493 * 8.38 MM Context
4494 */
4495static const value_string gtpv2_mm_context_security_mode[] = {
4496 {0, "GSM Key and Triplets"},
4497 {1, "UMTS Key, Used Cipher and Quintuplets"},
4498 {2, "GSM Key, Used Cipher and Quintuplets"},
4499 {3, "UMTS Key and Quintuplets"},
4500 {4, "EPS Security Context, Quadruplets and Quintuplets" },
4501 {5, "UMTS Key, Quadruplets and Quintuplets"},
4502 {0, NULL((void*)0) }
4503};
4504
4505static const true_false_string gtpv2_nhi_vals = {
4506 "NH (Next Hop) and NCC (Next Hop Chaining Count) are both present",
4507 "NH (Next Hop) and NCC (Next Hop Chaining Count) not present",
4508};
4509
4510/* Table 8.38-2: Used NAS Cipher Values */
4511
4512static const value_string gtpv2_mm_context_unc_vals[] = {
4513 {0, "No ciphering"},
4514 {1, "128-EEA1"},
4515 {2, "128-EEA2"},
4516 {3, "128-EEA3"},
4517 {4, "EEA4" },
4518 {5, "EEA5"},
4519 {6, "EEA6"},
4520 {7, "EEA7"},
4521 {0, NULL((void*)0)}
4522};
4523
4524/* Table 8.38-3: Used Cipher Values */
4525static const value_string gtpv2_mm_context_used_cipher_vals[] = {
4526 {0, "No ciphering"},
4527 {1, "GEA/1"},
4528 {2, "GEA/2"},
4529 {3, "GEA/3"},
4530 {4, "GEA/4" },
4531 {5, "GEA/5"},
4532 {6, "GEA/6"},
4533 {7, "GEA/7"},
4534 {0, NULL((void*)0)}
4535};
4536
4537/* Table 8.38-4: Used NAS integrity protection algorithm Values */
4538static const value_string gtpv2_mm_context_unipa_vals[] = {
4539 {0, "No integrity protection"},
4540 {1, "128-EIA1"},
4541 {2, "128-EIA2"},
4542 {3, "128-EIA3"},
4543 {4, "EIA4" },
4544 {5, "EIA5"},
4545 {6, "EIA6"},
4546 {7, "EIA7"},
4547 {0, NULL((void*)0)}
4548};
4549
4550/* Table 8.38-6: EPS NAS Security Context Type Values */
4551static const value_string gtpv2_mm_context_eps_nas_security_context_type_vals[] = {
4552 {0, "Reporting EPS NAS Security Context Type is not supported"},
4553 {1, "Native EPS NAS Security Context Type"},
4554 {2, "Mapped EPS NAS Security Context Type"},
4555 {0, NULL((void*)0)}
4556};
4557
4558/* Helper functions */
4559
4560/* Figure 8.38-7: Authentication Triplet */
4561static int
4562dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, unsigned offset, uint8_t num_triplet)
4563{
4564 proto_tree *auth_tri_tree;
4565 int i;
4566
4567 for (i = 0; i < num_triplet; i++) {
4568 auth_tri_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4569 ett_gtpv2_mm_context_auth_tri, NULL((void*)0), "Authentication Triplet %u", i);
4570 /*
4571 * Figure 8.38-8: Authentication Quintuplet
4572 * 1 to 16 RAND
4573 * 17 to 20 SRES
4574 * 21 to 28 Kc
4575 */
4576 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4577 offset += 16;
4578 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_sres, tvb, offset, 4, ENC_NA0x00000000);
4579 offset += 4;
4580 proto_tree_add_item(auth_tri_tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4581 offset += 8;
4582
4583 }
4584
4585 return offset;
4586}
4587
4588static int
4589dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, unsigned offset, uint8_t nr_qui)
4590{
4591 proto_tree *auth_qui_tree;
4592 int i;
4593 uint32_t tmp;
4594
4595 for (i = 0; i < nr_qui; i++) {
4596 auth_qui_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4597 ett_gtpv2_mm_context_auth_qui, NULL((void*)0), "Authentication Quintuplet %u", i);
4598 /*
4599 * Figure 8.38-8: Authentication Quintuplet
4600 * 1 to 16 RAND
4601 * 17 XRES Length
4602 * 18 to m XRES
4603 * (m+1) to (m+16) CK
4604 * (m+17) to (m+32) IK
4605 * m+33 AUTN Length
4606 * (m+34) to n AUTN
4607 */
4608 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4609 offset += 16;
4610 proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4611 offset += 1;
4612 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA0x00000000);
4613 offset += tmp;
4614 proto_tree_add_item(auth_qui_tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
4615 offset += 16;
4616 proto_tree_add_item(auth_qui_tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
4617 offset += 16;
4618 proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4619 offset += 1;
4620 proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA0x00000000);
4621 offset += tmp;
4622 }
4623
4624 return offset;
4625
4626}
4627
4628static int
4629dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, unsigned offset, uint8_t nr_qui)
4630{
4631 proto_tree *auth_qua_tree;
4632 uint32_t tmp;
4633 int i;
4634
4635 for (i = 0; i < nr_qui; i++) {
4636 auth_qua_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
4637 ett_gtpv2_mm_context_auth_qua, NULL((void*)0), "Authentication Quadruplet %u",i+1);
4638
4639 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA0x00000000);
4640 offset += 16;
4641
4642 proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4643 offset++;
4644
4645 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA0x00000000);
4646 offset += tmp;
4647
4648 proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA0x00000000, &tmp);
4649 offset++;
4650
4651 proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA0x00000000);
4652 offset += tmp;
4653
4654 proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_NA0x00000000);
4655
4656 offset += 32;
4657 }
4658 return offset;
4659}
4660
4661static const value_string gtpv2_mm_context_higher_br_16mb_flg_vals[] = {
4662 {0, "Not allowed"},
4663 {1, "Allowed"},
4664 {0, NULL((void*)0)}
4665};
4666
4667static int
4668dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, uint8_t samb_ri, uint8_t uamb_ri)
4669{
4670 proto_tree *net_cap_tree, *msnt_cap_tree;
4671 uint8_t ue_net_cap_len, ms_net_cap_len, mei_len;
4672
4673 /*
4674 * If SAMBRI (Subscribed UE AMBR Indicator), bit 1 of octet 6, is set to "1",
4675 * then the Uplink/downlink Subscribed UE AMBR parameter field is present,
4676 */
4677 if (samb_ri) {
4678 /* j to (j+3) Uplink Subscribed UE AMBR */
4679 proto_tree_add_item(tree, hf_gtpv2_uplink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4680
4681 offset += 4;
4682 /* (j+4) to (j+7) Downlink Subscribed UE AMBR */
4683 proto_tree_add_item(tree, hf_gtpv2_downlink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4684
4685 offset += 4;
4686 }
4687 /*
4688 * If UAMBRI (Used UE AMBR Indicator), bit 2 of octet 6, is set to "1",
4689 * then the Uplink/downlink Used UE AMBR parameter field is present
4690 */
4691 if (uamb_ri) {
4692 /* i to (i+3) Uplink Used UE AMBR */
4693 proto_tree_add_item(tree, hf_gtpv2_uplink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4694
4695 offset += 4;
4696 /* (i+4) to (i+7) Downlink Used UE AMBR */
4697 proto_tree_add_item(tree, hf_gtpv2_downlink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4698
4699 offset += 4;
4700 }
4701 /* q Length of UE Network Capability */
4702 ue_net_cap_len = tvb_get_uint8(tvb, offset);
4703 proto_tree_add_item(tree, hf_gtpv2_mm_context_ue_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4704 offset += 1;
4705 /* (q+1) to k UE Network Capability */
4706 if (ue_net_cap_len) {
4707 /* The UE Network Capability coding is specified in clause 9.9.3.34 of 3GPP TS 24.301 [23].
4708 * If Length of UE Network Capability is zero, then the UE Network Capability parameter
4709 * shall not be present.
4710 */
4711 net_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ue_net_cap_len,
4712 ett_gtpv2_mm_context_net_cap, NULL((void*)0), "UE Network Capability");
4713 offset += de_emm_ue_net_cap(tvb, net_cap_tree, pinfo, offset, ue_net_cap_len, NULL((void*)0), 0);
4714 }
4715 /* k+1 Length of MS Network Capability */
4716 ms_net_cap_len = tvb_get_uint8(tvb, offset);
4717 proto_tree_add_item(tree, hf_gtpv2_mm_context_ms_net_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4718 offset += 1;
4719 /* (k+2) to m MS Network Capability
4720 * The MS Network Capability coding is specified in clause 10.5.5.12 of 3GPP TS 24.008 [5].
4721 * If Length of MS Network Capability is zero, then the MS Network Capability parameter shall not be present.
4722 */
4723 if (ms_net_cap_len) {
4724 msnt_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ms_net_cap_len,
4725 ett_gtpv2_ms_network_capability, NULL((void*)0), "MS network capability");
4726 offset += de_gmm_ms_net_cap(tvb, msnt_cap_tree, pinfo, offset, ms_net_cap_len, NULL((void*)0), 0);
4727 }
4728 /* m+1 Length of Mobile Equipment Identity (MEI) */
4729 mei_len = tvb_get_uint8(tvb, offset);
4730 proto_tree_add_item(tree, hf_gtpv2_mm_context_mei_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4731 offset += 1;
4732 /* (m+2) to r Mobile Equipment Identity (MEI) */
4733 if (mei_len) {
4734 proto_tree_add_item(tree, hf_gtpv2_mei, tvb, offset, mei_len, ENC_BCD_DIGITS_0_90x00000044|ENC_LITTLE_ENDIAN0x80000000);
4735 offset += mei_len;
4736 }
4737 return offset;
4738}
4739
4740static int
4741dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, unsigned offset)
4742{
4743 proto_tree *accrstdata_tree;
4744
4745 accrstdata_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtpv2_access_rest_data, NULL((void*)0), "Access restriction data");
4746 /* Spare HNNA ENA INA GANA GENA UNA */
4747 proto_tree_add_bits_item(accrstdata_tree, hf_gtpv2_spare_bits, tvb, (offset << 3), 1, ENC_BIG_ENDIAN0x00000000);
4748 proto_tree_add_item(accrstdata_tree, hf_gtpv2_hbna, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4749 proto_tree_add_item(accrstdata_tree, hf_gtpv2_hnna, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4750 proto_tree_add_item(accrstdata_tree, hf_gtpv2_ena, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4751 proto_tree_add_item(accrstdata_tree, hf_gtpv2_ina, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4752 proto_tree_add_item(accrstdata_tree, hf_gtpv2_gana, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4753 proto_tree_add_item(accrstdata_tree, hf_gtpv2_gena, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4754 proto_tree_add_item(accrstdata_tree, hf_gtpv2_una, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4755 offset += 1;
4756
4757 return offset;
4758}
4759
4760/* Type = 103 (decimal)
4761 * Figure 8.38-1: GSM Key and Triplets
4762 */
4763static void
4764dissect_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)))
4765{
4766 proto_tree *flag_tree;
4767 unsigned offset;
4768 uint8_t oct, drxi, num_triplet, uamb_ri, samb_ri;
4769
4770 offset = 0;
4771 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4772
4773 /* Octet 5 */
4774 /* Security Mode | Spare | DRXI | CKSN */
4775 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4776 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4777 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 1, ENC_BIG_ENDIAN0x00000000);
4778 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4779 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4780 offset += 1;
4781 /* Octet 6 */
4782 /* Number of Triplet | Spare | UAMB RI | SAMB RI */
4783 oct = tvb_get_uint8(tvb, offset);
4784 num_triplet = oct >> 5;
4785 uamb_ri = (oct & 0x02) >> 1;
4786 samb_ri = oct & 0x01;
4787
4788 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_tri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4789 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4790 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4791 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4792 offset += 1;
4793
4794 /* Octet 7 Spare Used Cipher */
4795 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4796 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4797 offset += 1;
4798
4799 /* 8 to 15 Kc */
4800 proto_tree_add_item(tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4801 offset += 8;
4802
4803 /* 16 to h Authentication Triplet [0..4] */
4804 if (num_triplet) {
4805 dissect_gtpv2_authentication_triplets(tvb, tree, offset, num_triplet);
4806 }
4807
4808 /*
4809 * (h+1) to (h+2) DRX parameter
4810 */
4811 if (drxi) {
4812 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4813 offset += 2;
4814 }
4815
4816 /* Dissect octet j to r */
4817 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4818
4819 proto_tree_add_expert_format_remaining(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
4820}
4821
4822/* Type = 104 (decimal)
4823 * Figure 8.38-2: UMTS Key, Used Cipher and Quintuplets
4824 */
4825static void
4826dissect_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)))
4827{
4828 proto_tree *flag_tree;
4829 unsigned offset;
4830 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
4831
4832 offset = 0;
4833 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4834
4835 /* Octet 5 */
4836 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4837 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4838 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
4839 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4840 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4841 offset += 1;
4842 /* Octet 6 */
4843 oct = tvb_get_uint8(tvb, offset);
4844 nr_qui = oct >> 5;
4845 uamb_ri = (oct & 0x02) >> 1;
4846 samb_ri = oct & 0x01;
4847 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4848 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4849 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4850 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4851 offset += 1;
4852 /* Octet 7 Spare Used Cipher */
4853 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4854 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4855 offset += 1;
4856
4857 /* Octet 8 to 23 CK */
4858 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
4859 offset += 16;
4860 /* Octet 24 to 39 IK */
4861 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
4862 offset += 16;
4863
4864 /*
4865 * 40 to h Authentication Quintuplet [0..4]
4866 */
4867 if (nr_qui) {
4868 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
4869 }
4870
4871 /*
4872 * (h+1) to (h+2) DRX parameter
4873 */
4874 if (drxi) {
4875 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4876 offset += 2;
4877 }
4878
4879
4880 /* Dissect octet j to r */
4881 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4882
4883 /* r+1 Spare HNNA ENA INA GANA GENA UNA
4884 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
4885 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
4886 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
4887 */
4888 if (offset <length) {
4889 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4890 } else {
4891 return;
4892 }
4893 if (offset ==length) {
4894 return;
4895 }
4896
4897 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
4898 vdp_len = tvb_get_uint8(tvb, offset);
4899 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4900 offset += 1;
4901 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
4902 if (vdp_len) {
4903 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
4904 offset += vdp_len;
4905 }
4906
4907 /* s+1 Length of Higher bitrates than 16 Mbps flag */
4908 if (offset ==length) {
4909 hbr_len = tvb_get_uint8(tvb, offset);
4910 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4911 offset += 1;
4912 /* s+2 Higher bitrates than 16 Mbps flag */
4913 if (hbr_len) {
4914 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4915 offset += hbr_len;
4916 }
4917 } else {
4918 return;
4919 }
4920
4921 proto_tree_add_expert_format_remaining(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
4922
4923}
4924
4925/* Type = 105 (decimal)
4926 * Figure 8.38-3: GSM Key, Used Cipher and Quintuplets
4927 */
4928static void
4929dissect_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)))
4930{
4931 proto_tree *flag_tree;
4932 unsigned offset;
4933 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
4934
4935 offset = 0;
4936 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
4937
4938 /* Octet 5 */
4939 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4940 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
4941 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
4942 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4943 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_cksn_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4944 offset += 1;
4945 /* Octet 6 */
4946 oct = tvb_get_uint8(tvb, offset);
4947 nr_qui = oct >> 5;
4948 uamb_ri = (oct & 0x02) >> 1;
4949 samb_ri = oct & 0x01;
4950 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4951 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
4952 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4953 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
4954 offset += 1;
4955 /* Octet 7 Spare Used Cipher */
4956 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3)), 5, ENC_BIG_ENDIAN0x00000000);
4957 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_used_cipher, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4958 offset += 1;
4959 /* 8 to 15 Kc */
4960 proto_tree_add_item(tree, hf_gtpv2_mm_context_kc, tvb, offset, 8, ENC_NA0x00000000);
4961 offset += 8;
4962
4963 /*
4964 * 40 to h Authentication Quintuplet [0..4]
4965 */
4966 if (nr_qui) {
4967 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
4968 }
4969
4970 /*
4971 * (h+1) to (h+2) DRX parameter
4972 */
4973 if (drxi) {
4974 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4975 offset += 2;
4976 }
4977
4978
4979 /* Dissect octet j to r */
4980 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
4981
4982 /* r+1 Spare HNNA ENA INA GANA GENA UNA
4983 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
4984 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
4985 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
4986 */
4987 if (offset <length) {
4988 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4989 } else {
4990 return;
4991 }
4992 if (offset ==length) {
4993 return;
4994 }
4995
4996 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
4997 vdp_len = tvb_get_uint8(tvb, offset);
4998 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4999 offset += 1;
5000 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
5001 if (vdp_len) {
5002 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
5003 offset += vdp_len;
5004 }
5005
5006 /* s+1 Length of Higher bitrates than 16 Mbps flag */
5007 if (offset <length) {
5008 hbr_len = tvb_get_uint8(tvb, offset);
5009 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5010 offset += 1;
5011 /* s+2 Higher bitrates than 16 Mbps flag */
5012 if (hbr_len) {
5013 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5014 offset += hbr_len;
5015 }
5016 } else {
5017 return;
5018 }
5019
5020 proto_tree_add_expert_format_remaining(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
5021
5022}
5023
5024/* Type = 106 (decimal)
5025 * Figure 8.38-4: UMTS Key and Quintuplets
5026 */
5027static void
5028dissect_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)))
5029{
5030 proto_tree *flag_tree;
5031 unsigned offset;
5032 uint8_t oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len, ear_len;
5033
5034 offset = 0;
5035 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5036
5037 /* Octet 5 */
5038 /* Security Mode Spare DRXI KSI */
5039 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5040 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
5041 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
5042 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5043 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5044 offset += 1;
5045 /* Octet 6 */
5046 /* Number of Quintuplets Spare UAMB RI SAMB RI */
5047 oct = tvb_get_uint8(tvb, offset);
5048 nr_qui = oct >> 5;
5049 uamb_ri = (oct & 0x02) >> 1;
5050 samb_ri = oct & 0x01;
5051
5052 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5053 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, (offset << 3) + 3, 3, ENC_BIG_ENDIAN0x00000000);
5054 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5055 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
5056 offset += 1;
5057 /* Octet 7 Spare */
5058 proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5059 offset += 1;
5060 /* Octet 8 to 23 CK */
5061 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
5062 offset += 16;
5063 /* Octet 24 to 39 IK */
5064 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
5065 offset += 16;
5066
5067 /*
5068 * 40 to h Authentication Quintuplet [0..4]
5069 */
5070 if (nr_qui) {
5071 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
5072 }
5073
5074 /*
5075 * (h+1) to (h+2) DRX parameter
5076 */
5077 if (drxi) {
5078 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5079 offset += 2;
5080 }
5081
5082
5083 /* Dissect octet j to r */
5084 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5085
5086 /* r+1 Spare HNNA ENA INA GANA GENA UNA
5087 * The Access restriction data is composed of UNA(UTRAN Not Allowed), GENA(GERAN Not Allowed),
5088 * GANA(GAN Not Allowed), INA(I-HSPA-Evolution Not Allowed), ENA(E-UTRAN Not Allowed) and
5089 * HNNA(HO-To-Non-3GPPAccess Not Allowed).
5090 */
5091 if (offset <length) {
5092 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5093 } else {
5094 return;
5095 }
5096 if (offset ==length) {
5097 return;
5098 }
5099
5100 /* r+2 Length of Voice Domain Preference and UE's Usage Setting */
5101 vdp_len = tvb_get_uint8(tvb, offset);
5102 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5103 offset += 1;
5104 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
5105 if (vdp_len) {
5106 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
5107 offset += vdp_len;
5108 }
5109
5110 /* s+1 Length of Higher bitrates than 16 Mbps flag */
5111 if (offset <length) {
5112 hbr_len = tvb_get_uint8(tvb, offset);
5113 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5114 offset += 1;
5115 /* s+2 Higher bitrates than 16 Mbps flag */
5116 if (hbr_len) {
5117 proto_tree_add_item(tree, hf_gtpv2_mm_context_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5118 offset += hbr_len;
5119 }
5120 } else {
5121 return;
5122 }
5123
5124 /* s+3 IOV_updates counter */
5125 if (offset <length) {
5126 proto_tree_add_item(tree, hf_gtpv2_mm_context_iov_updates_counter, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5127 offset += 1;
5128 } else {
5129 return;
5130 }
5131 /* s+4 Length of Extended Access Restriction Data */
5132 if (offset <length) {
5133 ear_len = tvb_get_uint8(tvb, offset);
5134 proto_tree_add_item(tree, hf_gtpv2_mm_context_ear_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5135 offset += 1;
5136 static int * const ear_flags[] = {
5137 &hf_gtpv2_mm_context_nrsrna,
5138 NULL((void*)0)
5139 };
5140 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ear_flags, ENC_BIG_ENDIAN0x00000000);
5141 offset += 1;
5142 if (ear_len > 1) {
5143 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
5144 offset += ear_len - 1;
5145 }
5146 } else {
5147 return;
5148 }
5149
5150 if (offset ==length) {
5151 return;
5152 }
5153 /* ts+1) to (n+4) These octet(s) is/are present only if explicitly specified */
5154 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
5155
5156}
5157
5158/* 8.38 MM Context
5159 * Type = 107 (decimal)
5160 * Figure 8.38-5: EPS Security Context and Quadruplets
5161 */
5162static void
5163dissect_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)))
5164{
5165 proto_item *qua_item, *qui_item;
5166 proto_tree *flag_tree, *qua_tree, *qui_tree, *sc_tree;
5167 unsigned offset;
5168 uint8_t tmp, nhi, drxi, nr_qua, nr_qui, uamb_ri, osci, samb_ri, vdp_len;
5169 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;
5170
5171 offset = 0;
5172
5173 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5174
5175 /* Octet 5
5176 * Bits
5177 * 8 7 6 5 4 3 2 1
5178 * Security Mode | NHI | DRXI | KSIASME
5179 */
5180 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5181 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nhi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5182 /* If NHI (Next Hop Indicator), bit 5 of octet 5, is set to "1",
5183 * then the optional parameters NH (Next Hop) and NCC (Next
5184 * Hop Chaining Count) are both present, otherwise their octets are not present.
5185 */
5186 tmp = tvb_get_uint8(tvb, offset);
5187 nhi = (tmp & 0x10) >> 4;
5188 drxi = (tmp & 0x08) >> 3;
5189 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5190 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5191 offset += 1;
5192
5193 /* Octet 6
5194 * Bits
5195 * 8 7 6 5 4 3 2 1
5196 * Number of | Number of | UAMB | OSCI
5197 * Quintuplets | Quadruplet | RI |
5198 */
5199 tmp = tvb_get_uint8(tvb, offset);
5200 nr_qui = (tmp & 0xe0) >> 5;
5201 nr_qua = tmp & 0x1c;
5202 nr_qua >>= 2;
5203 uamb_ri = (tmp & 0x2) >> 1;
5204 osci = tmp & 1;
5205
5206 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5207 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5208 /* UAMB RI */
5209 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5210 /* OSCI */
5211 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_osci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5212 offset += 1;
5213
5214 /* Octet 7 SAMB RI Used NAS integrity protection algorithm Used NAS Cipher*/
5215 /* SAMB RI */
5216 samb_ri = tvb_get_uint8(tvb, offset) >> 7;
5217 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, offset << 3, 1, ENC_BIG_ENDIAN0x00000000);
5218 /* Used NAS integrity protection algorithm */
5219 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unipa, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5220 /* Used NAS Cipher */
5221 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_unc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5222 offset += 1;
5223
5224 /* Octet 8-10 NAS Downlink Count*/
5225 proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_dl_cnt, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5226 offset += 3;
5227
5228 /* Octet 11-13 NAS Uplink Count */
5229 proto_tree_add_item(tree, hf_gtpv2_mm_context_nas_ul_cnt, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5230 offset += 3;
5231
5232 /* Octet 14-45 */
5233 proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_NA0x00000000);
5234 offset += 32;
5235
5236 qua_item = proto_tree_add_uint(tree, hf_gtpv2_authentication_quadruplets, tvb, offset, 0, nr_qua);
5237 if ( nr_qua ){
5238 qua_tree = proto_item_add_subtree(qua_item, ett_gtpv2_qua);
5239 offset = dissect_gtpv2_authentication_quadruplets(tvb, qua_tree, offset, nr_qua);
5240 }else {
5241 proto_item_set_generated(qua_item);
5242 }
5243
5244 qui_item = proto_tree_add_uint(tree, hf_gtpv2_authentication_quintuplets, tvb, offset, 0, nr_qui);
5245 if (nr_qui) {
5246 qui_tree = proto_item_add_subtree(qui_item, ett_gtpv2_qui);
5247 offset = dissect_gtpv2_authentication_quintuplets(tvb, qui_tree, offset, nr_qui);
5248 }else{
5249 proto_item_set_generated(qui_item);
5250 }
5251
5252 /* (h+1) to (h+2) DRX parameter */
5253 if (drxi) {
5254 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5255 offset += 2;
5256 }
5257
5258 /* Octet p to p+31 & Octet p+32 */
5259 if ( nhi )
5260 {
5261 proto_tree_add_item(tree, hf_gtpv2_mm_context_nh, tvb, offset, 32, ENC_NA0x00000000);
5262 offset += 32;
5263
5264 proto_tree_add_item(tree, hf_gtpv2_mm_context_ncc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5265 offset += 1;
5266 }
5267
5268
5269 /* Dissect octet j to r */
5270 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5271
5272 /* r+1 Spare HBNA HNNA ENA INA GANA GENA UNA */
5273 if (offset <length) {
5274 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5275 } else {
5276 return;
5277 }
5278
5279 if (offset ==length) {
5280 return;
5281 }
5282
5283 /* the fields for the Old EPS Security Context (i.e. octets from s to s+64)
5284 * may be present only in S10 Forward Relocation Request message according to
5285 * the Rules on Concurrent Running of Security Procedures, which are specified in 3GPP TS 33.401 [12].
5286 * The octets for Old EPS Security Context shall be present if the OSCI (Old Security Context Indicator),
5287 * bit 1 of octet 6) is set to "1"; otherwise they shall not be present.
5288 */
5289 if (osci == 1) {
5290 /* s */
5291 /* If NHI_old (Next Hop Indicator for old EPS Security Context), bit 1 of octet s, is set to "1",
5292 * then the parameters old NH (Next Hop) and old NCC (Next Hop Chaining Count) shall be present;
5293 * otherwise the octets for old NH parameter shall not be present and the value of old NCC parameter
5294 * shall be ignored by the receiver
5295 */
5296 /* NHI_old Spare old KSIASME old NCC*/
5297 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_contex_nhi_old, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &dword);
5298 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_ksiasme, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5299 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_ncc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5300 offset++;
5301 /* (s+1) to (s+32) old KASME */
5302 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_kasme, tvb, offset, 32, ENC_NA0x00000000);
5303 offset += 32;
5304 /* (s+33) to (s+64) old NH */
5305 if (dword) {
5306 proto_tree_add_item(tree, hf_gtpv2_mm_context_old_nh, tvb, offset, 32, ENC_NA0x00000000);
5307 offset += 32;
5308 }
5309 }
5310
5311 if (offset ==length) {
5312 return;
5313 }
5314
5315 /* w Length of Voice Domain Preference and UE's Usage Setting */
5316 vdp_len = tvb_get_uint8(tvb, offset);
5317 proto_tree_add_item(tree, hf_gtpv2_mm_context_vdp_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5318 offset += 1;
5319 /* (r+3) to s Voice Domain Preference and UE's Usage Setting */
5320 if (vdp_len) {
5321 proto_tree_add_item(tree, hf_gtpv2_voice_domain_and_ue_usage_setting, tvb, offset, vdp_len, ENC_NA0x00000000);
5322 offset += vdp_len;
5323 }
5324
5325 if (offset ==length) {
5326 return;
5327 }
5328
5329 /* (t+1) to (t+2) Length of UE Radio Capability for Paging information*/
5330 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_paging_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &paging_len);
5331 offset += 2;
5332
5333 if (paging_len > 0) {
5334 proto_tree_add_item(tree, hf_gtpv2_ue_radio_capability_for_paging_information, tvb, offset, paging_len, ENC_NA0x00000000);
5335 offset +=paging_len;
5336 }
5337
5338 if (offset ==length) {
5339 return;
5340 }
5341
5342 /*(u+1) Length of Extended Access Restriction Data */
5343 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);
5344 offset += 1;
5345
5346 /*(u+2) to v
5347 *8 7 6 5 4 3 2 1
5348 * spare | USSRNA | NRSRNA
5349 */
5350 if(ex_access_res_data_len > 0){
5351 static int* const ear_flags[] = {
5352 &hf_gtpv2_spare_b7_b5,
5353 &hf_gtpv2_mm_context_nruna,
5354 &hf_gtpv2_mm_context_nrusrna,
5355 &hf_gtpv2_mm_context_nrna,
5356 &hf_gtpv2_mm_context_ussrna,
5357 &hf_gtpv2_mm_context_nrsrna,
5358 NULL((void*)0)
5359 };
5360 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ear_flags, ENC_BIG_ENDIAN0x00000000);
5361
5362 offset += 1;
5363 if (ex_access_res_data_len > 1) {
5364 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");
5365 offset += ex_access_res_data_len - 1;
5366 }
5367 }
5368
5369 if (offset ==length) {
5370 return;
5371 }
5372
5373 /*
5374 * The UE additional security capability coding is specified in clause 9.9.3.53 of 3GPP TS 24.301 [23].
5375 * 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.
5376 */
5377 /*(v+1) Length of UE additional security capability*/
5378 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);
5379 offset += 1;
5380
5381 /*(v+2) to x UE additional security capability*/
5382 if(ue_add_sec_cap_len > 0){
5383 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");
5384 offset += de_emm_ue_add_sec_cap(tvb, sc_tree, NULL((void*)0), offset, ue_add_sec_cap_len, NULL((void*)0), 0);
5385 }
5386
5387 if (offset ==length) {
5388 return;
5389 }
5390
5391 /* x+1 Length of UE NR security capability */
5392 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);
5393 offset += 1;
5394 /* The UE NR security capability coding is specified in clause 9.8.3.57 of 3GPP TS 24.501.
5395 * If Length of UE NR security capability is zero, then the field UE NR security capability in octets
5396 "(x+2) to y" shall not be present.
5397 */
5398 if (ue_nr_sec_cap_len) {
5399 /* (x+2) to y UE NR security capability */
5400 /* The UE NR security capability coding is specified in clause 9.8.3.57 of 3GPP TS 24.501 */
5401 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");
5402 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");
5403 offset += ue_nr_sec_cap_len;
5404 }
5405
5406 if (offset ==length) {
5407 return;
5408 }
5409
5410 /* (y+1) to (y+2) Length of APN Rate Control Statuses */
5411 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);
5412 offset += 2;
5413 if (apn_rte_ctrl_sts_len) {
5414 /* (y+3) to l APN Rate Control Status [1..z] */
5415 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");
5416 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");
5417 offset += apn_rte_ctrl_sts_len;
5418 }
5419 if (offset ==length) {
5420 return;
5421 }
5422
5423 /* (l+1) Length of Core Network Restrictions */
5424 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_cnr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ie_len);
5425 offset += 1;
5426 if (ie_len) {
5427 /* (l+2) to (l+5) Core Network Restrictions */
5428 /* The Core Network Restrictions coding is specified in clause 7.2.230 of 3GPP TS 29.272 [70].
5429 If Length of Core Network Restrictions is zero, then the field of Core Network Restrictions
5430 in octets "(l+2) to (l+5)" shall not be present.
5431 */
5432 tvbuff_t *new_tvb = tvb_new_subset_length(tvb, offset, ie_len);
5433 dissect_diameter_3gpp_core_network_restrictions(new_tvb, pinfo, tree, NULL((void*)0));
5434 offset += ie_len;
5435 }
5436
5437 if (offset ==length) {
5438 return;
5439 }
5440
5441 /* (l+6) Length of UE Radio Capability ID */
5442 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mm_context_ue_radio_cap_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ie_len);
5443 offset += 1;
5444 if (ie_len) {
5445 /* (l+7) to z UE Radio Capability ID
5446 * The UE Radio Capability ID is specified in the clause 9.9.3.60 of 3GPP TS24.301
5447 */
5448 de_nas_5gs_mm_ue_radio_cap_id(tvb, tree, pinfo, offset, ie_len, NULL((void*)0), 0);
5449 offset += ie_len;
5450 }
5451
5452 if (offset ==length) {
5453 return;
5454 }
5455
5456 /*(a) ENSCT */
5457 proto_tree_add_item(tree, hf_gtpv2_mm_context_ensct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5458 offset += 1;
5459
5460 if (offset <length){
5461 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");
5462 }
5463}
5464
5465/*
5466 * Type = 108 (decimal)
5467 * Figure 8.38-6: UMTS Key, Quadruplets and Quintuplets
5468 */
5469static void
5470dissect_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)))
5471{
5472 proto_tree *flag_tree;
5473 uint32_t offset;
5474 uint8_t tmp, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_length;
5475
5476 offset = 0;
5477 flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL((void*)0), "MM Context flags");
5478
5479 /* Octet 5
5480 * Security Mode Spare DRXI KSIASME
5481 */
5482 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5483 proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, ((offset << 3) + 3), 1, ENC_BIG_ENDIAN0x00000000);
5484 drxi = (tvb_get_uint8(tvb, offset) & 0x08) >> 3;
5485 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5486 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_ksi_a, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5487 offset += 1;
5488
5489 /* Octet 6
5490 * Bits
5491 * 8 7 6 5 4 3 2 1
5492 * Number of | Number of | UAMB | SAMB
5493 * Quintuplets | Quadruplet | RI | RI
5494 */
5495 tmp = tvb_get_uint8(tvb, offset);
5496 nr_qui = (tmp & 0xe0) >> 5;
5497 nr_qua = tmp & 0x1c;
5498 nr_qua >>= 2;
5499 uamb_ri = (tmp & 0x2) >> 1;
5500 samb_ri = tmp & 0x01;
5501
5502 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5503 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5504 proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_uamb_ri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5505 proto_tree_add_bits_item(flag_tree, hf_gtpv2_mm_context_samb_ri, tvb, (offset << 3) + 7, 1, ENC_BIG_ENDIAN0x00000000);
5506 offset += 1;
5507 /* Octet 7 Spare */
5508 proto_tree_add_item(flag_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5509 offset += 1;
5510 /* Octet 8 to 23 CK */
5511 proto_tree_add_item(tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA0x00000000);
5512 offset += 16;
5513 /* Octet 24 to 39 IK */
5514 proto_tree_add_item(tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA0x00000000);
5515 offset += 16;
5516
5517 if ( nr_qua ) {
5518 offset = dissect_gtpv2_authentication_quadruplets(tvb, tree, offset, nr_qua);
5519 }
5520
5521 if (nr_qui) {
5522 offset = dissect_gtpv2_authentication_quintuplets(tvb, tree, offset, nr_qui);
5523 }
5524
5525 /* (h+1) to (h+2) DRX parameter */
5526 if (drxi) {
5527 proto_tree_add_item(tree, hf_gtpv2_mm_context_drx, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5528 offset += 2;
5529 }
5530
5531 /* Dissect octet j to r */
5532 offset = dissect_gtpv2_mm_context_common_data(tvb, pinfo, tree, offset, samb_ri, uamb_ri);
5533
5534 if (offset >= (uint32_t)length) {
5535 return;
5536 }
5537 /* r+1 Spare HBNA HNNA ENA INA GANA GENA UNA */
5538 offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5539
5540 if (offset >= (uint32_t)length) {
5541 return;
5542 }
5543
5544 /* 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
5545 * Length of Voice Domain Preference and UE's Usage Setting is zero, then the Voice Domain Preference and UE's Usage
5546 * Setting parameter shall not be present.
5547 */
5548 /* r+2 */
5549 vdp_length = tvb_get_uint8(tvb, offset);
5550 proto_tree_add_item(tree, hf_gtpv2_vdp_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5551 offset++;
5552
5553 if(vdp_length !=0){
5554 offset += de_gmm_voice_domain_pref(tvb, tree, pinfo, offset, vdp_length, NULL((void*)0), 0);
5555 }
5556
5557 if (offset < (uint32_t)length) {
5558 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
5559 }
5560
5561}
5562
5563/*
5564 * 8.39 PDN Connection (grouped IE)
5565 */
5566static void
5567dissect_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)))
5568{
5569 unsigned offset = 0;
5570 proto_tree *grouped_tree;
5571 tvbuff_t *new_tvb;
5572
5573 proto_item_append_text(item, "[Grouped IE]");
5574 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
5575 new_tvb = tvb_new_subset_length(tvb, offset, length);
5576
5577 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_PDN_CONNECTION109);
5578}
5579/*
5580 * 8.40 PDU Numbers
5581 */
5582static void
5583dissect_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)))
5584{
5585 proto_item *nsapi_ti;
5586 proto_tree *nsapi_tree;
5587 uint8_t nsapi;
5588 unsigned offset = 0;
5589
5590 nsapi = (tvb_get_uint8(tvb, offset) & 0x08);
5591 nsapi_ti = proto_tree_add_item(tree, hf_gtpv2_nsapi08, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5592 nsapi_tree = proto_item_add_subtree(nsapi_ti, ett_gtpv2_pdn_numbers_nsapi);
5593 proto_tree_add_bits_item(nsapi_tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
5594 proto_tree_add_item(nsapi_tree, hf_gtpv2_pdn_numbers_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5595 proto_item_append_text(item, "NSAPI: %u", nsapi);
5596 offset += 1;
5597
5598 proto_tree_add_item(tree, hf_gtpv2_dl_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5599 offset += 2;
5600
5601 proto_tree_add_item(tree, hf_gtpv2_ul_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5602 offset += 2;
5603
5604 proto_tree_add_item(tree, hf_gtpv2_send_n_pdu_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5605 offset += 2;
5606
5607 proto_tree_add_item(tree, hf_gtpv2_receive_n_pdu_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5608}
5609
5610/*
5611 * 8.41 Packet TMSI (P-TMSI)
5612 */
5613static void
5614dissect_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)))
5615{
5616 unsigned offset = 0;
5617 proto_item* ti;
5618
5619 /* The TMSI consists of 4 octets. It can be coded using a full hexadecimal representation. */
5620 proto_tree_add_item(tree, hf_gtpv2_p_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5621 ti = proto_tree_add_item(tree, hf_3gpp_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5622 proto_item_set_hidden(ti);
5623 proto_item_append_text(item, "%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
5624}
5625
5626/*
5627 * 8.42 P-TMSI Signature
5628 */
5629static void
5630dissect_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)))
5631{
5632 unsigned offset = 0;
5633
5634 /* The P-TMSI Signature consists of 3 octets and may be allocated by the SGSN. */
5635 proto_tree_add_item(tree, hf_gtpv2_p_tmsi_sig, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5636 proto_item_append_text(item, "%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 3));
5637
5638}
5639
5640/*
5641 * 8.43 Hop Counter
5642 */
5643static void
5644dissect_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)))
5645{
5646 unsigned offset = 0;
5647 uint8_t hop_counter;
5648
5649 hop_counter = tvb_get_uint8(tvb, offset);
5650
5651 proto_tree_add_item(tree, hf_gtpv2_hop_counter, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5652 proto_item_append_text(item, "%d", hop_counter);
5653}
5654
5655/*
5656 * 8.44 UE Time Zone
5657 */
5658
5659static const value_string gtpv2_ue_time_zone_dst_vals[] = {
5660 {0, "No Adjustments for Daylight Saving Time"},
5661 {1, "+1 Hour Adjustments for Daylight Saving Time"},
5662 {2, "+2 Hour Adjustments for Daylight Saving Time"},
5663 {3, "Spare"},
5664 {0, NULL((void*)0)}
5665};
5666static void
5667dissect_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)))
5668{
5669 unsigned offset = 0;
5670
5671 /*
5672 * UE Time Zone is used to indicate the offset between universal time and local time in steps of 15 minutes of where the
5673 * UE currently resides. The "Time Zone" field uses the same format as the "Time Zone" IE in 3GPP TS 24.008 [5].
5674 * (packet-gsm_a_dtap.c)
5675 */
5676 de_time_zone(tvb, tree, pinfo, offset, 1, NULL((void*)0), 0);
5677 offset += 1;
5678 proto_tree_add_item(item, hf_gtpv2_ue_time_zone_dst, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5679}
5680
5681/*
5682 * 8.45 Trace Reference
5683 */
5684static void
5685dissect_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)))
5686{
5687 int offset = 0;
5688 uint32_t trace_id;
5689 char *mcc_mnc_str;
5690
5691 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_NONE, true1);
5692 offset += 3;
5693
5694 trace_id = tvb_get_ntohs(tvb, offset);
5695 proto_tree_add_item(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
5696
5697 proto_item_append_text(item, "%s,Trace ID %u", mcc_mnc_str, trace_id);
5698}
5699/*
5700 * 8.46 Complete Request Message
5701 */
5702static const value_string gtpv2_complete_req_msg_type_vals[] = {
5703 {0, "Complete Attach Request Message" },
5704 {1, "Complete TAU Request Message" },
5705 {0, NULL((void*)0) }
5706};
5707static void
5708dissect_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)))
5709{
5710 tvbuff_t *new_tvb;
5711 int offset;
5712
5713 offset = 0;
5714
5715 proto_tree_add_item(tree, hf_gtpv2_complete_req_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5716
5717 offset += 1;
5718
5719 /* Add the Complete Request Message */
5720 new_tvb = tvb_new_subset_length(tvb, offset, length-1);
5721 call_dissector(nas_eps_handle, new_tvb, pinfo, tree);
5722
5723}
5724
5725/*
5726 * 8.47 GUTI
5727 */
5728static void
5729dissect_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)))
5730{
5731 unsigned offset = 0;
5732
5733 offset = 0;
5734
5735 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
5736 offset += 3;
5737
5738 proto_tree_add_item(tree, hf_gtpv2_mme_grp_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5739 offset += 2;
5740
5741 proto_tree_add_item(tree, hf_gtpv2_mme_code, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5742 offset += 1;
5743
5744 proto_tree_add_item(tree, hf_gtpv2_m_tmsi, tvb, offset, 4, ENC_NA0x00000000);
5745}
5746
5747/*
5748 * 8.48 Fully Qualified Container (F-Container)
5749 */
5750
5751static const value_string gtpv2_container_type_vals[] = {
5752 {1, "UTRAN transparent container"},
5753 {2, "BSS container"},
5754 {3, "E-UTRAN transparent container"},
5755 {4, "NBIFOM Container"},
5756 {5, "EN-DC Container"},
5757 {6, "Inter-System SON Container"},
5758 {0, NULL((void*)0)}
5759};
5760
5761
5762static void
5763dissect_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)))
5764{
5765 tvbuff_t *new_tvb;
5766 proto_tree *sub_tree;
5767 unsigned offset = 0;
5768 uint32_t container_type;
5769 uint8_t container_flags, xid_len;
5770
5771 /* Octets 8 7 6 5 4 3 2 1
5772 * 5 Spare | Container Type
5773 */
5774 proto_tree_add_item_ret_uint(tree, hf_gtpv2_container_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &container_type);
5775 offset += 1;
5776 length--;
5777 if (length == 0) {
5778 expert_add_info(pinfo, item, &ei_gtpv2_ie_len_invalid);
5779 return;
5780 }
5781 if ( (message_type == GTPV2_FORWARD_RELOCATION_REQ133)
5782 || (message_type == GTPV2_CONTEXT_RESPONSE131)
5783 || (message_type == GTPV2_RAN_INFORMATION_RELAY152)) {
5784 switch (container_type) {
5785 case 1:
5786 /* UTRAN transparent container (1)
5787 * Contains the "Source to Target
5788 * Transparent Container", if the message is used for PS
5789 * handover to UTRAN Iu mode procedures, SRNS relocation
5790 * procedure and E-UTRAN to UTRAN inter RAT handover
5791 * procedure.
5792 */
5793 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_utran_con, NULL((void*)0), "UTRAN transparent container");
5794 new_tvb = tvb_new_subset_length(tvb, offset, length);
5795 dissect_ranap_Source_ToTarget_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5796 return;
5797 case 2:
5798 /* BSS container */
5799 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_bss_con, NULL((void*)0), "BSS container");
5800 /* The flags PFI, RP, SAPI and PHX in octet 6 indicate the corresponding type of parameter */
5801 proto_tree_add_item(sub_tree, hf_gtpv2_bss_container_phx, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5802 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5803 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5804 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi_flg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5805 container_flags = tvb_get_uint8(tvb, offset);
5806 offset += 1;
5807 if ((container_flags & 0x01) == 1) {
5808 /* Packet Flow ID present */
5809 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_pfi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5810 offset += 1;
5811 }
5812 if (((container_flags & 0x04) == 4) || ((container_flags & 0x02) == 2)) {
5813 if ((container_flags & 0x04) == 4) {
5814 /* SAPI present */
5815 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5816 }
5817 if ((container_flags & 0x02) == 2) {
5818 /* Radio Priority present */
5819 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_rp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5820 }
5821 offset += 1;
5822 }
5823 if ((container_flags & 0x08) == 8) {
5824 /* XiD parameters length is present in Octet c.
5825 * XiD parameters are present in Octet d to n.
5826 */
5827 xid_len = tvb_get_uint8(tvb, offset);
5828 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5829 offset += 1;
5830 proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_xid, tvb, offset, xid_len, ENC_NA0x00000000);
5831 }
5832 return;
5833 case 3:
5834 /* E-UTRAN transparent container
5835 * This IE shall be included to contain the "Source to Target
5836 * Transparent Container", if the message is used for
5837 * UTRAN/GERAN to E-UTRAN inter RAT handover
5838 * procedure, E-UTRAN intra RAT handover procedure and
5839 * 3G SGSN to MME combined hard handover and SRNS
5840 * relocation procedure. The Container Type shall be set to 3.
5841 */
5842 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_eutran_con, NULL((void*)0), "E-UTRAN transparent container");
5843 new_tvb = tvb_new_subset_length(tvb, offset, length);
5844 dissect_s1ap_SourceeNB_ToTargeteNB_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5845 return;
5846 default:
5847 break;
5848 }
5849 }
5850 if (message_type == GTPV2_FORWARD_CTX_NOTIFICATION137) {
5851 switch (container_type) {
5852 case 3:
5853 /* E-UTRAN transparent container */
5854 new_tvb = tvb_new_subset_length(tvb, offset, length);
5855 dissect_s1ap_ENB_StatusTransfer_TransparentContainer_PDU(new_tvb, pinfo, tree, NULL((void*)0));
5856 return;
5857 default:
5858 break;
5859 }
5860 }
5861 if (message_type == GTPV2_FORWARD_RELOCATION_RESP134) {
5862
5863 /* 7.3.2 Forward Relocation Response */
5864 switch (container_type) {
5865 case 3:
5866 /* E-UTRAN transparent container
5867 * This IE shall be included to contain the "Target to Source Transparent Container"
5868 * during a handover to E-UTRAN, 5GS to EPS handover and EPS to 5GS handover.
5869 * If the Cause IE contains the value "Request accepted". The Container Type shall be set to 3.
5870 */
5871 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_eutran_con, NULL((void*)0), "E-UTRAN transparent container");
5872 new_tvb = tvb_new_subset_length(tvb, offset, length);
5873 dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5874 return;
5875 default:
5876 break;
5877 }
5878 }
5879 if (message_type == GTPV2_CONFIGURATION_TRANSFER_TUNNEL141) {
5880 /* 7.3.18 Configuration Transfer Tunnel */
5881 switch (container_type) {
5882 case 3:
5883 /* SON Configuration Transfer
5884 * This IE shall be included to contain the "SON Configuration Transfer" as specified in 3GPP TS 36.413 [10].
5885 * The Container Type shall be set to 3.
5886 */
5887 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_son_con, NULL((void*)0), "SON Configuration Transfer");
5888 new_tvb = tvb_new_subset_length(tvb, offset, length);
5889 dissect_s1ap_SONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5890 return;
5891 case 5:
5892 /* EN-DC SON Configuration Transfer
5893 * This IE shall be included to contain the "EN-DC SON Configuration Transfer" as specified in 3GPP TS 36.413 [10].
5894 * The Container Type shall be set to 5.
5895 */
5896 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_endc_son_con, NULL((void*)0), "EN-DC SON Configuration Transfer");
5897 new_tvb = tvb_new_subset_length(tvb, offset, length);
5898 dissect_s1ap_EN_DCSONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5899 return;
5900 case 6:
5901 /* Inter-System SON Container
5902 * This IE shall be included to contain the "Inter-System SON Container" as specified in 3GPP TS 36.413 [10].
5903 * The Container Type shall be set to 6.
5904 */
5905 sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_intersys_son_con, NULL((void*)0), "Inter-System SON Container");
5906 new_tvb = tvb_new_subset_length(tvb, offset, length);
5907 dissect_s1ap_IntersystemSONConfigurationTransfer_PDU(new_tvb, pinfo, sub_tree, NULL((void*)0));
5908 return;
5909 default:
5910 break;
5911 }
5912 }
5913 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length);
5914
5915}
5916
5917/*
5918 * 8.49 Fully Qualified Cause (F-Cause)
5919 */
5920
5921static const value_string gtpv2_cause_type_vals[] = {
5922 {0, "Radio Network Layer"},
5923 {1, "Transport Layer"},
5924 {2, "NAS"},
5925 {3, "Protocol"},
5926 {4, "Miscellaneous"},
5927 {5, "<spare>"},
5928 {6, "<spare>"},
5929 {7, "<spare>"},
5930 {8, "<spare>"},
5931 {9, "<spare>"},
5932 {10, "<spare>"},
5933 {11, "<spare>"},
5934 {12, "<spare>"},
5935 {13, "<spare>"},
5936 {14, "<spare>"},
5937 {15, "<spare>"},
5938 {0, NULL((void*)0)}
5939};
5940static 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) }
;
5941
5942static void
5943dissect_gtpv2_s1ap_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, unsigned offset, uint8_t cause_type)
5944{
5945
5946 switch (cause_type) {
5947 case 0:
5948 /* CauseRadioNetwork */
5949 proto_tree_add_item(tree, hf_gtpv2_CauseRadioNetwork, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5950 break;
5951 case 1:
5952 /* CauseTransport */
5953 proto_tree_add_item(tree, hf_gtpv2_CauseTransport, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5954 break;
5955 case 2:
5956 /* CauseNas */
5957 proto_tree_add_item(tree, hf_gtpv2_CauseNas, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5958 break;
5959 case 3:
5960 /* CauseProtocol */
5961 proto_tree_add_item(tree, hf_gtpv2_CauseProtocol, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5962 break;
5963 case 4:
5964 /* CauseMisc */
5965 proto_tree_add_item(tree, hf_gtpv2_CauseMisc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5966 break;
5967 default:
5968 break;
5969 }
5970
5971 return;
5972
5973}
5974static void
5975dissect_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)))
5976{
5977 unsigned offset = 0;
5978 uint8_t cause_type;
5979
5980 /* The value of Instance field of the F-Cause IE in a GTPv2 message shall indicate
5981 * whether the F-Cause field contains RANAP Cause, BSSGP Cause or RAN Cause.
5982 * If the F-Cause field contains RAN Cause, the Cause Type field shall contain
5983 * the RAN cause subcategory as specified in 3GPP TS 36.413 [10] and it shall be
5984 * encoded as in Table 8.49-1.
5985 * If the F-Cause field contains BSSGP Cause or RANAP Cause,
5986 * the Cause Type field shall be ignored by the receiver.
5987 */
5988 if (message_type == GTPV2_FORWARD_RELOCATION_REQ133) {
5989 switch (instance) {
5990 case 0:
5991 proto_item_append_text(item, "[RAN Cause]");
5992 proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5993 cause_type = tvb_get_uint8(tvb, offset);
5994 offset += 1;
5995 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
5996 return;
5997 case 1:
5998 proto_item_append_text(item, "[RANAP Cause]");
5999 break;
6000 case 2:
6001 proto_item_append_text(item, "[BSSGP Cause]");
6002 break;
6003 default:
6004 break;
6005 }
6006 }
6007 else if (message_type == GTPV2_FORWARD_RELOCATION_RESP134) {
6008 /* Table 7.3.2-1: Information Elements in a Forward Relocation Response */
6009 switch (instance) {
6010 case 0:
6011 /* Instance 0 S1-AP Cause */
6012 proto_item_append_text(item, "[S1-AP Cause]");
6013 proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6014 cause_type = tvb_get_uint8(tvb, offset);
6015 offset++;
6016 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
6017 return;
6018 case 1:
6019 /* Instance 1 RANAP Cause */
6020 proto_item_append_text(item, "[RANAP Cause]");
6021 break;
6022 case 2:
6023 /* Instance 2 BSSGP Cause */
6024 proto_item_append_text(item, "[BSSGP Cause]");
6025 break;
6026 default:
6027 break;
6028 }
6029
6030 }/* GTPV2_FORWARD_RELOCATION_RESP */
6031
6032 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length-offset);
6033
6034}
6035
6036/*
6037 * 8.50 PLMN ID
6038 */
6039/*
6040 * The Selected PLMN ID IE contains the core network operator selected for tne UE
6041 * in a shared network. Octets 5-7 shall be encoded as the content part of the
6042 * "Selected PLMN Identity" parameter in 3GPP TS 36.413 [10].
6043 * -The Selected PLMN identity consists of 3 digits from MCC followed by
6044 * either -a filler digit plus 2 digits from MNC (in case of 2 digit MNC) or
6045 * -3 digits from MNC (in case of a 3 digit MNC).
6046 *
6047 * 8 7 6 5 4 3 2 1
6048 * +--+--+--+--+--+--+--+--+
6049 * Octet 5 |MCC digit 2|MCC digit 1|
6050 * +--+--+--+--+--+--+--+--+
6051 * Octet 6 |MNC digit 1|MCC digit 3|
6052 * +--+--+--+--+--+--+--+--+
6053 * Octet 7 |MNC digit 3|MNC digit 2|
6054 * +--+--+--+--+--+--+--+--+
6055 */
6056static void
6057dissect_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)))
6058{
6059 char *mcc_mnc_str;
6060
6061 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, 0, E212_NONE, false0);
6062 proto_item_append_text(item, "%s", mcc_mnc_str);
6063}
6064
6065/*
6066 * 8.51 Target Identification
6067 */
6068
6069static const value_string gtpv2_target_type_vals[] = {
6070 {0, "RNC ID"},
6071 {1, "Macro eNodeB ID"},
6072 {2, "Cell Identifier"},
6073 {3, "Home eNodeB ID"},
6074 {4, "Extended Macro eNodeB ID"},
6075 {5, "gNodeB ID"},
6076 {6, "Macro ng-eNodeB ID"},
6077 {7, "Extended ng-eNodeB ID"},
6078 {8, "en-gNB ID"},
6079 {0, NULL((void*)0)}
6080};
6081static 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) }
;
6082
6083static char*
6084dissect_gtpv2_home_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
6085{
6086 char *str = NULL((void*)0);
6087 char *mcc_mnc_str;
6088 uint32_t home_enodeb_id;
6089
6090 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6091 *offset += 3;
6092
6093 /* Octet 10 to 12 Home eNodeB ID
6094 * The Home eNodeB ID consists of 28 bits. See 3GPP TS 36.413 [10].
6095 * Bit 4 of Octet 9 is the most significant bit and bit 1 of Octet 12 is the least significant bit.
6096 * The coding of the Home eNodeB ID is the responsibility of each administration.
6097 * Coding using full hexadecimal representation shall be used.
6098 */
6099 home_enodeb_id = tvb_get_ntohl(tvb, *offset) & 0x0fffffff;
6100 proto_tree_add_item(tree, hf_gtpv2_home_enodeb_id, tvb, *offset, 4 , ENC_BIG_ENDIAN0x00000000);
6101 *offset += 4;
6102
6103 str = wmem_strdup_printf(pinfo->pool, "%s, Home eNodeB ID 0x%x",
6104 mcc_mnc_str,
6105 home_enodeb_id);
6106
6107 return str;
6108}
6109
6110static char*
6111dissect_gtpv2_gnodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, unsigned* offset)
6112{
6113 char* str = NULL((void*)0);
6114 char* mcc_mnc_str;
6115 uint32_t gnodeb_id;
6116
6117 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6118 *offset += 3;
6119
6120 /* The gNodeB ID Length field, in bits 1 to 6 of octet 9,
6121 * indicates the length of the gNodeB ID in number of bits
6122 */
6123
6124 proto_tree_add_item(tree, hf_gtpv2_gnodeb_id_len, tvb, *offset, 1, ENC_BIG_ENDIAN0x00000000);
6125 *offset += 1;
6126
6127 proto_tree_add_item_ret_uint(tree, hf_gtpv2_gnodeb_id, tvb, *offset, 4, ENC_BIG_ENDIAN0x00000000, &gnodeb_id);
6128 *offset += 4;
6129
6130 str = wmem_strdup_printf(pinfo->pool, "%s, gNodeB ID 0x%x",
6131 mcc_mnc_str,
6132 gnodeb_id);
6133
6134 return str;
6135}
6136
6137static char*
6138dissect_gtpv2_macro_ng_enodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, unsigned* offset)
6139{
6140 char *str = NULL((void*)0);
6141 char *mcc_mnc_str;
6142 uint32_t ng_enodeb_id;
6143
6144 mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, true1);
6145 *offset += 3;
6146
6147 proto_tree_add_item_ret_uint(tree, hf_gtpv2_macro_ng_enodeb_id, tvb, *offset, 3, ENC_BIG_ENDIAN0x00000000, &ng_enodeb_id);
6148 *offset += 3;
6149
6150 str = wmem_strdup_printf(pinfo->pool, "%s, Macro ng-eNodeB ID 0x%x",
6151 mcc_mnc_str,
6152 ng_enodeb_id);
6153
6154 return str;
6155}
6156
6157static void
6158dissect_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)))
6159{
6160 tvbuff_t *new_tvb;
6161 unsigned offset = 0;
6162 uint8_t target_type, oct;
6163
6164 proto_tree_add_item(tree, hf_gtpv2_target_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6165 target_type = tvb_get_uint8(tvb, offset);
6166 offset += 1;
6167 switch (target_type) {
6168 case 0:
6169 /* 8.51.2 RNC ID*/
6170 new_tvb = tvb_new_subset_remaining(tvb, offset);
6171 dissect_e212_mcc_mnc(new_tvb, pinfo, tree, 0, E212_NONE, true1);
6172 offset += 3;
6173 /* LAC */
6174 proto_tree_add_item(tree, hf_gtpv2_lac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6175 offset+=2;
6176
6177 /* RAC (see NOTE 3) */
6178 proto_tree_add_item(tree, hf_gtpv2_rac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6179 offset++;
6180 /* RNC ID
6181 * In this case the Target ID field shall be encoded as the Target
6182 * RNC-ID part of the "Target ID" parameter in 3GPP TS 25.413 [33]. Therefore, the "Choice Target ID" that indicates
6183 * "Target RNC-ID" (numerical value of 0x20) shall not be included (value in octet 5 specifies the target type).
6184 */
6185 proto_tree_add_item(tree, hf_gtpv2_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6186 /* If the optional Extended RNC-ID is not included, then the length variable 'n' = 8 and the overall length of the IE is 11
6187 * octets. Otherwise, 'n' = 10 and the overall length of the IE is 13 octets
6188 */
6189 if(length == 11){
6190 proto_tree_add_item(tree, hf_gtpv2_ext_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6191 }
6192 return;
6193 case 1:
6194 /* Macro eNodeB ID*/
6195 dissect_gtpv2_macro_enodeb_id(tvb, pinfo, tree, &offset);
6196
6197 /* Tracking Area Code (TAC) */
6198 proto_tree_add_item(tree, hf_gtpv2_tai_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6199
6200 return;
6201
6202 case 2:
6203 /* Cell Identifier */
6204 /* Target ID field shall be same as the Octets 3 to 10 of the Cell Identifier IEI
6205 * in 3GPP TS 48.018 [34].
6206 */
6207 new_tvb = tvb_new_subset_remaining(tvb, offset);
6208 de_bssgp_cell_id(new_tvb, tree, pinfo, 0, 0/* not used */, NULL((void*)0), 0);
6209 return;
6210 case 3:
6211 /* Home eNodeB ID */
6212 dissect_gtpv2_home_enodeb_id(tvb, pinfo, tree, &offset);
6213
6214 /* Octet 13 to 14 Tracking Area Code (TAC) */
6215 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2 , ENC_BIG_ENDIAN0x00000000);
6216 return;
6217
6218 case 4:
6219 /* 8.51.5 Extended Macro eNodeB ID */
6220 dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
6221
6222 /* Octet 12 to 13 Tracking Area Code (TAC) */
6223 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6224 return;
6225
6226 case 5:
6227 /* gNodeB ID */
6228 dissect_gtpv2_gnodeb_id(tvb, pinfo, tree, &offset);
6229
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 6:
6235 /* Macro ng-eNodeB ID */
6236 dissect_gtpv2_macro_ng_enodeb_id(tvb, pinfo, tree, &offset);
6237 /* Octet 14 to 16 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 7:
6242 /* Extended ng-eNodeB ID */
6243 dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, tree, &offset, hf_gtpv2_ext_macro_ng_enodeb_id);
6244 /* Octet 12 to 14 5GS Tracking Area Code (TAC) */
6245 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6246 return;
6247
6248 case 8:
6249 /* en-gNB ID */
6250 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, true1);
6251 offset += 3;
6252 /* Octet 9 5TAC ETAC en-gNB ID Length */
6253 oct = tvb_get_uint8(tvb, offset);
6254 proto_tree_add_item(tree, hf_gtpv2_5tac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6255 proto_tree_add_item(tree, hf_gtpv2_etac, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6256 proto_tree_add_item(tree, hf_gtpv2_en_gnb_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6257 offset++;
6258
6259 /* Octet 10 to 13 en-gNB ID */
6260 proto_tree_add_item(tree, hf_gtpv2_en_gnb_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6261 offset += 4;
6262
6263 if ((oct & 0x40) == 0x40) {
6264 /* ETAC*/
6265 /* p to (p+1 */
6266 proto_tree_add_item(tree, hf_gtpv2_tac, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6267 offset += 2;
6268
6269 }
6270 if ((oct & 0x80) == 0x80) {
6271 /* 5 TAC*/
6272 /* q to(q + 2) */
6273 proto_tree_add_item(tree, hf_gtpv2_5gs_tac, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6274 }
6275 return;
6276
6277 default:
6278 break;
6279 }
6280 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length-offset);
6281
6282}
6283
6284/*
6285 * 8.52 Void
6286 */
6287/*
6288 * 8.53 Packet Flow ID
6289 */
6290static void
6291dissect_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)))
6292{
6293 unsigned offset = 0;
6294
6295 /* Octet 5 Spare EBI */
6296 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
6297 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6298 offset += 1;
6299
6300 /* Packet Flow ID */
6301 proto_tree_add_item(tree, hf_gtpv2_packet_flow_id, tvb, offset, length - 1, ENC_NA0x00000000);
6302
6303}
6304/*
6305 * 8.54 RAB Context
6306 */
6307static void
6308dissect_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)))
6309{
6310 int offset = 0;
6311
6312 /* 5 Spare NSAPI */
6313 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
6314 proto_tree_add_item(tree, hf_gtpv2_nsapi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6315 offset++;
6316
6317 /* 6 to 7 DL GTP-U Sequence Number */
6318 proto_tree_add_item(tree, hf_gtpv2_dl_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6319 offset += 2;
6320
6321 /* 8 to 9 UL GTP-U Sequence Number */
6322 proto_tree_add_item(tree, hf_gtpv2_ul_gtp_u_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6323 offset += 2;
6324
6325 /* 10 to 11 DL PDCP Sequence Number */
6326 proto_tree_add_item(tree, hf_gtpv2_dl_pdcp_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6327 offset += 2;
6328
6329 /* 12 to 13 UL PDCP Sequence Number */
6330 proto_tree_add_item(tree, hf_gtpv2_ul_pdcp_sequence_number, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6331
6332}
6333
6334/*
6335 * 8.55 Source RNC PDCP context info
6336 */
6337static void
6338dissect_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)))
6339{
6340 proto_tree_add_item(tree, hf_gtpv2_rrc_container, tvb, 0, length, ENC_NA0x00000000);
6341}
6342
6343/*
6344 * 8.56 Port Number
6345 */
6346static void
6347dissect_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)))
6348{
6349 proto_tree_add_item(tree, hf_gtpv2_port_number, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000);
6350 proto_item_append_text(item, "%u", tvb_get_ntohs(tvb, 0));
6351}
6352/*
6353 * 8.57 APN Restriction
6354 */
6355
6356/* Table 8.57-1: Valid Combinations of APN Restriction */
6357static const value_string gtpv2_apn_restriction_vals[] = {
6358 {0, "No Existing Contexts or Restriction"},
6359 {1, "Public-1"},
6360 {2, "Public-2"},
6361 {3, "Private-1"},
6362 {4, "Private-2"},
6363 {0, NULL((void*)0)}
6364};
6365static 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) }
;
6366
6367static void
6368dissect_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)))
6369{
6370 uint8_t type_value;
6371 unsigned offset = 0;
6372
6373 /* APN restriction value octet 5 */
6374 type_value = tvb_get_uint8(tvb, offset);
6375 proto_tree_add_item(tree, hf_gtpv2_apn_rest, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6376
6377 /* Add APN restriction to ie_tree */
6378 proto_item_append_text(item, "%s (%u)", val_to_str_ext_const(type_value, &gtpv2_apn_restriction_vals_ext, "Unknown"), type_value);
6379 offset += 1;
6380
6381 if (length > offset)
6382 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
6383}
6384
6385/*
6386 * 8.58 Selection Mode
6387 */
6388static const value_string gtpv2_selec_mode_vals[] = {
6389 {0, "MS or network provided APN, subscribed verified"},
6390 {1, "MS provided APN, subscription not verified"},
6391 {2, "Network provided APN, subscription not verified"},
6392 {3, "Network provided APN, subscription not verified (Basically for Future use"},
6393 {0, NULL((void*)0)}
6394};
6395
6396void
6397dissect_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)))
6398{
6399 unsigned offset = 0;
6400 uint8_t ss_mode;
6401
6402 ss_mode = tvb_get_uint8(tvb, offset) & 0x03;
6403 proto_tree_add_item(tree, hf_gtpv2_selec_mode, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6404 proto_item_append_text(item, "%s", val_to_str_const(ss_mode, gtpv2_selec_mode_vals, "Unknown"));
6405}
6406
6407
6408/*
6409 * 8.59 Source Identification
6410 */
6411#if 0
6412static const value_string gtpv2_source_ident_types[] = {
6413 {0, "Cell ID"},
6414 {1, "RNC ID"},
6415 {2, "eNodeB ID(Reserved, used in earlier v of proto.)"},
6416 {0, NULL((void*)0)}
6417};
6418#endif
6419static void
6420dissect_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)))
6421{
6422 unsigned offset = 0;
6423 uint8_t source_type;
6424
6425 /* Octet 5 to 12 Target Cell ID */
6426 de_cell_id(tvb, tree, pinfo, offset, 8, NULL((void*)0), 0);
6427 offset += 8;
6428 /* Octet 13 Source Type */
6429 source_type = tvb_get_uint8(tvb, offset);
6430 proto_tree_add_item(tree, hf_gtpv2_source_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6431 offset += 1;
6432 /* Octet 14 to (n+4) Source ID */
6433 switch (source_type) {
6434 case 0:
6435 /* The Source Type is Cell ID for PS handover from GERAN A/Gb mode. In this case the coding of the Source ID field
6436 * shall be same as the Octets 3 to 10 of the Cell Identifier IEI in 3GPP TS 48.018 [34].
6437 */
6438 de_cell_id(tvb, tree, pinfo, offset, 8, NULL((void*)0), 0);
6439 break;
6440 case 1:
6441 /* The Source Type is RNC ID for PS handover from GERAN Iu mode or for inter-RAT handover from UTRAN. In this
6442 * case the Source ID field shall be encoded as the Source RNC-ID part of the "Source ID" parameter in 3GPP TS
6443 * 25.413 [33].
6444 */
6445 /* RNC-ID M INTEGER (0..4095) */
6446 break;
6447 case 2:
6448 break;
6449 default:
6450 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_source_type_unknown, tvb, offset-1, 1);
6451 break;
6452 }
6453
6454}
6455
6456 /*
6457 * 8.60 Bearer Control Mode
6458 */
6459static const value_string gtpv2_bearer_control_mode_vals[] = {
6460 {0, "Selected Bearer Control Mode-'MS_only'"},
6461 {1, "Selected Bearer Control Mode-'Network_only'"},
6462 {2, "Selected Bearer Control Mode-'MS/NW'"},
6463 {0, NULL((void*)0)}
6464};
6465
6466static const value_string gtpv2_bearer_control_mode_short_vals[] = {
6467 {0, "MS_only"},
6468 {1, "Network_only"},
6469 {2, "MS/NW"},
6470 {0, NULL((void*)0)}
6471};
6472
6473static void
6474dissect_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)))
6475{
6476 uint8_t bcm;
6477
6478 proto_tree_add_item(tree, hf_gtpv2_bearer_control_mode, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6479 /* Add Bearer Control Mode to tree */
6480 bcm = tvb_get_uint8(tvb, 0);
6481 proto_item_append_text(item, "%s", val_to_str_const(bcm, gtpv2_bearer_control_mode_short_vals, "Unknown"));
6482
6483}
6484/*
6485 * 8.61 Change Reporting Action
6486 */
6487static const value_string gtpv2_cng_rep_act_vals[] = {
6488 {0, "Stop Reporting"},
6489 {1, "Start Reporting CGI/SAI"},
6490 {2, "Start Reporting RAI"},
6491 {3, "Start Reporting TAI"},
6492 {4, "Start Reporting ECGI"},
6493 {5, "Start Reporting CGI/SAI and RAI"},
6494 {6, "Start Reporting TAI and ECGI"},
6495 {0, NULL((void*)0)}
6496};
6497
6498static void
6499dissect_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)))
6500{
6501 uint8_t action;
6502
6503 /* Add Action to tree */
6504 action = tvb_get_uint8(tvb, 0);
6505 proto_tree_add_item(tree, hf_gtpv2_cng_rep_act, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6506
6507 proto_item_append_text(item, "%s", val_to_str_const(action, gtpv2_cng_rep_act_vals, "Unknown"));
6508}
6509/*
6510 * 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID)
6511 */
6512#if 0
6513static const value_string gtpv2_fq_csid_type_vals[] = {
6514 {0, "Global unicast IPv4 address"},
6515 {1, "Global unicast IPv6 address"},
6516 {2, "4 octets long field"},
6517 {0, NULL((void*)0)}
6518};
6519#endif
6520
6521void
6522dissect_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)))
6523{
6524 unsigned offset = 0;
6525 uint8_t octet, node_id_type, csids;
6526
6527 /* Octet 5 Node-ID Type Number of CSIDs= m */
6528
6529 octet = tvb_get_uint8(tvb, offset);
6530 node_id_type = octet >> 4;
6531 csids = octet & 0x0f;
6532 proto_tree_add_item(tree, hf_gtpv2_fq_csid_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6533 proto_tree_add_item(tree, hf_gtpv2_fq_csid_nr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6534 offset += 1;
6535
6536 switch (node_id_type) {
6537 case 0:
6538 /* Indicates that Node-ID is a global unicast IPv4 address and p = 9 */
6539 proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6540 offset += 4;
6541 break;
6542 case 1:
6543 /* Indicates that Node-ID is a global unicast IPv6 address and p = 21 */
6544 proto_tree_add_item(tree, hf_gtpv2_fq_csid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
6545 offset += 16;
6546 break;
6547 case 2:
6548 /* Node-ID is a 4 octets long field with a 32 bit value stored in network order, and p= 9. The coding
6549 * of the field is specified below:
6550 * - Most significant 20 bits are the binary encoded value of (MCC * 1000 + MNC).
6551 * - Least significant 12 bits is a 12 bit integer assigned by an operator to an MME, SGW or PGW. Other values of
6552 * Node-ID Type are reserved.
6553 */
6554 proto_tree_add_item(tree, hf_gtpv2_fq_csid_node_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6555 proto_tree_add_item(tree, hf_gtpv2_fq_csid_mcc_mnc, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6556 offset += 4;
6557 break;
6558 default:
6559 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_fq_csid_type_bad, tvb, offset-1, 1,
6560 "Wrong Node-ID Type %u, should be 0-2(Or this is a newer spec)", node_id_type);
6561 return;
6562 }
6563
6564 /* First PDN Connection Set Identifier (CSID)
6565 * Second PDN Connection Set Identifier (CSID)
6566 * :
6567 * m-th PDN Connection Set Identifier (CSID)
6568 */
6569 while ( csids-- ) {
6570 proto_tree_add_item(tree, hf_gtpv2_fq_csid_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6571 offset += 2;
6572 }
6573
6574}
6575
6576/*
6577 * 8.63 Channel needed
6578 */
6579static void
6580dissect_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)))
6581{
6582 /* The Channel needed shall be coded as depicted in Figure 8.63-1. Channel needed is coded as the IEI part and the value
6583 * part of the Channel Needed IE defined in 3GPP TS 44.018[28]
6584 */
6585 de_rr_chnl_needed(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
6586}
6587
6588/*
6589 * 8.64 eMLPP Priority
6590 * The eMLPP-Priority shall be coded as depicted in Figure 8.64-1. The eMLPP Priority is coded as the value part of the
6591 * eMLPP-Priority IE defined in 3GPP TS 48.008 [29] (not including 3GPP TS 48.008 IEI and 3GPP TS 48.008 [29]
6592 * length indicator).
6593 */
6594static void
6595dissect_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)))
6596{
6597 be_emlpp_prio(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
6598
6599}
6600
6601/*
6602 * 8.65 Node Type
6603 */
6604static const value_string gtpv2_node_type_vals[] = {
6605 {0, "MME"},
6606 {1, "SGSN"},
6607 {0, NULL((void*)0)}
6608};
6609
6610static void
6611dissect_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)))
6612{
6613 uint8_t node_type;
6614
6615 proto_tree_add_item(tree, hf_gtpv2_node_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6616 /* Append Node Type to tree */
6617 node_type = tvb_get_uint8(tvb, 0);
6618 proto_item_append_text(item, "%s", val_to_str_const(node_type, gtpv2_node_type_vals, "Unknown"));
6619
6620}
6621
6622 /*
6623 * 8.66 Fully Qualified Domain Name (FQDN)
6624 */
6625static int
6626decode_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, unsigned offset, uint16_t length)
6627{
6628 int name_len;
6629 const uint8_t *fqdn = NULL((void*)0);
6630
6631 /* The FQDN field encoding shall be identical to the encoding of
6632 * a FQDN within a DNS message of section 3.1 of IETF
6633 * RFC 1035 [31] but excluding the trailing zero byte.
6634 *
6635 * XXX: is compression possible?
6636 */
6637 if (offset < length) {
6638 name_len = tvb_get_uint8(tvb, offset);
6639
6640 /* "NOTE 1: The FQDN field in the IE is not encoded as a dotted string"
6641 * but if the first byte is large (in the letter range or higher),
6642 * assume that it is so encoded incorrectly.
6643 */
6644 if (name_len < 0x40) {
6645 proto_tree_add_item_ret_string(tree, hf_gtpv2_fqdn, tvb, offset, length, ENC_APN_STR0x00000054, pinfo->pool, &fqdn);
6646 } else {
6647 proto_tree_add_item_ret_string(tree, hf_gtpv2_fqdn, tvb, offset, length, ENC_ASCII0x00000000, pinfo->pool, &fqdn);
6648 }
6649 proto_item_append_text(item, "%s", fqdn);
6650 }
6651
6652 return length; //TODO return length of fqdn
6653}
6654
6655static void
6656dissect_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)))
6657{
6658 unsigned offset = 0;
6659 decode_gtpv2_fqdn(tvb, pinfo, tree, item, offset, length);
6660}
6661
6662/*
6663 * 8.67 Private Extension
6664 */
6665static void
6666dissect_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)))
6667{
6668 int offset = 0;
6669 tvbuff_t *next_tvb;
6670 uint16_t ext_id;
6671 gtpv2_priv_ext_info_t gtpv2_inf;
6672
6673 gtpv2_inf.instance = instance;
6674 gtpv2_inf.item = item;
6675
6676 /* oct 5 -7 Enterprise ID */
6677 ext_id = tvb_get_ntohs(tvb, offset);
6678 proto_tree_add_item(tree, hf_gtpv2_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6679 offset += 2;
6680
6681 proto_item_append_text(item, "%s (%u)", enterprises_lookup(ext_id, "Unknown"), ext_id);
6682
6683 next_tvb = tvb_new_subset_length(tvb, offset, length-2);
6684 if (dissector_try_uint_with_data(gtpv2_priv_ext_dissector_table, ext_id, next_tvb, pinfo, tree, false0, &gtpv2_inf)){
6685 return;
6686 }
6687
6688 proto_tree_add_item(tree, hf_gtpv2_proprietary_value, tvb, offset, length-2, ENC_NA0x00000000);
6689}
6690
6691/*
6692 * 8.68 Transaction Identifier (TI)
6693 */
6694static void
6695dissect_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)))
6696{
6697 /* 5 to (n+4) Transaction Identifier */
6698 proto_tree_add_item(tree, hf_gtpv2_ti, tvb, 0, length, ENC_NA0x00000000);
6699
6700}
6701
6702/*
6703 * 8.69 MBMS Session Duration
6704 */
6705void
6706dissect_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)))
6707{
6708 int offset = 0;
6709 int bit_offset = 0;
6710 uint8_t days;
6711 uint32_t hours;
6712 uint32_t minutes;
6713 uint32_t seconds;
6714 uint32_t durations_seconds;
6715 proto_item *day_item, *sec_item;
6716
6717 /* From 3GPP TS 29.061 17.7.7 MBMS-Session-Duration AVP */
6718 /* Bits: ssss ssss ssss ssss sddd dddd where s bits = seconds, d bits = days */
6719 durations_seconds = tvb_get_bits32(tvb, bit_offset, 17, ENC_BIG_ENDIAN0x00000000);
6720 bit_offset += 17;
6721
6722 days = tvb_get_bits8(tvb, bit_offset, 7);
6723
6724 /* 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. */
6725 if ((durations_seconds == 0) && (days == 0)) {
6726 day_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6727 sec_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6728 proto_item_append_text(item, "Indefinite (always-on)");
6729 } else {
6730 hours = durations_seconds / 3600;
6731 minutes = (durations_seconds % 3600) / 60;
6732 seconds = (durations_seconds % 3600) % 60;
6733
6734 day_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6735 sec_item = proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6736 proto_item_append_text(item, "%d days %02d:%02d:%02d (DD days HH:MM:SS)", days, hours, minutes, seconds);
6737 }
6738
6739 /* Maximum allowed value for days: 18.
6740 * Maximum allowed value for seconds: 86,400 */
6741 if (days > 18) {
6742 expert_add_info(pinfo, day_item, &ei_gtpv2_mbms_session_duration_days);
6743 }
6744 if (durations_seconds > 86400) {
6745 expert_add_info(pinfo, sec_item, &ei_gtpv2_mbms_session_duration_secs);
6746 }
6747
6748 offset += 3;
6749 if (length > 3)
6750 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-3, ENC_NA0x00000000);
6751}
6752
6753/*
6754 * 8.70 MBMS Service Area
6755 */
6756void
6757dissect_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)))
6758{
6759 unsigned offset = 0;
6760 proto_item *sai_item;
6761 uint8_t binary_nr;
6762 uint16_t real_nr;
6763 uint16_t sai;
6764
6765 binary_nr = tvb_get_uint8(tvb, offset);
6766 real_nr = (uint16_t)binary_nr + 1;
6767
6768 /* 3GPP TS 29.061 17.7.6 MBMS-Service-Area AVP */
6769 proto_tree_add_uint(tree, hf_gtpv2_mbms_service_area_nr, tvb, offset, 1, real_nr);
6770 offset += 1;
6771
6772 /* A consecutive list of MBMS Service Area Identities follow, each with a length of two octets. */
6773 while (offset < length) {
6774 /* 3GPP TS 23.003 15.3 Structure of MBMS SAI */
6775 sai = tvb_get_ntohs(tvb, offset);
6776 sai_item = proto_tree_add_item(tree, hf_gtpv2_mbms_service_area_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6777 /* The value 0 denotes the whole of PLMN as the MBMS Service Area */
6778 if (sai == 0) {
6779 proto_item_append_text(sai_item, " Entire PLMN");
6780 }
6781 proto_item_append_text(item, " %u", sai);
6782 offset += 2;
6783 }
6784}
6785
6786/*
6787 * 8.71 MBMS Session Identifier
6788 */
6789static void
6790dissect_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)))
6791{
6792 unsigned offset = 0;
6793 /* One octet OctetString. */
6794 proto_tree_add_item(tree, hf_gtpv2_mbms_session_id, tvb, offset, 1, ENC_NA0x00000000);
6795
6796 offset += 1;
6797 if (length > 1)
6798 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
6799}
6800
6801/*
6802 * 8.72 MBMS Flow Identifier
6803 */
6804static void
6805dissect_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)))
6806{
6807 unsigned offset = 0;
6808 /* Two octets OctetString. */
6809 proto_tree_add_item(tree, hf_gtpv2_mbms_flow_id, tvb, offset, 2, ENC_NA0x00000000);
6810 proto_item_append_text(item, " %s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 2));
6811
6812 offset += 2;
6813 if (length > 2)
6814 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-2, ENC_NA0x00000000);
6815}
6816
6817/*
6818 * 8.73 MBMS IP Multicast Distribution
6819 */
6820static const value_string gtpv2_mbms_hc_indicator_vals[] = {
6821 {0, "Uncompressed header"},
6822 {1, "Compressed header"},
6823 {0, NULL((void*)0)}
6824};
6825
6826static void
6827dissect_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)))
6828{
6829 unsigned offset = 0;
6830
6831 proto_tree_add_item(tree, hf_gtpv2_cteid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6832 offset += 4;
6833
6834 proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6835 proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6836 /* IP Multicast Distribution Address */
6837 if ((tvb_get_uint8(tvb, offset) & 0x3f) == 4) {
6838 offset += 1;
6839 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6840 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));
6841 offset += 4;
6842 } else if ((tvb_get_uint8(tvb, offset) & 0x3f) == 16) {
6843 offset += 1;
6844 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_dist_addrv6, tvb, offset, 16, ENC_NA0x00000000);
6845 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));
6846 offset += 16;
6847 }
6848
6849 proto_tree_add_item(tree, hf_gtpv2_ip_addr_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6850 proto_tree_add_item(tree, hf_gtpv2_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6851 /* IP Multicast Source Address */
6852 if ((tvb_get_uint8(tvb, offset) & 0x3f) == 4) {
6853 offset += 1;
6854 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6855 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));
6856 offset += 4;
6857 } else if ((tvb_get_uint8(tvb, offset) & 0x3f) == 16) {
6858 offset += 1;
6859 proto_tree_add_item(tree, hf_gtpv2_mbms_ip_mc_src_addrv6, tvb, offset, 16, ENC_NA0x00000000);
6860 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));
6861 offset += 16;
6862 }
6863
6864 proto_tree_add_item(tree, hf_gtpv2_mbms_hc_indicator, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6865
6866 offset += 1;
6867 if (length > offset)
6868 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
6869
6870}
6871
6872/*
6873 * 8.74 MBMS Distribution Acknowledge
6874 */
6875static const value_string gtpv2_mbms_dist_indication_vals[] = {
6876 {0, "No RNCs have accepted IP multicast distribution"},
6877 {1, "All RNCs have accepted IP multicast distribution"},
6878 {2, "Some RNCs have accepted IP multicast distribution"},
6879 {3, "Spare. For future use."},
6880 {0, NULL((void*)0)}
6881};
6882
6883static void
6884dissect_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)))
6885{
6886 unsigned offset = 0;
6887
6888 proto_tree_add_item(tree, hf_gtpv2_mbms_dist_indication, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6889
6890 offset += 1;
6891 if (length > 1)
6892 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
6893}
6894
6895/*
6896 * 8.75 User CSG Information (UCI)
6897 */
6898static const value_string gtpv2_uci_csg_membership_status[] = {
6899 {0, "Non CSG membership"},
6900 {1, "CSG membership"},
6901 {0, NULL((void*)0) }
6902};
6903
6904static const value_string gtpv2_uci_access_mode[] = {
6905 {0, "Closed Mode"},
6906 {1, "Hybrid Mode"},
6907 {2, "Reserved" },
6908 {3, "Reserved"},
6909 {0, NULL((void*)0) }
6910};
6911
6912static const value_string gtpv2_uci_leave_csg[] = {
6913 {0, "Access CSG cell/Hybrid cell"},
6914 {1, "Leaves CSG cell/Hybrid cell"},
6915 {0, NULL((void*)0) }
6916};
6917
6918static void
6919dissect_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)))
6920{
6921 unsigned offset = 0;
6922
6923 /* Value of MCC & MNC */
6924 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
6925 offset += 3;
6926 /* Value of CSG ID */
6927 proto_tree_add_item(tree, hf_gtpv2_uci_csg_id_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6928 proto_tree_add_item(tree, hf_gtpv2_uci_csg_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6929 offset += 4;
6930
6931 /* Value of access mode */
6932 proto_tree_add_item(tree, hf_gtpv2_uci_access_mode, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6933
6934 /* Value of LCSG */
6935 proto_tree_add_item(tree, hf_gtpv2_uci_lcsg, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6936
6937 /* Value of CSG membership */
6938 proto_tree_add_item(tree, hf_gtpv2_uci_csg_membership, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6939
6940}
6941
6942/* 8.76 CSG Information Reporting Action */
6943static void
6944dissect_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)))
6945{
6946 unsigned offset = 0;
6947
6948 static int * const flags[] = {
6949 &hf_gtpv2_csg_info_rep_action_b2,
6950 &hf_gtpv2_csg_info_rep_action_b1,
6951 &hf_gtpv2_csg_info_rep_action_b0,
6952 NULL((void*)0)
6953 };
6954 if (length == 0) {
6955 expert_add_info(pinfo, item, &ei_gtpv2_ie_len_invalid);
6956 return;
6957 }
6958 /* Spare UCIUHC UCISHC UCICSG */
6959
6960 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN0x00000000);
6961
6962}
6963
6964/* 8.77 RFSP Index */
6965static void
6966dissect_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)))
6967{
6968 unsigned offset = 0;
6969
6970 if(instance == 0){
6971 proto_tree_add_item(tree, hf_gtpv2_subscriber_rfsp, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6972 }else if(instance == 1){
6973 proto_tree_add_item(tree, hf_gtpv2_rfsp_inuse, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6974 }
6975}
6976
6977/* 8.78 CSG ID */
6978static void
6979dissect_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)))
6980{
6981 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 5, ENC_BIG_ENDIAN0x00000000);
6982 proto_tree_add_item(tree, hf_gtpv2_csg_id, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
6983 if (length > 1) {
6984 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA0x00000000);
6985 }
6986}
6987
6988/* 8.79 CSG Membership Indication (CMI) */
6989static void
6990dissect_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)))
6991{
6992 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 7, ENC_BIG_ENDIAN0x00000000);
6993 proto_tree_add_item(tree, hf_gtpv2_cmi, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
6994 if (length > 1) {
6995 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA0x00000000);
6996 }
6997}
6998
6999/* 8.80 Service indicator */
7000static const value_string gtpv2_service_indicator_vals[] = {
7001 { 1, "CS call indicator" },
7002 { 2, "SMS indicator" },
7003 { 0, NULL((void*)0) }
7004};
7005
7006static void
7007dissect_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)))
7008{
7009 proto_tree_add_item(tree, hf_gtpv2_service_indicator, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7010}
7011
7012/* 8.81 Detach Type */
7013static const value_string gtpv2_detach_type_vals[] = {
7014 { 1, "PS Detach" },
7015 { 2, "Combined PS/CS Detach" },
7016 { 0, NULL((void*)0) }
7017};
7018
7019static void
7020dissect_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)))
7021{
7022 proto_tree_add_item(tree, hf_gtpv2_detach_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7023}
7024
7025/* 8.82 Local Distinguished Name (LDN) */
7026static void
7027dissect_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)))
7028{
7029 proto_tree_add_item(tree, hf_gtpv2_ldn, tvb, 0, length, ENC_ASCII0x00000000);
7030}
7031
7032/* 8.83 Node Features */
7033static void
7034dissect_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)))
7035{
7036 unsigned offset = 0;
7037 static int * const features[] = {
7038 &hf_gtpv2_node_features_psset,
7039 &hf_gtpv2_node_features_mtedt,
7040 &hf_gtpv2_node_features_eth,
7041 &hf_gtpv2_node_features_s1un,
7042 &hf_gtpv2_node_features_ciot,
7043 &hf_gtpv2_node_features_ntsr,
7044 &hf_gtpv2_node_features_mabr,
7045 &hf_gtpv2_node_features_prn,
7046 NULL((void*)0)
7047 };
7048
7049 proto_tree_add_bitmask_list(tree, tvb, offset, 1, features, ENC_BIG_ENDIAN0x00000000);
7050 offset++;
7051 if (length > offset)
7052 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7053}
7054
7055/* 8.84
7056 * MBMS Time to Data Transfer
7057 */
7058void
7059dissect_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)))
7060{
7061 int offset = 0;
7062 uint8_t binary_secs;
7063 uint16_t real_secs;
7064
7065 binary_secs = tvb_get_uint8(tvb, offset);
7066 real_secs = (uint16_t)binary_secs + 1;
7067
7068 proto_tree_add_string_format_value(tree, hf_gtpv2_time_to_data_xfer, tvb, offset, 1, "", "%d second(s)", real_secs);
7069 proto_item_append_text(item, " %u second(s)", real_secs);
7070 offset += 1;
7071 if (length > 1)
7072 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7073}
7074
7075static const value_string gtpv2_throttling_delay_unit_vals[] = {
7076 { 0, "value is incremented in multiples of 2 seconds" },
7077 { 1, "value is incremented in multiples of 1 minute" },
7078 { 2, "value is incremented in multiples of 10 minutes" },
7079 { 3, "value is incremented in multiples of 1 hour" },
7080 { 4, "value is incremented in multiples of 10 hour" },
7081 { 7, "value indicates that the timer is deactivated" },
7082 { 0, NULL((void*)0) }
7083};
7084
7085/* 8.85 Throttling */
7086static void
7087dissect_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)))
7088{
7089 unsigned offset = 0;
7090 uint8_t oct;
7091
7092 proto_tree_add_item(tree, hf_gtpv2_throttling_delay_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7093 proto_tree_add_item(tree, hf_gtpv2_throttling_delay_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7094 offset++;
7095
7096 oct = tvb_get_uint8(tvb, offset);
7097 proto_tree_add_item(tree, hf_gtpv2_throttling_factor, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7098 if (oct > 0x64)
7099 proto_item_append_text(item, "Throttling factor: value beyond (0,100) is considered as 0");
7100 offset++;
7101
7102 if (length > 2)
7103 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length - 2, ENC_NA0x00000000);
7104
7105
7106}
7107
7108/* 8.86 Allocation/Retention Priority (ARP) */
7109void
7110dissect_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)))
7111{
7112 unsigned offset = 0;
7113
7114 proto_tree_add_item(tree, hf_gtpv2_arp_pci, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7115 proto_tree_add_item(tree, hf_gtpv2_arp_pl, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7116 proto_tree_add_item(tree, hf_gtpv2_arp_pvi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7117
7118 offset += 1;
7119 if (length > 1)
7120 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7121}
7122
7123/* 8.87 EPC Timer */
7124static const value_string gtpv2_timer_unit_vals[] = {
7125 {0, "value is incremented in multiples of 2 seconds"},
7126 {1, "value is incremented in multiples of 1 minute"},
7127 {2, "value is incremented in multiples of 10 minutes"},
7128 {3, "value is incremented in multiples of 1 hour"},
7129 {4, "value is incremented in multiples of 10 hour"},
7130 {5, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
7131 {6, "Other values shall be interpreted as multiples of 1 minute(version 10.7.0)"},
7132 {7, "value indicates that the timer is infinite"},
7133 {0, NULL((void*)0)}
7134};
7135
7136void
7137dissect_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)))
7138{
7139 switch (message_type) {
7140 case GTPV2_DL_DATA_NOTIF_ACK177:
7141 proto_item_append_text(item, "DL Buffering Duration");
7142 break;
7143 }
7144 /* XXX Todo: use code from packet-gsm_a_gm.c ? 10.5.7.4a GPRS TIMER 3*/
7145 proto_tree_add_item(tree, hf_gtpv2_timer_unit, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7146 proto_tree_add_item(tree, hf_gtpv2_timer_value, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7147
7148}
7149
7150/* 8.88 Signalling Priority Indication */
7151static void
7152dissect_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)))
7153{
7154 proto_tree_add_item(tree, hf_gtpv2_lapi, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
7155}
7156
7157/* 8.89 Temporary Mobile Group Identity (TMGI) */
7158static void
7159dissect_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)))
7160{
7161 int offset = 0;
7162 uint64_t tmgi;
7163
7164 tmgi = tvb_get_ntoh48(tvb, offset);
7165
7166 proto_item_append_text(item, "%012" PRIx64"l" "x", tmgi);
7167
7168 proto_tree_add_item(tree, hf_gtpv2_mbms_service_id, tvb, offset, 3, ENC_NA0x00000000);
7169 offset += 3;
7170
7171 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true1);
7172 offset += 3;
7173
7174 if (length > offset)
7175 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7176}
7177
7178/*
7179 * 8.90 Additional MM context for SRVCC
7180 * 3GPP TS 29.274 Figure 8.90-1
7181 */
7182static void
7183dissect_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)))
7184{
7185 unsigned offset = 0;
7186 proto_item *ms_cm_item;
7187 proto_tree *ms_cm_tree;
7188 uint8_t elm_len;
7189
7190 /* Length of Mobile Station Classmark 2 */
7191 elm_len = tvb_get_uint8(tvb, offset);
7192 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7193 offset += 1;
7194
7195 /* For each of the Mobile Station Classmark 2, Mobile Station Classmark 3 and Supported Codec List parameters,
7196 * if they are not available, then the associated length field shall be set to zero, and the particular
7197 * parameter field shall not be present.
7198 */
7199 if(elm_len > 0){
7200 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark2, tvb, offset, elm_len, ENC_NA0x00000000);
7201 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
7202 /* Mobile Station Classmark 2 */
7203 de_ms_cm_2(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7204 offset += elm_len;
7205 }
7206
7207 /* Length of Mobile Station Classmark 3 */
7208 elm_len = tvb_get_uint8(tvb, offset);
7209 proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7210 offset += 1;
7211 if (elm_len > 0) {
7212 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_mobile_station_classmark3, tvb, offset, elm_len, ENC_NA0x00000000);
7213 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
7214 /* Mobile Station Classmark 3 */
7215 de_ms_cm_3(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7216 offset += elm_len;
7217 }
7218
7219 /* Length of Supported Codec List */
7220 elm_len = tvb_get_uint8(tvb, offset);
7221 proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7222 offset += 1;
7223 if (elm_len > 0) {
7224 ms_cm_item = proto_tree_add_item(tree, hf_gtpv2_supported_codec_list, tvb, offset, elm_len, ENC_NA0x00000000);
7225 ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_supp_codec_list);
7226 /* Supported Codec List */
7227 de_sup_codec_list(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL((void*)0), 0);
7228 offset += elm_len;
7229 }
7230
7231 if (length > offset)
7232 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7233}
7234
7235/* 8.91 Additional flags for SRVCC */
7236static void
7237dissect_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)))
7238{
7239 unsigned offset = 0;
7240
7241 proto_tree_add_item(tree, hf_gtpv2_add_flags_for_srvcc_ics, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7242 proto_tree_add_item(tree, hf_gtpv2_vsrvcc_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7243 offset += 1;
7244
7245 if (length > 1)
7246 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7247}
7248
7249/* 8.92 Max MBR/APN-AMBR (MMBR) */
7250static void
7251dissect_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)))
7252{
7253 int offset = 0;
7254 uint32_t max_ul;
7255 uint32_t max_dl;
7256
7257 max_ul = tvb_get_ntohl(tvb, offset);
7258 proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_ul, tvb, offset, 4, max_ul, "%u %s",
7259 (max_ul) > 1000 ? max_ul/1000 : max_ul,
7260 (max_ul) > 1000 ? "Mbps" : "kbps");
7261
7262 offset += 4;
7263
7264 max_dl = tvb_get_ntohl(tvb, offset);
7265 proto_tree_add_uint_format_value(tree, hf_gtpv2_mmbr_dl, tvb, offset, 4, max_dl, "%u %s",
7266 (max_dl) > 1000 ? max_dl/1000 : max_dl,
7267 (max_dl) > 1000 ? "Mbps" : "kbps");
7268}
7269
7270/* 8.93 MDT Configuration */
7271static void
7272dissect_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)))
7273{
7274 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7275}
7276
7277/* 8.94 Additional Protocol Configuration Options (APCO) */
7278static void
7279dissect_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)))
7280{
7281 switch (message_type) {
7282 case GTPV2_CREATE_SESSION_REQUEST32:
7283 case GTPV2_DELETE_SESSION_REQUEST36:
7284 case GTPV2_BEARER_RESOURCE_COMMAND68:
7285 case GTPV2_CREATE_BEARER_RESPONSE96:
7286 case GTPV2_UPDATE_BEARER_RESPONSE98:
7287 case GTPV2_DELETE_BEARER_RESPONSE100:
7288 /* PCO options as MS to network direction */
7289 pinfo->link_dir = P2P_DIR_UL0;
7290 break;
7291 case GTPV2_CREATE_SESSION_RESPONSE33:
7292 case GTPV2_MODIFY_BEARER_RESPONSE35:
7293 case GTPV2_DELETE_SESSION_RESPONSE37:
7294 case GTPV2_CREATE_BEARER_REQUEST95:
7295 case GTPV2_UPDATE_BEARER_REQUEST97:
7296 case GTPV2_DELETE_BEARER_REQUEST99:
7297 /* PCO options as Network to MS direction: */
7298 pinfo->link_dir = P2P_DIR_DL1;
7299 break;
7300 default:
7301 break;
7302 }
7303 de_sm_pco(tvb, tree, pinfo, 0, length, NULL((void*)0), 0);
7304}
7305
7306/* 8.95 Absolute Time of MBMS Data Transfer */
7307static void
7308dissect_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)))
7309{
7310 int offset = 0;
7311 char *time_str;
7312
7313 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);
7314 proto_item_append_text(item, "%s", time_str);
7315
7316 offset += 8;
7317 if (length > offset)
7318 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7319}
7320
7321/* 8.96 H(e)NB Information Reporting */
7322static const true_false_string gtpv2_henb_info_report_fti_vals = {
7323 "Start reporting H(e)NB local IP address and UDP port number information change",
7324 "Stop reporting H(e)NB local IP address and UDP port number information change",
7325};
7326
7327static void
7328dissect_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)))
7329{
7330 unsigned offset = 0;
7331
7332 proto_tree_add_item(tree, hf_gtpv2_henb_info_report_fti, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7333 offset += 1;
7334
7335 if (length > 1)
7336 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7337}
7338
7339/* 8.97 IPv4 Configuration Parameters (IP4CP) */
7340static void
7341dissect_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)))
7342{
7343 unsigned offset = 0;
7344
7345 proto_tree_add_item(tree, hf_gtpv2_ip4cp_subnet_prefix_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7346 offset += 1;
7347 proto_tree_add_item(tree, hf_gtpv2_ip4cp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7348 offset += 4;
7349
7350 if (length > offset)
7351 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-offset, ENC_NA0x00000000);
7352}
7353
7354/* 8.98 Change to Report Flags */
7355static void
7356dissect_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)))
7357{
7358 unsigned offset = 0;
7359
7360 proto_tree_add_item(tree, hf_gtpv2_change_report_flags_sncr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7361 proto_tree_add_item(tree, hf_gtpv2_change_report_flags_tzcr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7362 offset += 1;
7363
7364 if (length > 1)
7365 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7366}
7367
7368/* 8.99 Action Indication */
7369static const value_string gtpv2_action_indication_vals[] = {
7370 { 0, "No Action"},
7371 { 1, "Deactivation Indication"},
7372 { 2, "Paging Indication"},
7373 { 3, "Spare"},
7374 { 4, "Spare"},
7375 { 5, "Spare"},
7376 { 6, "Spare"},
7377 { 7, "Spare"},
7378 { 0, NULL((void*)0)}
7379};
7380static 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) }
;
7381
7382static void
7383dissect_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)))
7384{
7385 unsigned offset = 0;
7386
7387 proto_tree_add_item(tree, hf_gtpv2_action_indication_val, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7388 offset += 1;
7389
7390 if (length > 1)
7391 proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, offset, length-1, ENC_NA0x00000000);
7392}
7393
7394/*
7395 * 8.100 TWAN Identifier
7396 */
7397static const value_string gtpv2_twan_relay_id_type_vals[] = {
7398 { 0, "IPv4 or IPv6 Address" },
7399 { 1, "FQDN" },
7400 { 0, NULL((void*)0) }
7401};
7402
7403void
7404dissect_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)))
7405{
7406 unsigned offset = 0;
7407 uint8_t flags=0;
7408 uint32_t ssid_len, civa_len, op_name_len, relay_id_type, relay_id_len, circuit_id_id_len;
7409 static int* const twan_id_flags[] = {
7410 &hf_gtpv2_twan_laii,
7411 &hf_gtpv2_twan_opnai,
7412 &hf_gtpv2_twan_plmni,
7413 &hf_gtpv2_twan_civai,
7414 &hf_gtpv2_twan_bssidi,
7415 NULL((void*)0)
7416 };
7417
7418 /* Octet 5 Spare LAII OPNAI PLMNI CIVAI BSSIDI */
7419 flags = tvb_get_uint8(tvb, offset);
7420 proto_tree_add_bitmask(tree, tvb, offset, hf_gtpv2_twan_flags, ett_gtpv2_twan_flags, twan_id_flags, ENC_BIG_ENDIAN0x00000000);
7421 offset++;
7422 /* Octet 6 SSID Length */
7423 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_ssid_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ssid_len);
7424 offset += 1;
7425 /* 7 to k SSID */
7426 proto_tree_add_item(tree, hf_gtpv2_twan_ssid, tvb, offset, ssid_len, ENC_NA0x00000000);
7427 offset += ssid_len;
7428 /* (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.*/
7429 if (flags & 0x01) {
7430 proto_tree_add_item(tree, hf_gtpv2_twan_bssid, tvb, offset, 6, ENC_NA0x00000000);
7431 offset += 6;
7432 }
7433 /* q Civic Address Length The CIVAI flag in octet 5 indicates whether the Civic Address Length
7434 * and Civic Address Information in octets 'q' and 'q+1' to 'q+r' shall be present.
7435 */
7436 if (flags & 0x02) {
7437 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_civa_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &civa_len);
7438 offset += 1;
7439 /* (q+1) to (q+r) Civic Address Information
7440 * ...it shall be encoded as defined in subclause 3.1 of IETF RFC 4776 [59] excluding the first 3 octets.
7441 * RFC 4776:
7442 * 3.1. Overall Format for DHCPv4
7443
7444 * 0 1 2 3
7445 * 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
7446 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7447 * | GEOCONF_CIVIC | N | what | country |
7448 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7449 * | code | civic address elements ...
7450 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7451 */
7452 proto_tree_add_item(tree, hf_gtpv2_twan_civa, tvb, offset, civa_len, ENC_NA0x00000000);
7453 offset += civa_len;
7454 }
7455 /* s to (s+3) TWAN PLMN-ID The PLMNI flag in octet 5 indicates whether the TWAN PLMN-ID
7456 * in octets 's' to 's+3' shall be present
7457 */
7458 if (flags & 0x04) {
7459 proto_tree_add_item(tree, hf_gtpv2_twan_plmnid, tvb, offset, 3, ENC_NA0x00000000);
7460 offset += 3;
7461 /* (q+1) to (q+r) Civic Address Information
7462 * ...it shall be encoded as defined in subclause 3.1 of IETF RFC 4776 [59] excluding the first 3 octets.
7463 */
7464 }
7465 /* t TWAN Operator Name Length, The OPNAI flag in octet 5 indicates whether the TWAN Operator Name Length and
7466 * TWAN Operator Name in octets 't' and 't+1' to 't+u' shall be present.
7467 */
7468 if (flags & 0x08) {
7469 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_op_name_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &op_name_len);
7470 offset += 1;
7471 /* (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 */
7472 proto_tree_add_item(tree, hf_gtpv2_twan_op_name, tvb, offset, op_name_len, ENC_NA0x00000000);
7473 offset += op_name_len;
7474 }
7475 /* The LAII flag in octet 5 indicates whether the Logical Access ID information is present in the TWAN Identifier */
7476 if (flags & 0x10) {
7477 /* v Relay Identity Type */
7478 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_relay_id_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &relay_id_type);
7479 offset += 1;
7480 /* (v+1) Relay Identity Length*/
7481 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_relay_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &relay_id_len);
7482 offset += 1;
7483 /* (v+2) to (v+w) Relay Identity */
7484 switch (relay_id_type) {
7485 case 0:
7486 /* IPv4 or IPv6 Address */
7487 if (relay_id_len == 4) {
7488 /* IPv4 */
7489 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7490 offset += 4;
7491 } else {
7492 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7493 offset += 16;
7494 }
7495 break;
7496 case 1:
7497 /* fall trough */
7498 proto_tree_add_item(tree, hf_gtpv2_twan_relay_id, tvb, offset, relay_id_len, ENC_ASCII0x00000000);
7499 offset += relay_id_len;
7500 default:
7501 break;
7502 }
7503 /* X Circuit-ID Length */
7504 proto_tree_add_item_ret_uint(tree, hf_gtpv2_twan_circuit_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &circuit_id_id_len);
7505 offset += 1;
7506 /* (x+1) to (x+y) Circuit-ID */
7507 proto_tree_add_item(tree, hf_gtpv2_twan_circuit_id, tvb, offset, circuit_id_id_len, ENC_NA0x00000000);
7508 offset += circuit_id_id_len;
7509 }
7510
7511 if (offset <length) {
7512 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
7513 }
7514
7515}
7516/*
7517 * 8.101 ULI Timestamp
7518 */
7519static void
7520dissect_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)))
7521{
7522 char *time_str;
7523
7524 /* Octets 5 to 8 are encoded in the same format as the first four octets of the 64-bit timestamp
7525 * format as defined in section 6 of IETF RFC 5905
7526 */
7527
7528 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);
7529 proto_item_append_text(item, "%s", time_str);
7530
7531}
7532/*
7533 * 8.102 MBMS Flags
7534 */
7535static void
7536dissect_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)))
7537{
7538 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7539}
7540/*
7541 * 8.103 RAN/NAS Cause
7542 */
7543static const value_string ran_nas_prot_type_vals[] = {
7544 { 1, "S1AP Cause" },
7545 { 2, "EMM Cause" },
7546 { 3, "ESM Cause" },
7547 { 4, "Diameter Cause" },
7548 { 5, "IKEv2 Cause" },
7549 { 0, NULL((void*)0) },
7550};
7551
7552static void
7553dissect_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)))
7554{
7555 unsigned offset = 0;
7556 uint8_t octet = tvb_get_uint8(tvb, offset);
7557 uint8_t proto_type = (octet >> 4);
7558 int cause_type = 0;
7559
7560 proto_tree_add_item(tree, hf_gtpv2_ran_nas_protocol_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7561
7562 if (proto_type == 1) {
7563 proto_tree_add_item(tree, hf_gtpv2_ran_nas_cause_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7564 cause_type = octet & 0x0F;
7565 }
7566 offset += 1;
7567
7568 switch (proto_type) {
7569 case 1:
7570 dissect_gtpv2_s1ap_cause(tvb, pinfo, tree, offset, cause_type);
7571 break;
7572 case 2:
7573 proto_tree_add_item(tree, hf_gtpv2_emm_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7574 break;
7575 case 3:
7576 proto_tree_add_item(tree, hf_gtpv2_esm_cause, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7577 break;
7578 case 4:
7579 proto_tree_add_item(tree, hf_gtpv2_diameter_cause, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7580 break;
7581 case 5:
7582 proto_tree_add_item(tree, hf_gtpv2_ikev2_cause, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7583 break;
7584 default:
7585 proto_tree_add_item(tree, hf_gtpv2_ran_nas_cause_value, tvb, offset, length - offset, ENC_BIG_ENDIAN0x00000000);
7586 break;
7587 }
7588}
7589/*
7590 * 8.104 CN Operator Selection Entity
7591 */
7592static void
7593dissect_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)))
7594{
7595 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7596}
7597/*
7598 * 8.105 Trusted WLAN Mode Indication
7599 */
7600static void
7601dissect_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)))
7602{
7603 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
7604}
7605/*
7606 * 8.106 Node Number
7607 */
7608static void
7609dissect_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)))
7610{
7611 unsigned offset = 0;
7612 uint32_t len;
7613 tvbuff_t* new_tvb;
7614
7615 /* Octet 5 Length of Node Number*/
7616 proto_tree_add_item_ret_uint(tree, hf_gtpv2_node_number_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &len);
7617 offset += 1;
7618
7619 /* The Node number shall carry an ISDN number...
7620 * shall be coded according to the contents of ISDN-AddressString data type
7621 * defined in 3GPP TS 29.002
7622 */
7623 new_tvb = tvb_new_subset_length(tvb, offset, len);
7624 dissect_gsm_map_msisdn(new_tvb, pinfo, tree);
7625}
7626/*
7627 * 8.107 Node Identifier
7628 */
7629static void
7630dissect_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)))
7631{
7632 int offset = 0;
7633 uint32_t name_len;
7634
7635 /*
7636 RFC 6733
7637 DiameterIdentity
7638
7639 The DiameterIdentity format is derived from the OctetString Basic
7640 AVP Format....In this document, note that DiameterIdentity is
7641 in ASCII form.
7642
7643 TS 29.274
7644
7645 If the Node Identifier contains a SGSN Identifier then:
7646 - 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;
7647 - 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;
7648 - 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.
7649 6.4.13 SGSN-Name
7650 The SGSN-Name AVP is of type DiameterIdentity...see IETF RFC 6733
7651 6.4.14 SGSN-Realm
7652 The SGSN-Realm AVP is of type DiameterIdentity...see IETF RFC 6733
7653
7654 If the Node Identifier contains a MME Identifier then:
7655 - 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;
7656 - 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;
7657 - 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.
7658 6.4.4 MME-Name
7659 The MME-Name AVP is of type DiameterIdentity...see IETF RFC 6733
7660 6.4.12 MME-Realm
7661 The MME-Realm AVP is of type DiameterIdentity...see IETF RFC 6733
7662
7663 If the Node Identifier contains a 3GPP AAA Server Identifier then:
7664 - 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;
7665 8.2.3.24 3GPP-AAA-Server-Name
7666 The 3GPP-AAA-Server-Name AVP is of type DiameterIdentity
7667 - 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].
7668
7669 If the Node Identifier contains an SCEF/IWK-SCEF information, then:
7670 - the Node Name shall be coded as the SCEF-ID as defined in subclause 8.4.5 of 3GPP TS 29.336 [69] and;
7671 8.4.5 SCEF-ID
7672 The SCEF- ID AVP is of type DiameterIdentity
7673 - 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].
7674
7675 */
7676 /* Octet 5 Length of Node Name */
7677 proto_tree_add_item_ret_uint(tree, hf_gtpv2_length_of_node_name, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &name_len);
7678 offset++;
7679 /* Node Name */
7680 proto_tree_add_item(tree, hf_gtpv2_node_name, tvb, offset, name_len, ENC_UTF_80x00000002);
7681 offset = offset + name_len;
7682 /* Length of Node Realm */
7683 proto_tree_add_item_ret_uint(tree, hf_gtpv2_length_of_node_realm, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &name_len);
7684 offset++;
7685 /* Node Realm */
7686 proto_tree_add_item(tree, hf_gtpv2_node_realm, tvb, offset, name_len, ENC_UTF_80x00000002);
7687 offset = offset + name_len;
7688 if(offset < length){
7689 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
7690 }
7691}
7692/*
7693 * 8.108 Presence Reporting Area Action
7694 */
7695
7696/*
7697 * The Presence-Reporting-Area-Elements-List AVP (AVP code 2820)
7698 * is of type Octetstring and is coded as specified in 3GPP TS 29.274 [22]
7699 * in Presence Reporting Area Action IE, starting from octet 9.
7700 */
7701
7702static int
7703dissect_diameter_3gpp_presence_reporting_area_elements_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
7704{
7705 /*diam_sub_dis_t *diam_sub_dis = (diam_sub_dis_t*)data;*/
7706 proto_tree *sub_tree;
7707 proto_item *item;
7708 unsigned offset = 0, i;
7709 unsigned length;
7710 uint32_t no_tai, no_rai, no_mENB, no_hENB, no_ECGI, no_sai, no_cgi, no_ext_mENB;
7711 char *append_str;
7712 length = tvb_reported_length(tvb);
7713
7714 /* Octet 9 Number of TAI Number of RAI */
7715 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_tai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_tai);
7716 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_rai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_rai);
7717 offset++;
7718 /* Octet 10 Spare Number of Macro eNodeB */
7719 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_m_enodeb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_mENB);
7720 offset++;
7721 /* Octet 11 Spare Number of Home eNodeB */
7722 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_h_enodeb, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_hENB);
7723 offset++;
7724 /* Octet 12 Spare Number of ECGI */
7725 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_ecgi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_ECGI);
7726 offset++;
7727 /* Octet 13 Spare Number of SAI */
7728 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_sai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_sai);
7729 offset++;
7730 /* Octet 14 Spare Number of CGI */
7731 proto_tree_add_item_ret_uint(tree, hf_gtpv2_pres_rep_area_act_no_cgi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &no_cgi);
7732 offset++;
7733 /* Octet 15 to k TAIs [1..15] */
7734 i = 1;
7735 while (no_tai > 0){
7736 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 5, ett_gtpv2_preaa_tais, &item, "Tracking Area Identity (TAI) Number %u",i);
7737 append_str = dissect_gtpv2_tai(tvb, pinfo, sub_tree, &offset, false0);
7738 proto_item_append_text(item, " %s",append_str);
7739 i++;
7740 no_tai--;
7741 }
7742 /* Octet (k+1) to m Macro eNB IDs [1..63]
7743 * 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.
7744 * Octets 'k+1' to 'm' shall be absent if the field 'Number of Macro eNodeB' is set to the value '0'.
7745 */
7746 i = 1;
7747 while (no_mENB > 0){
7748 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 6, ett_gtpv2_preaa_menbs, &item, "Macro eNB ID %u",i);
7749 append_str = dissect_gtpv2_macro_enodeb_id(tvb, pinfo, sub_tree, &offset);
7750 proto_item_append_text(item, " %s",append_str);
7751 i++;
7752 no_mENB--;
7753 }
7754 /* Octet (m+1) to p Home eNB IDs [1..63]
7755 * 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.
7756 * Octets 'm+1' to 'p' shall be absent if the field 'Number of Home eNodeB' is set to the value '0'.
7757 */
7758 i = 1;
7759 while (no_hENB > 0){
7760 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_henbs, &item, "Home eNB ID %u",i);
7761 append_str = dissect_gtpv2_home_enodeb_id(tvb, pinfo, sub_tree, &offset);
7762 proto_item_append_text(item, " %s",append_str);
7763 i++;
7764 no_hENB--;
7765 }
7766 /* Octet (p+1) to q ECGIs [1..63]
7767 * ECGIs in octets 'p+1' to 'q', if any, shall be encoded as per the ECGI field in subclause 8.21.5.
7768 * Octets 'p+1' to 'q' shall be absent if the field 'Number of ECGI' is set to the value '0'.
7769 */
7770 i = 1;
7771 while (no_ECGI > 0){
7772 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_ecgis, &item, "ECGI ID %u",i);
7773 append_str = dissect_gtpv2_ecgi(tvb, pinfo, sub_tree, &offset);
7774 proto_item_append_text(item, " %s",append_str);
7775 i++;
7776 no_ECGI--;
7777 }
7778 /* Octet (q+1) to r RAIs [1..15]
7779 * RAIs in octets 'q+1' to 'r', if any, shall be encoded as per the RAI field in subclause 8.21.3.
7780 * Octets 'q+1' to 'r' shall be absent if the field 'Number of RAI' is set to the value '0'.
7781 */
7782 i = 1;
7783 while (no_rai > 0){
7784 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_rais, &item, "RAI ID %u",i);
7785 append_str = dissect_gtpv2_rai(tvb, pinfo, sub_tree, &offset);
7786 proto_item_append_text(item, " %s",append_str);
7787 i++;
7788 no_rai--;
7789 }
7790 /* Octet (r+1) to s SAIs [1..63]
7791 * SAIs in octets 'r+1' to 's', if any, shall be encoded as per the SAI field in subclause 8.21.2.
7792 * Octets 'r+1' to 's' shall be absent if the field 'Number of SAI' is set to the value '0'.
7793 */
7794 i = 1;
7795 while (no_sai > 0){
7796 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_sais, &item, "SAI ID %u",i);
7797 append_str = dissect_gtpv2_sai_common(tvb, pinfo, sub_tree, &offset);
7798 proto_item_append_text(item, " %s",append_str);
7799 i++;
7800 no_sai--;
7801 }
7802 /* Octet (s+1) to t CGIs [1..63]
7803 * CGIs in octets 's+1' to 't', if any, shall be encoded as per the CGI field in subclause 8.21.1.
7804 * Octets 's+1' to 't' shall be absent if the field 'Number of CGI' is set to the value '0'.
7805 */
7806 i = 1;
7807 while (no_cgi > 0){
7808 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 7, ett_gtpv2_preaa_cgis, &item, "CGI ID %u",i);
7809 append_str = dissect_gtpv2_cgi(tvb, pinfo, sub_tree, &offset);
7810 proto_item_append_text(item, " %s",append_str);
7811 i++;
7812 no_cgi--;
7813 }
7814 if (offset >= length)
7815 return length;
7816 /* Octet t+1 Spare Number of Extended Macro eNodeB */
7817 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);
7818 offset++;
7819 /* Octet (t+2) to v Extended Macro eNB IDs [1..63]
7820 * 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.
7821 * Octets 'k+1' to 'm' shall be absent if the field 'Number of Extended Macro eNodeB' is set to the value '0'.
7822 */
7823 i = 1;
7824 while (no_ext_mENB > 0){
7825 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 6, ett_gtpv2_preaa_ext_menbs, &item, "Extended Macro eNB ID %u",i);
7826 append_str = dissect_gtpv2_ext_macro_enodeb_id(tvb, pinfo, sub_tree, &offset, hf_gtpv2_ext_macro_enodeb_id);
7827 proto_item_append_text(item, " %s",append_str);
7828 i++;
7829 no_ext_mENB--;
7830 }
7831
7832 return length;
7833}
7834
7835static const value_string gtpv2_pres_rep_area_action_vals[] = {
7836 { 1, "Start Reporting change"},
7837 { 2, "Stop Reporting change"},
7838 { 3, "Modify Presence Reporting Area elements"},
7839 { 0, NULL((void*)0)}
7840};
7841
7842static void
7843dissect_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)))
7844{
7845 unsigned offset = 0;
7846 tvbuff_t * new_tvb;
7847
7848 static int * const flags[] = {
7849 &hf_gtpv2_pres_rep_area_act_inapra,
7850 &hf_gtpv2_pres_rep_area_action,
7851 NULL((void*)0)
7852 };
7853
7854 /* Octet 5 Spare INAPRA Action */
7855 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN0x00000000);
7856 offset++;
7857
7858 if (length == 1)
7859 return;
7860 /* Octet 6 to 8 Presence Reporting Area Identifier */
7861 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7862 offset+=3;
7863 if (length == 4)
7864 return;
7865
7866 new_tvb = tvb_new_subset_length(tvb, offset, length-4);
7867
7868 /* Share the rest of the dissection with the AVP dissector */
7869 dissect_diameter_3gpp_presence_reporting_area_elements_list(new_tvb, pinfo, tree, NULL((void*)0));
7870
7871}
7872/*
7873 * 8.109 Presence Reporting Area Information
7874 */
7875static void
7876dissect_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)))
7877{
7878 unsigned offset = 0;
7879 uint64_t gtpv2_pres_rep_area_info_flags_val = 0;
7880
7881 /*Octet 5 to 7 Presence Reporting Area Identifier */
7882 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_id, tvb, offset, 3 , ENC_BIG_ENDIAN0x00000000);
7883 offset+=3;
7884
7885 /*Octet 8 Spare Spare Spare Spare INAPRA APRA OPRA IPRA */
7886 static int * const gtpv2_pres_rep_area_info_flags[] = {
7887 &hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare,
7888 &hf_gtpv2_pres_rep_area_info_flags_b3_inapra,
7889 &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
7890 &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
7891 &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
7892 NULL((void*)0)
7893 };
7894
7895 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_gtpv2_pres_rep_area_info_flags, ett_gtpv2_pres_rep_area_info,
7896 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);
7897 offset+=1;
7898
7899 /* 3GPP TS 29.212 v14.7.0:
7900 * If the Additional PRA (APRA) flag is set to 1, [...]
7901 * subsequent 4 octets shall then be present
7902 * and shall contain the identifier of the individual PRA
7903 */
7904 if(gtpv2_pres_rep_area_info_flags_val & 0x04){
7905 /* Octets a to (a+2) Additional PRA Identifier */
7906 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_additional_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7907 offset+=3;
7908
7909 /*Octet a+3 Spare Spare Spare Spare Spare APRA OPRA IPRA */
7910 static int * const gtpv2_pres_rep_area_info_flags_no_inapra[] = {
7911 &hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare,
7912 &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
7913 &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
7914 &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
7915 NULL((void*)0)
7916 };
7917
7918 while(offset < length){
7919 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,
7920 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);
7921 offset+=1;
7922
7923 if(gtpv2_pres_rep_area_info_flags_val & 0x04){
7924 /* Octets b to (b+2) Additional PRA Identifier */
7925 proto_tree_add_item(tree, hf_gtpv2_pres_rep_area_info_additional_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
7926 offset+=3;
7927 }
7928 }
7929 }
7930}
7931/*
7932 * 8.110 TWAN Identifier Timestamp
7933 */
7934static void
7935dissect_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)))
7936{
7937 char *time_str;
7938
7939 /* TWAN Identifier Timestamp value */
7940 /* Octets 5 to 8 are encoded in the same format as the first four octets of the 64-bit timestamp
7941 * format as defined in section 6 of IETF RFC 5905
7942 */
7943
7944 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);
7945 proto_item_append_text(item, "%s", time_str);
7946
7947}
7948/*
7949 * 8.111 Overload Control Information
7950 */
7951static void
7952
7953dissect_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)))
7954{
7955
7956 unsigned offset = 0;
7957 proto_tree *grouped_tree;
7958 tvbuff_t *new_tvb;
7959
7960 proto_item_append_text(item, "[Grouped IE]");
7961 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_overload_control_information);
7962 new_tvb = tvb_new_subset_length(tvb, offset, length);
7963
7964 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_OVERLOAD_CONTROL_INF180);
7965}
7966/*
7967 * 8.112 Load Control Information
7968 */
7969static void
7970dissect_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)))
7971{
7972 unsigned offset = 0;
7973 tvbuff_t *new_tvb;
7974 proto_tree *grouped_tree;
7975
7976 proto_item_append_text(item, "[Grouped IE]");
7977 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_load_control_inf);
7978
7979 new_tvb = tvb_new_subset_length(tvb, offset, length);
7980 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, 0, message_type, args, GTPV2_IE_LOAD_CONTROL_INF181);
7981}
7982/*
7983 * 8.113 Metric
7984 */
7985static void
7986dissect_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)))
7987{
7988 uint32_t oct;
7989
7990 proto_tree_add_item_ret_uint(tree, hf_gtpv2_metric, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &oct);
7991 if (oct > 0x64) {
7992 proto_item_append_text(item, "Metric: value beyond 100 is considered as 0");
7993 } else {
7994 proto_item_append_text(item, "%u", oct);
7995
7996 }
7997}
7998/*
7999 * 8.114 Sequence Number
8000 */
8001static void
8002dissect_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)))
8003{
8004 uint32_t seq;
8005 proto_tree_add_item_ret_uint(tree, hf_gtpv2_sequence_number, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &seq);
8006 proto_item_append_text(item, "%u", seq);
8007}
8008/*
8009 * 8.115 APN and Relative Capacity
8010 */
8011static void
8012dissect_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)))
8013{
8014 int offset = 0;
8015 uint8_t oct, apn_length;
8016 const uint8_t *apn = NULL((void*)0);
8017
8018 oct = tvb_get_uint8(tvb, offset);
8019 proto_tree_add_item(tree, hf_gtpv2_relative_capacity, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8020 if((oct > 0x64) || (oct < 0x01))
8021 proto_item_append_text(item, "Relative Capacity: value beyond (1,100) is considered as 0");
8022 offset += 1;
8023 apn_length = tvb_get_uint8(tvb, offset);
8024 proto_tree_add_item(tree, hf_gtpv2_apn_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8025 offset += 1;
8026
8027 if (apn_length > 0) {
8028 proto_item* pi;
8029 pi = proto_tree_add_item_ret_string(tree, hf_gtpv2_apn, tvb, offset, apn_length, ENC_APN_STR0x00000054 | ENC_NA0x00000000, pinfo->pool, &apn);
8030 if (apn_length > 100)
8031 expert_add_info(pinfo, pi, &ei_gtpv2_apn_too_long);
8032 }
8033}
8034/*
8035 * 8.117 Paging and Service Information
8036 */
8037static void
8038dissect_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)))
8039{
8040 unsigned offset = 0;
8041 uint8_t ppi_flag;
8042
8043 /* Spare (all bits set to 0) B8 - B5 */
8044 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8045 /* EPS Bearer ID (EBI) B4 - B1 */
8046 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8047 offset += 1;
8048
8049 /* Spare B8 - B2 */
8050 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN0x00000000);
8051 /* Paging Policy Indication flag (PPI) */
8052 ppi_flag = tvb_get_uint8(tvb, offset);
8053 proto_tree_add_item(tree, hf_gtpv2_ppi_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8054 offset += 1;
8055
8056 if(ppi_flag & 1){
8057 /* Spare B8 - B7 */
8058 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 2, ENC_BIG_ENDIAN0x00000000);
8059 /* Paging Policy Indication Value */
8060 proto_item_append_text(tree, " (PPI Value: %s)", val_to_str_ext_const(tvb_get_uint8(tvb, offset), &dscp_vals_ext, "Unknown"));
8061 proto_tree_add_item(tree, hf_gtpv2_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8062 }
8063}
8064/*
8065 * 8.118 Integer Number
8066 */
8067static void
8068dissect_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)))
8069{
8070 unsigned offset = 0;
8071 /* The Integer Number value shall be encoded as further described below for the following information elements:
8072 * 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.
8073 * DL Buffering Suggested Packet Count IE: the length shall be set to 1 or 2;
8074 * 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].
8075 */
8076 if (length <= 4) {
8077 /* Only handle up to 32 bits for now */
8078 switch (message_type) {
8079 case GTPV2_CREATE_SESSION_REQUEST32:
8080 proto_item_append_text(item, "Maximum Wait Time");
8081 proto_tree_add_item(tree, hf_gtpv2_maximum_wait_time, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8082 break;
8083 case GTPV2_DL_DATA_NOTIF_ACK177:
8084 proto_item_append_text(item, "DL Buffering Suggested Packet Count");
8085 proto_tree_add_item(tree, hf_gtpv2_dl_buf_sug_pkt_cnt, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8086 break;
8087 case GTPV2_FORWARD_RELOCATION_REQ133:
8088 case GTPV2_CONTEXT_RESPONSE131:
8089 case GTPV2_IDENTIFICATION_RESPONSE129:
8090 switch (instance) {
8091 case 0:
8092 /* 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. */
8093 proto_item_append_text(item, "UE Usage Type");
8094 if (length > 0) {
8095 proto_tree_add_item(tree, hf_gtpv2_ue_usage_type, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8096 } else {
8097 proto_item_append_text(item, " not available in the old MME/SGSN/AMF");
8098 }
8099 break;
8100 case 1:
8101 /* Remaining Running Service Gap Timer */
8102 proto_tree_add_item(tree, hf_gtpv2_rem_run_serv_gap_t, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8103 break;
8104 default:
8105 proto_tree_add_item(tree, hf_gtpv2_integer_number_val, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8106 break;
8107 }
8108 break;
8109 default:
8110 proto_tree_add_item(tree, hf_gtpv2_integer_number_val, tvb, offset, length, ENC_BIG_ENDIAN0x00000000);
8111 break;
8112 }
8113 } else {
8114 /* value not handled, yet*/
8115 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_int_size_not_handled, tvb, offset, length);
8116
8117 }
8118
8119}
8120/*
8121 * 8.119 Millisecond Time Stamp
8122 */
8123
8124static void
8125dissect_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)))
8126{
8127 unsigned offset = 0;
8128 /* Octets 5 to 10 represent a 48 bit unsigned integer in network order format and are encoded as
8129 * the number of milliseconds since 00:00:00 January 1, 1900 00:00 UTC, i.e. as the
8130 * rounded value of 1000 x the value of the 64-bit timestamp (Seconds + (Fraction / (1<<32)))
8131 * defined in section 6 of IETF RFC 5905
8132 */
8133 switch (message_type) {
8134 case GTPV2_CREATE_SESSION_REQUEST32:
8135 /*proto_item_append_text(item, "Origination time stamp");*/
8136 proto_tree_add_item(tree, hf_gtpv2_origination_ts, tvb, offset, length, ENC_TIME_MSEC_NTP0x00000022 | ENC_BIG_ENDIAN0x00000000);
8137 break;
8138 default:
8139 proto_tree_add_item(tree, hf_gtpv2_ms_ts, tvb, offset, 6, ENC_TIME_MSEC_NTP0x00000022 | ENC_BIG_ENDIAN0x00000000);
8140 break;
8141 }
8142}
8143
8144/*
8145 * 8.120 Monitoring Event Information
8146 */
8147static void
8148dissect_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)))
8149{
8150 unsigned offset = 0;
8151 bool_Bool srie;
8152 uint32_t scef_id_len;
8153
8154 /* Octet 4 higher four bits flags SIRE, NSCF, NSUI and NSUR */
8155 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_inf_srie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srie);
8156 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nscf, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8157 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nsui, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8158 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_nsur, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8159
8160 /* Octet 4 lower four bits Instance */
8161 proto_tree_add_item(tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8162 offset++;
8163
8164 /* Octet 5 to 8 SCEF Reference ID */
8165 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_reference_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8166 offset += 4;
8167 /* Octet 9 Length of SCEF ID */
8168 proto_tree_add_item_ret_uint(tree, hf_gtpv2_mon_event_inf_scef_id_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &scef_id_len);
8169 offset++;
8170 /* Octet 10 to k SCEF ID */
8171 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_id, tvb, offset, scef_id_len, ENC_UTF_80x00000002);
8172 offset = offset + scef_id_len;
8173 /* Octet (k+1) to (k+2) Remaining Number of Reports */
8174 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_remaining_number_of_reports, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000 );
8175 offset += 2;
8176
8177 if (srie) {
8178 proto_tree_add_item(tree, hf_gtpv2_mon_event_inf_scef_reference_id_ext, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8179 offset += 8;
8180 }
8181
8182 if(offset < length){
8183 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length - offset);
8184 }
8185}
8186
8187/*
8188 * 8.125 CIoT Optimizations Support Indication
8189 */
8190static void
8191dissect_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)))
8192{
8193 int offset;
8194 static int * const ciot_flags[] = {
8195 &hf_gtpv2_ciot_support_ind_spare_bits,
8196 &hf_gtpv2_ciot_support_ind_bit4,
8197 &hf_gtpv2_ciot_support_ind_bit3,
8198 &hf_gtpv2_ciot_support_ind_bit2,
8199 &hf_gtpv2_ciot_support_ind_bit1,
8200 NULL((void*)0)
8201 };
8202
8203 offset = 0;
8204 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);
8205
8206 offset += 1;
8207 if (length - offset) {
8208 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
8209 }
8210}
8211
8212/*
8213 * 8.126 SCEF PDN Connection
8214 */
8215static void
8216dissect_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)
8217{
8218 unsigned offset = 0;
8219 proto_tree *grouped_tree;
8220 tvbuff_t *new_tvb;
8221
8222 proto_item_append_text(item, "[Grouped IE]");
8223 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
8224 new_tvb = tvb_new_subset_length(tvb, offset, length);
8225
8226 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_SCEF_PDN_CONNECTION195);
8227
8228}
8229
8230
8231/*
8232 * 8.127 Header Compression Configuration
8233 */
8234static void
8235dissect_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)))
8236{
8237 unsigned offset = 0;
8238
8239 static int * const gtpv2_rohc_profile_flags_flags[] = {
8240 &hf_gtpv2_rohc_profiles_bit7,
8241 &hf_gtpv2_rohc_profiles_bit6,
8242 &hf_gtpv2_rohc_profiles_bit5,
8243 &hf_gtpv2_rohc_profiles_bit4,
8244 &hf_gtpv2_rohc_profiles_bit3,
8245 &hf_gtpv2_rohc_profiles_bit2,
8246 &hf_gtpv2_rohc_profiles_bit1,
8247 &hf_gtpv2_rohc_profiles_bit0,
8248 NULL((void*)0)
8249 };
8250
8251 /* Octet 5 to 6 ROHC Profiles */
8252
8253 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_gtpv2_rohc_profile_flags,
8254 ett_gtpv2_rohc_profile_flags, gtpv2_rohc_profile_flags_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
8255 offset++;
8256 proto_tree_add_item(tree, hf_gtpv2_spare_w0, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8257 offset++;
8258 /* Octet 7 to 8 MAX_CID*/
8259 proto_tree_add_item(tree, hf_gtpv2_max_cid, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8260
8261}
8262
8263/*
8264 * 8.129 Serving PLMN Rate Control
8265 */
8266static void
8267dissect_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)))
8268{
8269 unsigned offset = 0;
8270 proto_tree_add_item(tree, hf_gtpv2_uplink_rate_limit, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8271 offset += 2;
8272 proto_tree_add_item(tree, hf_gtpv2_downlink_rate_limit, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8273}
8274
8275/*
8276 * 8.130 Counter
8277 */
8278static void
8279dissect_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)))
8280{
8281 unsigned offset = 0;
8282
8283 /* Timestamp value */
8284 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
8285 *format as defined in section 6 of IETF RFC 5905
8286 */
8287
8288 proto_tree_add_item(tree, hf_gtpv2_timestamp_value, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8289 offset += 4;
8290 proto_tree_add_item(tree, hf_gtpv2_counter_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8291}
8292
8293/*
8294 * 8.131 Mapped UE Usage Type
8295 */
8296
8297static void
8298dissect_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)))
8299{
8300 unsigned offset = 0;
8301
8302 proto_tree_add_item(tree, hf_gtpv2_mapped_ue_usage_type, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8303 offset += 2;
8304 if (length > offset) {
8305 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
8306 }
8307}
8308
8309/*
8310 * 8.132 Secondary RAT Usage Data Report
8311 */
8312static const value_string gtpv2_secondary_rat_type_vals[] = {
8313 { 0, "NR" },
8314 { 1, "Unlicensed Spectrum"},
8315 { 0, NULL((void*)0) }
8316};
8317
8318static void
8319dissect_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)))
8320{
8321 tvbuff_t *new_tvb;
8322 proto_tree *sub_tree;
8323 unsigned offset = 0;
8324 uint32_t srudn_len;
8325 uint64_t gtpv2_secondary_rat_usage_data_report_flags_val = 0;
8326
8327 static int * const secondary_rat_usage_data_report_flags[] = {
8328 &hf_gtpv2_secondary_rat_usage_data_report_spare_bits,
8329 &hf_gtpv2_secondary_rat_usage_data_report_bit3,
8330 &hf_gtpv2_secondary_rat_usage_data_report_bit2,
8331 &hf_gtpv2_secondary_rat_usage_data_report_bit1,
8332 NULL((void*)0)
8333 };
8334
8335 /*
8336 * The following bits within Octet 5 shall indicate:
8337 * Bit 8 to 3 - Spare, for future use and set to zero.
8338 * Bit 3 - SRUDN (Secondary RAT Usage Report from NG-RAN)
8339 * Bit 2 - IRSGW (Intended Receiver SGW)
8340 * Bit 1 - IRPGW (Intended Receiver PGW)
8341 */
8342 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,
8343 secondary_rat_usage_data_report_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01, &gtpv2_secondary_rat_usage_data_report_flags_val);
8344 offset += 1;
8345
8346 /* Octet 6 RAT Type */
8347 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_rat_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8348 offset += 1;
8349
8350 /* Octet 7 EPS Bearer ID */
8351 /* Spare (all bits set to 0) B8 - B5 */
8352 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN0x00000000);
8353 /* EPS Bearer ID (EBI) B4 - B1 */
8354 proto_tree_add_item(tree, hf_gtpv2_ebi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8355 offset += 1;
8356
8357 /*
8358 * 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
8359 * format as defined in section 6 of IETF RFC 5905
8360 */
8361
8362 /* Octets 8 to 11 Start timestamp */
8363 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_start_timestamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8364 offset += 4;
8365
8366 /* Octets 12 to 15 End timestamp */
8367 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_end_timestamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8368 offset += 4;
8369
8370 /* 16 to 23 Usage Data DL */
8371 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8372 offset += 8;
8373
8374 /* 24 to 32 Usage Data UL */
8375 proto_tree_add_item(tree, hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8376 offset += 8;
8377
8378 if(gtpv2_secondary_rat_usage_data_report_flags_val & 0x04) {
8379 /* Octet k Length of Secondary RAT Data Usage Report Transfer */
8380 proto_tree_add_item_ret_uint(tree, hf_gtpv2_secondary_rat_usage_data_report_srudn_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srudn_len);
8381 offset++;
8382 /* Octet (k+1) to a SRUDN */
8383 sub_tree = proto_tree_add_subtree(tree, tvb, offset, srudn_len, ett_gtpv2_son_con, NULL((void*)0), "SecondaryRATDataUsageReportTransfer");
8384 new_tvb = tvb_new_subset_length(tvb, offset, srudn_len);
8385 asn1_ctx_t asn1_ctx;
8386 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true1, pinfo);
8387 dissect_ngap_SecondaryRATDataUsageReportTransfer(new_tvb, 0, &asn1_ctx, sub_tree, hf_gtpv2_secondary_rat_usage_data_report_srudn_value);
8388 offset = offset + srudn_len;
8389 }
8390
8391 if (length - offset) {
8392 proto_tree_add_expert_format_remaining(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, "The rest of the IE not dissected yet");
8393 }
8394}
8395
8396
8397
8398/*
8399 * 8.133 UP Function Selection Indication Flags
8400 */
8401
8402static void
8403dissect_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)))
8404{
8405 unsigned offset = 0;
8406
8407 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN0x00000000);
8408 proto_tree_add_item(tree, hf_gtpv2_dcnr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8409
8410}
8411
8412/* 8.134 Maximum Packet Loss Rate */
8413static void
8414dissect_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)))
8415{
8416 unsigned offset = 0;
8417 uint8_t oct;
8418
8419 static int* const flags_oct1[] = {
8420 &hf_gtpv2_spare_b7_b2,
8421 &hf_gtpv2_max_pkt_loss_rte_dl_flg,
8422 &hf_gtpv2_max_pkt_loss_rte_ul_flg,
8423 NULL((void*)0)
8424 };
8425 /*5 Spare DL UL*/
8426 oct = tvb_get_uint8(tvb, offset);
8427 proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_oct1, ENC_BIG_ENDIAN0x00000000);
8428 offset++;
8429
8430 if((oct & 0x01) == 1){
8431 /*m to m+1 Maximum Packet Loss Rate UL*/
8432 proto_tree_add_item(tree, hf_gtpv2_max_pkt_loss_rte_ul, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8433 offset += 2;
8434 }
8435 if ((oct & 0x02) == 2) {
8436 /*o to o+1 Maximum Packet Loss Rate DL*/
8437 proto_tree_add_item(tree, hf_gtpv2_max_pkt_loss_rte_dl, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8438 }
8439
8440
8441}
8442
8443/* 8.135 APN Rate Control Status */
8444static void
8445dissect_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)))
8446{
8447 unsigned offset = 0;
8448
8449 /*5 to 8 Number of Uplink packets allowed*/
8450 proto_tree_add_item(tree, hf_gtpv2_nr_ul_pkts_all, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8451 offset += 4;
8452 /*9 to 12 Number of additional exception reports*/
8453 proto_tree_add_item(tree, hf_gtpv2_nr_add_exception_rpts, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8454 offset += 4;
8455 /*13 to 16 Number of Downlink packets allowed*/
8456 proto_tree_add_item(tree, hf_gtpv2_nr_dl_pkts_all, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8457 offset += 4;
8458 /*17 to 24 APN Rate Control Status validity Time*/
8459 proto_tree_add_item(tree, hf_apn_rte_cntrl_status_val_time, tvb, offset, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
8460
8461}
8462/* 3GPP TS 32.422 V15.1.0 (2018-06) 5.5 List of interfaces (O)*/
8463
8464static int* const ext_tra_info_list_of_if_flags_oct1[] = {
8465 &hf_gtpv2_ext_tra_info_loi_mscs_cap,
8466 &hf_gtpv2_ext_tra_info_loi_mscs_map_f,
8467 &hf_gtpv2_ext_tra_info_loi_mscs_map_e,
8468 &hf_gtpv2_ext_tra_info_loi_mscs_map_b,
8469 &hf_gtpv2_ext_tra_info_loi_mscs_map_g,
8470 &hf_gtpv2_ext_tra_info_loi_mscs_mc,
8471 &hf_gtpv2_ext_tra_info_loi_mscs_iu,
8472 &hf_gtpv2_ext_tra_info_loi_mscs_a,
8473 NULL((void*)0)
8474};
8475
8476static int* const ext_tra_info_list_of_if_flags_oct2[] = {
8477 &hf_gtpv2_ext_tra_info_loi_mscs_map_c,
8478 &hf_gtpv2_ext_tra_info_loi_mscs_map_d,
8479 NULL((void*)0)
8480};
8481
8482static int* const ext_tra_info_list_of_if_flags_oct3[] = {
8483 &hf_gtpv2_ext_tra_info_loi_mgw_iuup,
8484 &hf_gtpv2_ext_tra_info_loi_mgw_nbup,
8485 &hf_gtpv2_ext_tra_info_loi_mgw_mc,
8486 NULL((void*)0)
8487};
8488
8489static int* const ext_tra_info_list_of_if_flags_oct4[] = {
8490 &hf_gtpv2_ext_tra_info_loi_sgsn_ge,
8491 &hf_gtpv2_ext_tra_info_loi_sgsn_gs,
8492 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gf,
8493 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gd,
8494 &hf_gtpv2_ext_tra_info_loi_sgsn_map_gr,
8495 &hf_gtpv2_ext_tra_info_loi_sgsn_gn,
8496 &hf_gtpv2_ext_tra_info_loi_sgsn_iu,
8497 &hf_gtpv2_ext_tra_info_loi_sgsn_gb,
8498 NULL((void*)0)
8499};
8500
8501static int* const ext_tra_info_list_of_if_flags_oct5[] = {
8502 &hf_gtpv2_ext_tra_info_loi_sgsn_s13,
8503 &hf_gtpv2_ext_tra_info_loi_sgsn_s3,
8504 &hf_gtpv2_ext_tra_info_loi_sgsn_s4,
8505 &hf_gtpv2_ext_tra_info_loi_sgsn_s6d,
8506 NULL((void*)0)
8507};
8508
8509static int* const ext_tra_info_list_of_if_flags_oct6[] = {
8510 &hf_gtpv2_ext_tra_info_loi_ggsn_gmb,
8511 &hf_gtpv2_ext_tra_info_loi_ggsn_gi,
8512 &hf_gtpv2_ext_tra_info_loi_ggsn_gn,
8513 NULL((void*)0)
8514};
8515
8516static int* const ext_tra_info_list_of_if_flags_oct7[] = {
8517 &hf_gtpv2_ext_tra_info_loi_rnc_uu,
8518 &hf_gtpv2_ext_tra_info_loi_rnc_iub,
8519 &hf_gtpv2_ext_tra_info_loi_rnc_iur,
8520 &hf_gtpv2_ext_tra_info_loi_rnc_iu,
8521 NULL((void*)0)
8522};
8523
8524static int* const ext_tra_info_list_of_if_flags_oct8[] = {
8525 &hf_gtpv2_ext_tra_info_loi_bm_sc_gmb,
8526 NULL((void*)0)
8527};
8528
8529static int* const ext_tra_info_list_of_if_flags_oct9[] = {
8530 &hf_gtpv2_ext_tra_info_loi_mme_s13,
8531 &hf_gtpv2_ext_tra_info_loi_mme_s11,
8532 &hf_gtpv2_ext_tra_info_loi_mme_s10,
8533 &hf_gtpv2_ext_tra_info_loi_mme_s6a,
8534 &hf_gtpv2_ext_tra_info_loi_mme_s3,
8535 &hf_gtpv2_ext_tra_info_loi_mme_s1_mme,
8536 NULL((void*)0)
8537};
8538
8539static int* const ext_tra_info_list_of_if_flags_oct10[] = {
8540 &hf_gtpv2_ext_tra_info_loi_sgw_gxc,
8541 &hf_gtpv2_ext_tra_info_loi_sgw_s11,
8542 &hf_gtpv2_ext_tra_info_loi_sgw_s8b,
8543 &hf_gtpv2_ext_tra_info_loi_sgw_s5,
8544 &hf_gtpv2_ext_tra_info_loi_sgw_s4,
8545 NULL((void*)0)
8546};
8547
8548static int* const ext_tra_info_list_of_if_flags_oct11[] = {
8549 &hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi,
8550 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b,
8551 &hf_gtpv2_ext_tra_info_loi_pdn_gw_gx,
8552 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b,
8553 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s5,
8554 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c,
8555 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b,
8556 &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a,
8557 NULL((void*)0)
8558};
8559
8560static int* const ext_tra_info_list_of_if_flags_oct12[] = {
8561 &hf_gtpv2_ext_tra_info_loi_enb_uu,
8562 &hf_gtpv2_ext_tra_info_loi_enb_x2,
8563 &hf_gtpv2_ext_tra_info_loi_enb_s1_mme,
8564 NULL((void*)0)
8565};
8566
8567static int* const ext_tra_info_list_of_if_flags_oct13[] = {
8568 &hf_gtpv2_ext_tra_info_loi_hss_sh,
8569 &hf_gtpv2_ext_tra_info_loi_hss_s6a,
8570 &hf_gtpv2_ext_tra_info_loi_hss_s6d,
8571 &hf_gtpv2_ext_tra_info_loi_hss_cx,
8572 &hf_gtpv2_ext_tra_info_loi_hss_map_gr,
8573 &hf_gtpv2_ext_tra_info_loi_hss_map_gc,
8574 &hf_gtpv2_ext_tra_info_loi_hss_map_d,
8575 &hf_gtpv2_ext_tra_info_loi_hss_map_c,
8576 NULL((void*)0)
8577};
8578
8579static int* const ext_tra_info_list_of_if_flags_oct14[] = {
8580 &hf_gtpv2_ext_tra_info_loi_eir_map_gf,
8581 &hf_gtpv2_ext_tra_info_loi_eir_s13p,
8582 &hf_gtpv2_ext_tra_info_loi_eir_s13,
8583 &hf_gtpv2_ext_tra_info_loi_eir_map_f,
8584 NULL((void*)0)
8585};
8586
8587static int* const ext_tra_info_list_of_if_flags_oct15[] = {
8588 &hf_gtpv2_ext_tra_info_loi_amf_n20,
8589 &hf_gtpv2_ext_tra_info_loi_amf_n15,
8590 &hf_gtpv2_ext_tra_info_loi_amf_n14,
8591 &hf_gtpv2_ext_tra_info_loi_amf_n12,
8592 &hf_gtpv2_ext_tra_info_loi_amf_n11,
8593 &hf_gtpv2_ext_tra_info_loi_amf_n8,
8594 &hf_gtpv2_ext_tra_info_loi_amf_n2,
8595 &hf_gtpv2_ext_tra_info_loi_amf_n1,
8596 NULL((void*)0)
8597};
8598
8599static int* const ext_tra_info_list_of_if_flags_oct16[] = {
8600 &hf_gtpv2_ext_tra_info_loi_amf_n22,
8601 &hf_gtpv2_ext_tra_info_loi_amf_n26,
8602 NULL((void*)0)
8603};
8604
8605static int* const ext_tra_info_list_of_if_flags_oct17[] = {
8606 &hf_gtpv2_ext_tra_info_loi_pcf_n15,
8607 &hf_gtpv2_ext_tra_info_loi_pcf_n7,
8608 &hf_gtpv2_ext_tra_info_loi_pcf_n5,
8609 NULL((void*)0)
8610};
8611
8612static int* const ext_tra_info_list_of_if_flags_oct18[] = {
8613 &hf_gtpv2_ext_tra_info_loi_smf_s5_c,
8614 &hf_gtpv2_ext_tra_info_loi_smf_n11,
8615 &hf_gtpv2_ext_tra_info_loi_smf_n10,
8616 &hf_gtpv2_ext_tra_info_loi_smf_n7,
8617 &hf_gtpv2_ext_tra_info_loi_smf_n4,
8618 NULL((void*)0)
8619};
8620
8621static int* const ext_tra_info_list_of_if_flags_oct19[] = {
8622 &hf_gtpv2_ext_tra_info_loi_upf_n4,
8623 NULL((void*)0)
8624};
8625
8626static int* const ext_tra_info_list_of_if_flags_oct20[] = {
8627 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c,
8628 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c,
8629 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu,
8630 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c,
8631 &hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c,
8632 NULL((void*)0)
8633};
8634
8635/* 8.136 Extended Trace Information */
8636static void
8637dissect_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)))
8638{
8639 proto_tree *trigg_tree, *ne_tree, *if_tree;
8640 proto_item* ti;
8641 unsigned offset = 0;
8642 uint32_t tid, ev_len;
8643
8644 dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, E212_NONE, true1);
8645 offset += 3;
8646
8647 /* Append Trace ID to main tree */
8648 tid = tvb_get_ntohs(tvb, offset);
8649
8650 proto_tree_add_item_ret_uint(tree, hf_gtpv2_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &tid);
8651 proto_item_append_text(item, "Trace ID: %d ", tid);
8652
8653 offset += 3;
8654
8655 /* Triggering Events, put all into a new tree called triggering_tree */
8656 trigg_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "Triggering Events");
8657 /* Octet 11 Length of Triggering Events */
8658 proto_tree_add_item_ret_uint(trigg_tree, hf_gtpv2_trig_event_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8659 offset++;
8660
8661 proto_item_set_len(ti, ev_len + 1);
8662 offset += ev_len;
8663
8664 ne_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "List of NE Types");
8665 /* m + 1*/
8666 /* Length of List of NE Types */
8667 proto_tree_add_item_ret_uint(ne_tree, hf_gtpv2_ne_list_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8668 offset++;
8669 if (ev_len > 0) {
8670 proto_tree_add_bitmask_list(ne_tree, tvb, offset, 1, trace_ne_types_flags_oct1, ENC_BIG_ENDIAN0x00000000);
8671 }
8672 if (ev_len > 1) {
8673 proto_tree_add_bitmask_list(ne_tree, tvb, offset+1, 1, trace_ne_types_flags_oct2, ENC_BIG_ENDIAN0x00000000);
8674 }
8675
8676 proto_item_set_len(ti, ev_len + 1);
8677 offset += ev_len;
8678
8679 /* p+1 Session Trace Depth */
8680 proto_tree_add_item(tree, hf_gtpv2_ses_trs_depth, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8681 offset++;
8682
8683
8684 if_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gtpv2_tra_info_trigg, &ti, "List of Interfaces");
8685 /* p+2 Length of List of Interfaces */
8686 proto_tree_add_item_ret_uint(if_tree, hf_gtpv2_list_of_if_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8687 offset++;
8688
8689 if (ev_len > 1) {
8690 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset, 2,
8691 ett_gtpv2_if_mgcs, NULL((void*)0), "MSC Server interfaces");
8692 proto_tree_add_bitmask_list(sub_tree, tvb, offset, 1, ext_tra_info_list_of_if_flags_oct1, ENC_BIG_ENDIAN0x00000000);
8693 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 1, 1, ext_tra_info_list_of_if_flags_oct2, ENC_BIG_ENDIAN0x00000000);
8694 }
8695 if (ev_len > 2) {
8696 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 2, 1,
8697 ett_gtpv2_if_mgw, NULL((void*)0), "MGW interfaces");
8698 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 2, 1, ext_tra_info_list_of_if_flags_oct3, ENC_BIG_ENDIAN0x00000000);
8699 }
8700
8701 if (ev_len > 4) {
8702 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 3, 2,
8703 ett_gtpv2_if_sgsn, NULL((void*)0), "SGSN interfaces");
8704 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 3, 1, ext_tra_info_list_of_if_flags_oct4, ENC_BIG_ENDIAN0x00000000);
8705 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 4, 1, ext_tra_info_list_of_if_flags_oct5, ENC_BIG_ENDIAN0x00000000);
8706 }
8707
8708 if (ev_len > 5) {
8709 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 5, 1,
8710 ett_gtpv2_if_ggsn, NULL((void*)0), "GGSN interfaces");
8711 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 5, 1, ext_tra_info_list_of_if_flags_oct6, ENC_BIG_ENDIAN0x00000000);
8712 }
8713 if (ev_len > 6) {
8714 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 6, 1,
8715 ett_gtpv2_if_rnc, NULL((void*)0), "RNC interfaces");
8716 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 6, 1, ext_tra_info_list_of_if_flags_oct7, ENC_BIG_ENDIAN0x00000000);
8717 }
8718 if (ev_len > 7) {
8719 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 7, 1,
8720 ett_gtpv2_if_bm_sc, NULL((void*)0), "BM-SC interfaces");
8721 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 7, 1, ext_tra_info_list_of_if_flags_oct8, ENC_BIG_ENDIAN0x00000000);
8722 }
8723 if (ev_len > 8) {
8724 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 8, 1,
8725 ett_gtpv2_if_mme, NULL((void*)0), "MME interfaces");
8726 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 8, 1, ext_tra_info_list_of_if_flags_oct9, ENC_BIG_ENDIAN0x00000000);
8727 }
8728 if (ev_len > 9) {
8729 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 9, 1,
8730 ett_gtpv2_if_sgw, NULL((void*)0), "SGW interfaces");
8731 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 9, 1, ext_tra_info_list_of_if_flags_oct10, ENC_BIG_ENDIAN0x00000000);
8732 }
8733 if (ev_len > 10) {
8734 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 10, 1,
8735 ett_gtpv2_if_pdn_gw, NULL((void*)0), "PDN GW interfaces");
8736 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 10, 1, ext_tra_info_list_of_if_flags_oct11, ENC_BIG_ENDIAN0x00000000);
8737 }
8738 if (ev_len > 11) {
8739 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 11, 1,
8740 ett_gtpv2_if_enb, NULL((void*)0), "eNB interfaces");
8741 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct12, ENC_BIG_ENDIAN0x00000000);
8742 }
8743 if (ev_len > 12) {
8744 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 12, 1,
8745 ett_gtpv2_if_hss, NULL((void*)0), "HSS interfaces");
8746 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct13, ENC_BIG_ENDIAN0x00000000);
8747 }
8748 if (ev_len > 13) {
8749 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 13, 1,
8750 ett_gtpv2_if_eir, NULL((void*)0), "EIR interfaces");
8751 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 11, 1, ext_tra_info_list_of_if_flags_oct14, ENC_BIG_ENDIAN0x00000000);
8752 }
8753 if (ev_len > 15) {
8754 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 14, 2,
8755 ett_gtpv2_if_amf, NULL((void*)0), "AMF interfaces");
8756 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 14, 1, ext_tra_info_list_of_if_flags_oct15, ENC_BIG_ENDIAN0x00000000);
8757 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 15, 1, ext_tra_info_list_of_if_flags_oct16, ENC_BIG_ENDIAN0x00000000);
8758 }
8759 if (ev_len > 16) {
8760 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 16, 1,
8761 ett_gtpv2_if_pcf, NULL((void*)0), "PCF interfaces");
8762 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 16, 1, ext_tra_info_list_of_if_flags_oct17, ENC_BIG_ENDIAN0x00000000);
8763 }
8764 if (ev_len > 17) {
8765 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 17, 1,
8766 ett_gtpv2_if_smf, NULL((void*)0), "SMF interfaces");
8767 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 17, 1, ext_tra_info_list_of_if_flags_oct18, ENC_BIG_ENDIAN0x00000000);
8768 }
8769 if (ev_len > 18) {
8770 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 18, 1,
8771 ett_gtpv2_if_upf, NULL((void*)0), "UPF interfaces");
8772 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 18, 1, ext_tra_info_list_of_if_flags_oct19, ENC_BIG_ENDIAN0x00000000);
8773 }
8774 if (ev_len > 19) {
8775 proto_tree* sub_tree = proto_tree_add_subtree(if_tree, tvb, offset + 19, 1,
8776 ett_gtpv2_if_upf, NULL((void*)0), "NG-RAN node interfaces");
8777 proto_tree_add_bitmask_list(sub_tree, tvb, offset + 19, 1, ext_tra_info_list_of_if_flags_oct20, ENC_BIG_ENDIAN0x00000000);
8778 }
8779
8780 proto_item_set_len(ti, ev_len + 1);
8781 offset += ev_len;
8782
8783 /* q+1 Length of IP Address of Trace Collection Entity */
8784 proto_tree_add_item_ret_uint(tree, hf_gtpv2_trs_coll_ip_addr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &ev_len);
8785 offset++;
8786 /*(q+2) to r IP Address of Trace Collection Entity */
8787 if (ev_len == 4) {
8788 proto_tree_add_item(tree, hf_gtpv2_trs_coll_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8789 }
8790
8791 if (ev_len == 16) {
8792 proto_tree_add_item(tree, hf_gtpv2_trs_coll_ipv6_addr, tvb, offset, 16, ENC_NA0x00000000);
8793 }
8794}
8795
8796/* 8.137 Monitoring Event Extension Information */
8797static void
8798dissect_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)))
8799{
8800 unsigned offset = 0;
8801 bool_Bool lrtp;
8802 bool_Bool srie;
8803 uint32_t scef_id_len;
8804
8805 /* Octet 5 Bit 8-3 Spare Bit 2 SRIE Bit 1 LRTP */
8806 proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, offset, 6, ENC_BIG_ENDIAN0x00000000);
8807 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_ext_inf_srie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srie);
8808 proto_tree_add_item_ret_boolean(tree, hf_gtpv2_mon_event_ext_inf_lrtp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &lrtp);
8809 offset++;
8810 /* Octet 6 to 9 SCEF Reference ID */
8811 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_reference_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8812 offset += 4;
8813 /* Octet 10 Length of SCEF ID */
8814 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);
8815 offset++;
8816 /* Octet 11 to k SCEF ID */
8817 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_id, tvb, offset, scef_id_len, ENC_UTF_80x00000002);
8818 offset = offset + scef_id_len;
8819 if (lrtp) {
8820 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8821 offset += 4;
8822 }
8823
8824 if (srie) {
8825 proto_tree_add_item(tree, hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
8826 offset += 8;
8827 }
8828
8829 if(offset < length){
8830 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
8831 }
8832}
8833
8834/* 207 Additional RRM Policy Index Fixed Length / 8.138 */
8835static void
8836dissect_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)))
8837{
8838 uint32_t rrm_policy_index;
8839
8840 /*5 to 8 Additional RRM Policy Index, The ARPI is encoded as Unsigned32 binary integer values.*/
8841 proto_tree_add_item_ret_uint(tree, hf_gtpv2_additional_rrm_policy_index, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &rrm_policy_index);
8842 proto_item_append_text(item, "%u", rrm_policy_index);
8843}
8844
8845/* 208 V2X Context Extendable / 8.139 */
8846static void
8847dissect_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)))
8848{
8849 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8850}
8851
8852/* 209 PC5 QoS Parameters Extendable / 8.140 */
8853static void
8854dissect_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)))
8855{
8856 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8857}
8858
8859/* 210 Services Authorized Extendable / 8.141 */
8860static void
8861dissect_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)))
8862{
8863 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8864}
8865
8866/* 211 Bit Rate Extendable / 8.142 */
8867static void
8868dissect_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)))
8869{
8870 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8871}
8872
8873/* 212 PC5 QoS Flow Extendable / 8.143 */
8874static void
8875dissect_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)))
8876{
8877 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8878}
8879
8880/* 213 SGi PtP Tunnel Address Extendable / 8.144 */
8881static void
8882dissect_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)))
8883{
8884 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length);
8885}
8886
8887/* 214 PGW Change Info Extendable / 8.145 */
8888static void
8889dissect_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)
8890{
8891 unsigned offset = 0;
8892 proto_tree *grouped_tree;
8893 tvbuff_t *new_tvb;
8894
8895 proto_item_append_text(item, "[Grouped IE]");
8896 grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PGW_change_info);
8897 new_tvb = tvb_new_subset_length(tvb, offset, length);
8898
8899 dissect_gtpv2_ie_common(new_tvb, pinfo, grouped_tree, offset, message_type, args, GTPV2_IE_PGW_CHANGE_INFO214);
8900}
8901
8902/* 215 PGW FQDN Extendable / 8.146 */
8903static void
8904dissect_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)))
8905{
8906 unsigned offset = 0;
8907 offset = decode_gtpv2_fqdn(tvb, pinfo, tree, item, offset, length);
8908
8909 if(offset < length){
8910 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length- offset);
8911 }
8912}
8913
8914/* 216 Group Id / 8.147 */
8915static void
8916dissect_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)))
8917{
8918 proto_tree_add_item(tree, hf_gtpv2_group_id, tvb, 0, length, ENC_UTF_80x00000002);
8919}
8920
8921/* 217 PSCell Id / 8.148 */
8922static void
8923dissect_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)))
8924{
8925 unsigned offset = 0;
8926
8927 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true1);
8928 offset += 3;
8929 proto_tree_add_item(tree, hf_gtpv2_ie_pscell_id_spare, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
8930 proto_tree_add_item(tree, hf_gtpv2_ie_pscell_id_nr_cgi, tvb, offset, 5, ENC_BIG_ENDIAN0x00000000);
8931
8932}
8933
8934/* 218 UP Security Policy / 8.149 */
8935static const value_string gtpv2_up_ip_policy_vals[] = {
8936 {0, "User Plane Integrity protection with EPS is not needed"},
8937 {1, "User Plane Integrity protection with EPS is preferred"},
8938 {2, "User Plane Integrity protection with EPS is required"},
8939 {3, "Spare"},
8940 {0, NULL((void*)0)}
8941};
8942
8943static void
8944dissect_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)))
8945{
8946 proto_tree_add_item(tree, hf_gtpv2_ie_up_security_policy_spare, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
8947 proto_tree_add_item(tree, hf_gtpv2_ie_up_security_policy_up_ip_policy, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000);
8948 if (length > 2) {
8949 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 1, length - 2);
8950 }
8951}
8952
8953/* 219 Alternative IMSI / 8.150 */
8954static void
8955dissect_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)
8956{
8957 /*
8958 * TS 29.274 V18.4.0 says:
8959 * Alternative IMSI is in the form of an IMSI as defined in 3GPP TS 23.003.
8960 */
8961 dissect_gtpv2_imsi(tvb, pinfo, tree, item, length, message_type, instance, args);
8962}
8963
8964/* 220 NF Instance ID / 8.151 */
8965static void
8966dissect_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)))
8967{
8968 /*
8969 * String uniquely identifying a NF instance. The format of the NF Instance ID shall be a
8970 * Universally Unique Identifier (UUID) version 4, as described in IETF RFC 4122 [15]. The
8971 * hexadecimal letters should be formatted as lower-case characters by the sender, and they
8972 * shall be handled as case-insensitive by the receiver.
8973 *
8974 * Example: "4ace9d34-2c69-4f99-92d5-a73a3fe8e23b"
8975 */
8976 proto_tree_add_item(tree, hf_gtpv2_nf_instance_id_nf_instance_id, tvb, 0, 36, ENC_BIG_ENDIAN0x00000000);
8977}
8978
8979/* 221 Timer in Seconds / 8.152 */
8980static void
8981dissect_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)))
8982{
8983 proto_tree_add_item(tree, hf_gtpv2_nf_timer_in_seconds_timer_value, tvb, 0, 3, ENC_BIG_ENDIAN0x00000000);
8984 if (length > 4) {
8985 proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 3, length - 4);
8986 }
8987}
8988
8989/* Table 8.1-1: Information Element types for GTPv2 */
8990
8991typedef struct _gtpv2_ie {
8992 int ie_type;
8993 void (*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, uint16_t, uint8_t, uint8_t, session_args_t *);
8994} gtpv2_ie_t;
8995
8996static const gtpv2_ie_t gtpv2_ies[] = {
8997 {GTPV2_IE_IMSI1, dissect_gtpv2_imsi}, /* 1, Internal Mobile Subscriber Identity (IMSI) */
8998 {GTPV2_IE_CAUSE2, dissect_gtpv2_cause}, /* 2, Cause (without embedded offending IE) 8.4 */
8999 {GTPV2_REC_REST_CNT3, dissect_gtpv2_recovery}, /* 3, Recovery (Restart Counter) 8.5 */
9000 /* 4-50 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */
9001 /*Start SRVCC Messages 3GPP TS 29.280 */
9002 {GTPV2_IE_STN_SR51, dissect_gtpv2_stn_sr}, /* 51 STN-SR */
9003 {GTPV2_IE_SRC_TGT_TRANS_CON52, dissect_gtpv2_src_tgt_trans_con}, /* 52 Source to Target Transparent Container */
9004 {GTPV2_IE_TGT_SRC_TRANS_CON53 , dissect_gtpv2_tgt_src_trans_con}, /* 53 Target to Source Transparent Container */
9005 {GTPV2_IE_MM_CON_EUTRAN_SRVCC54, dissect_gtpv2_mm_con_eutran_srvcc}, /* 54 MM Context for E-UTRAN SRVCC */
9006 {GTPV2_IE_MM_CON_UTRAN_SRVCC55, dissect_gtpv2_mm_con_utran_srvcc}, /* 55 MM Context for UTRAN SRVCC */
9007 {GTPV2_IE_SRVCC_CAUSE56, dissect_gtpv2_srvcc_cause}, /* 56 SRVCC Cause */
9008 {GTPV2_IE_TGT_RNC_ID57, dissect_gtpv2_tgt_rnc_id}, /* 57 Target RNC ID */
9009 {GTPV2_IE_TGT_GLOGAL_CELL_ID58, dissect_gtpv2_tgt_global_cell_id}, /* 58 Target Global Cell ID */
9010 {GTPV2_IE_TEID_C59, dissect_gtpv2_teid_c}, /* 59 TEID-C */
9011 {GTPV2_IE_SV_FLAGS60, dissect_gtpv2_sv_flags}, /* 60 Sv Flags */
9012 {GTPV2_IE_SAI61, dissect_gtpv2_sai}, /* 61 Service Area Identifier */
9013 {GTPV2_IE_MM_CTX_FOR_CS_TO_PS_SRVCC62, dissect_gtpv2_mm_ctx_for_cs_to_ps_srvcc }, /* 62 Service Area Identifier */
9014 /* 61-70 Reserved for Sv interface Extendable / See 3GPP TS 29.280 [15] */
9015 {GTPV2_APN71, dissect_gtpv2_apn}, /* 71, Access Point Name (APN) 8.6 */
9016 {GTPV2_AMBR72, dissect_gtpv2_ambr}, /* 72, Aggregate Maximum Bit Rate (AMBR) */
9017 {GTPV2_EBI73, dissect_gtpv2_ebi}, /* 73, EPS Bearer ID (EBI) 8.8 */
9018 {GTPV2_IP_ADDRESS74, dissect_gtpv2_ip_address}, /* 74, IP Address */
9019 {GTPV2_MEI75, dissect_gtpv2_mei}, /* 74, Mobile Equipment Identity */
9020 {GTPV2_IE_MSISDN76, dissect_gtpv2_msisdn}, /* 76, MSISDN 8.11 */
9021 {GTPV2_INDICATION77, dissect_gtpv2_ind}, /* 77 Indication 8.12 */
9022 {GTPV2_PCO78, dissect_gtpv2_pco}, /* 78 Protocol Configuration Options (PCO) 8.13 */
9023 {GTPV2_PAA79, dissect_gtpv2_paa}, /* 79 PDN Address Allocation (PAA) 8.14 */
9024 {GTPV2_BEARER_QOS80, dissect_gtpv2_bearer_qos}, /* 80 Bearer Level Quality of Service (Bearer QoS) 8.15 */
9025 {GTPV2_IE_FLOW_QOS81, dissect_gtpv2_flow_qos}, /* 81 Flow Quality of Service (Flow QoS) 8.16 */
9026 {GTPV2_IE_RAT_TYPE82, dissect_gtpv2_rat_type}, /* 82, RAT Type 8.17 */
9027 {GTPV2_IE_SERV_NET83, dissect_gtpv2_serv_net}, /* 83, Serving Network 8.18 */
9028 {GTPV2_IE_BEARER_TFT84, dissect_gtpv2_bearer_tft}, /* 84, Bearer TFT 8.19 */
9029 {GTPV2_IE_TAD85, dissect_gtpv2_tad}, /* 85, Traffic Aggregate Description 8.20 */
9030 {GTPV2_IE_ULI86, dissect_gtpv2_uli}, /* 86, User Location Info (ULI) 8.22 */
9031 {GTPV2_IE_F_TEID87, dissect_gtpv2_f_teid}, /* 87, Fully Qualified Tunnel Endpoint Identifier (F-TEID) 8.23 */
9032 {GTPV2_IE_TMSI88, dissect_gtpv2_tmsi}, /* 88, TMSI 8.23 */
9033 {GTPV2_IE_GLOBAL_CNID89, dissect_gtpv2_g_cn_id}, /* 89, Global CN-Id 8.25 */
9034 {GTPV2_IE_S103PDF90, dissect_gtpv2_s103pdf}, /* 90, S103 PDN Data Forwarding Info (S103PDF) 8.25 */
9035 {GTPV2_IE_S1UDF91, dissect_gtpv2_s1udf}, /* 91, S1-U Data Forwarding (S1UDF) 8.26 */
9036 {GTPV2_IE_DEL_VAL92, dissect_gtpv2_delay_value}, /* 92, Delay Value 8.29 */
9037 {GTPV2_IE_BEARER_CTX93, dissect_gtpv2_bearer_ctx}, /* 93, Bearer Context 8.31 */
9038 {GTPV2_IE_CHAR_ID94, dissect_gtpv2_charging_id}, /* 94, Charging Id */
9039 {GTPV2_IE_CHAR_CHAR95, dissect_gtpv2_char_char}, /* 95 Charging Characteristic */
9040 {GTPV2_IE_TRA_INFO96, dissect_gtpv2_tra_info}, /* 96, Trace Information 8.31 */
9041 {GTPV2_BEARER_FLAG97, dissect_gtpv2_bearer_flag}, /* 97, Bearer Flag */
9042 /* 98, Void 8.33 */
9043 {GTPV2_IE_PDN_TYPE99, dissect_gtpv2_pdn_type}, /* 99, PDN Type */
9044 {GTPV2_IE_PTI100, dissect_gtpv2_pti}, /* 100, Procedure Transaction Id */
9045 {GTPV2_IE_DRX_PARAM101, dissect_gtpv2_drx_param}, /* 101, DRX Parameter 8.36 */
9046 {GTPV2_IE_UE_NET_CAPABILITY102, dissect_gtpv2_ue_net_capability}, /* 102, UE network capability 8.37 */
9047 {GTPV2_IE_MM_CONTEXT_GSM_T103, dissect_gtpv2_mm_context_gsm_t}, /* 103, MM Context 8.38 GSM Key and Triplets */
9048 {GTPV2_IE_MM_CONTEXT_UTMS_CQ104, dissect_gtpv2_mm_context_utms_cq}, /* 104, MM Context 8.38 */
9049 {GTPV2_IE_MM_CONTEXT_GSM_CQ105, dissect_gtpv2_mm_context_gsm_cq}, /* 105, MM Context 8.38 */
9050 {GTPV2_IE_MM_CONTEXT_UTMS_Q106, dissect_gtpv2_mm_context_utms_q}, /* 106, MM Context 8.38 */
9051 {GTPV2_IE_MM_CONTEXT_EPS_QQ107, dissect_gtpv2_mm_context_eps_qq}, /* 107, MM Context 8.38 */
9052 {GTPV2_IE_MM_CONTEXT_UTMS_QQ108, dissect_gtpv2_mm_context_utms_qq}, /* 108, MM Context 8.38 */
9053 {GTPV2_IE_PDN_CONNECTION109, dissect_gtpv2_PDN_conn}, /* 109, PDN Connection */
9054 {GTPV2_IE_PDN_NUMBERS110, dissect_gtpv2_pdn_numbers}, /* 110, PDN Numbers 8.40 */
9055 {GTPV2_IE_P_TMSI111, dissect_gtpv2_p_tmsi}, /* 111, P-TMSI 8.41 */
9056 {GTPV2_IE_P_TMSI_SIG112, dissect_gtpv2_p_tmsi_sig}, /* 112, P-TMSI Signature 8.42 */
9057 {GTPV2_IE_HOP_COUNTER113, dissect_gtpv2_hop_counter}, /* 113, Hop Counter 8.43 */
9058 {GTPV2_IE_UE_TIME_ZONE114, dissect_gtpv2_ue_time_zone}, /* 114, UE Time Zone */
9059 {GTPV2_IE_TRACE_REFERENCE115, dissect_gtpv2_trace_reference}, /* 115, Trace Reference 8.45 */
9060 {GTPV2_IE_COMPLETE_REQUEST_MSG116, dissect_complete_request_msg}, /* 116, Complete Request message 8.46 */
9061 {GTPV2_IE_GUTI117, dissect_gtpv2_guti}, /* 117, GUTI 8.47 */
9062 {GTPV2_IE_F_CONTAINER118, dissect_gtpv2_F_container}, /* 118, Fully Qualified Container (F-Container) */
9063 {GTPV2_IE_F_CAUSE119, dissect_gtpv2_F_cause}, /* 119, Fully Qualified Cause (F-Cause) */
9064 {GTPV2_IE_PLMN_ID120, dissect_gtpv2_plmn_id}, /* 120, PLMN ID 8.50 */
9065 {GTPV2_IE_TARGET_ID121, dissect_gtpv2_target_id}, /* 121, Target Identification */
9066 /* 122, Void 8.52 */
9067 {GTPV2_IE_PKT_FLOW_ID123, dissect_gtpv2_pkt_flow_id}, /* 123, Packet Flow ID 8.53 */
9068 {GTPV2_IE_RAB_CONTEXT124, dissect_gtpv2_rab_context}, /* 124, RAB Context 8.54 */
9069 {GTPV2_IE_S_RNC_PDCP_CTX_INFO125, dissect_gtpv2_s_rnc_pdcp_ctx_info}, /* 125, Source RNC PDCP context info 8.55 */
9070 {GTPV2_IE_PORT_NR126, dissect_port_nr}, /* 126, Port Number 8.56 */
9071 {GTPV2_IE_APN_RESTRICTION127, dissect_gtpv2_apn_rest}, /* 127, APN Restriction */
9072 {GTPV2_IE_SEL_MODE128, dissect_gtpv2_selec_mode}, /* 128, Selection Mode */
9073 {GTPV2_IE_SOURCE_IDENT129, dissect_gtpv2_source_ident}, /* 129, Source Identification 8.59 */
9074 {GTPV2_IE_BEARER_CONTROL_MODE130, dissect_gtpv2_bearer_control_mode}, /* 130, Bearer Control Mode */
9075 {GTPV2_IE_CNG_REP_ACT131 , dissect_gtpv2_cng_rep_act}, /* 131, Change Reporting Action 8.61 */
9076 {GTPV2_IE_FQ_CSID132, dissect_gtpv2_fq_csid}, /* 132, Fully Qualified PDN Connection Set Identifier (FQ-CSID) 8.62 */
9077 {GTPV2_IE_CHANNEL_NEEDED133, dissect_gtpv2_channel_needed}, /* 133, Channel Needed 8.63 */
9078 {GTPV2_IE_EMLPP_PRI134, dissect_gtpv2_emlpp_pri}, /* 134, eMLPP Priority 8.64 */
9079 {GTPV2_IE_NODE_TYPE135 , dissect_gtpv2_node_type}, /* 135, Node Type 8.65 */
9080 {GTPV2_IE_FQDN136, dissect_gtpv2_fqdn}, /* 136, 8.66 Fully Qualified Domain Name (FQDN) */
9081 {GTPV2_IE_TI137, dissect_gtpv2_ti}, /* 137, 8.68 Transaction Identifier (TI) */
9082 {GTPV2_IE_MBMS_SESSION_DURATION138, dissect_gtpv2_mbms_session_duration}, /* 138, 8.69 MBMS Session Duration */
9083 {GTPV2_IE_MBMS_SERVICE_AREA139, dissect_gtpv2_mbms_service_area}, /* 139, 8.70 MBMS Service Area */
9084 {GTPV2_IE_MBMS_SESSION_ID140, dissect_gtpv2_mbms_session_id}, /* 140, 8.71 MBMS Session Identifier */
9085 {GTPV2_IE_MBMS_FLOW_ID141, dissect_gtpv2_mbms_flow_id}, /* 141, 8.72 MBMS Flow Identifier */
9086 {GTPV2_IE_MBMS_IP_MC_DIST142, dissect_gtpv2_mbms_ip_mc_dist}, /* 142, 8.73 MBMS IP Multicast Distribution */
9087 {GTPV2_IE_MBMS_DIST_ACK143, dissect_gtpv2_mbms_dist_ack}, /* 143, 8.74 MBMS Distribution Acknowledge */
9088 {GTPV2_IE_RFSP_INDEX144, dissect_gtpv2_rfsp_index}, /* 144, 8.77 RFSP Index */
9089 {GTPV2_IE_UCI145, dissect_gtpv2_uci}, /* 145, 8.75 User CSG Information (UCI) */
9090 {GTPV2_IE_CSG_INFO_REP_ACTION146, dissect_gtpv2_csg_info_rep_action}, /* 146, 8.76 CSG Information Reporting Action */
9091 {GTPV2_IE_CSG_ID147, dissect_gtpv2_csg_id}, /* 147, 8.78 CSG ID */
9092 {GTPV2_IE_CMI148, dissect_gtpv2_cmi}, /* 148, 8.79 CSG Membership Indication (CMI) */
9093 {GTPV2_IE_SERVICE_INDICATOR149, dissect_gtpv2_service_indicator}, /* 149, 8.80 Service indicator */
9094 {GTPV2_IE_DETACH_TYPE150, dissect_gtpv2_detach_type}, /* 150, 8.81 Detach Type */
9095 {GTPV2_IE_LDN151, dissect_gtpv2_ldn}, /* 151, 8.82 Local Distinguished Name (LDN) */
9096 {GTPV2_IE_NODE_FEATURES152, dissect_gtpv2_node_features}, /* 152, 8.83 Node Features */
9097 {GTPV2_IE_MBMS_TIME_TO_DATA_XFER153, dissect_gtpv2_mbms_time_to_data_xfer}, /* 153, 8.84 MBMS Time to Data Transfer */
9098 {GTPV2_IE_THROTTLING154, dissect_gtpv2_throttling}, /* 154, 8.85 Throttling */
9099 {GTPV2_IE_ARP155, dissect_gtpv2_arp}, /* 155, 8.86 Allocation/Retention Priority (ARP) */
9100 {GTPV2_IE_EPC_TIMER156, dissect_gtpv2_epc_timer}, /* 156, 8.87 EPC Timer */
9101 {GTPV2_IE_SIG_PRIO_IND157, dissect_gtpv2_sig_prio_ind}, /* 157, 8.88 Signalling Priority Indication */
9102 {GTPV2_IE_TMGI158, dissect_gtpv2_tmgi}, /* 158, 8.89 Temporary Mobile Group Identity (TMGI) */
9103 {GTPV2_IE_ADD_MM_CONT_FOR_SRVCC159, dissect_gtpv2_add_mm_cont_for_srvcc}, /* 159, 8.90 Additional MM context for SRVCC */
9104 {GTPV2_IE_ADD_FLAGS_FOR_SRVCC160, dissect_gtpv2_add_flags_for_srvcc}, /* 160, 8.91 Additional flags for SRVCC */
9105 {GTPV2_IE_MMBR161, dissect_gtpv2_mmbr}, /* 161, 8.92 Max MBR/APN-AMBR (MMBR) */
9106 {GTPV2_IE_MDT_CONFIG162, dissect_gtpv2_mdt_config}, /* 162, 8.93 MDT Configuration */
9107 {GTPV2_IE_APCO163, dissect_gtpv2_apco}, /* 163, 8.94 Additional Protocol Configuration Options (APCO) */
9108 {GTPV2_IE_ABS_MBMS_DATA_TF_TIME164, dissect_gtpv2_abs_mbms_data_tf_time}, /* 164, 8.95 Absolute Time of MBMS Data Transfer */
9109 {GTPV2_IE_HENB_INFO_REPORT165, dissect_gtpv2_henb_info_report}, /* 165, 8.96 H(e)NB Information Reporting */
9110 {GTPV2_IE_IP4CP166, dissect_gtpv2_ip4cp}, /* 166, 8.97 IPv4 Configuration Parameters (IPv4CP) */
9111 {GTPV2_IE_CHANGE_TO_REPORT_FLAGS167, dissect_gtpv2_change_report_flags}, /* 167, 8.98 Change to Report Flags */
9112 {GTPV2_IE_ACTION_INDICATION168, dissect_gtpv2_action_indication}, /* 168, 8.99 Action Indication */
9113 {GTPV2_IE_TWAN_IDENTIFIER169, dissect_gtpv2_twan_identifier}, /* 169, 8.100 TWAN Identifier */
9114 {GTPV2_IE_ULI_TIMESTAMP170, dissect_gtpv2_uli_timestamp}, /* 170, 8.101 ULI Timestamp */
9115 {GTPV2_IE_MBMS_FLAGS171, dissect_gtpv2_mbms_flags}, /* 171, 8.102 MBMS Flags */
9116 {GTPV2_IE_RAN_NAS_CAUSE172, dissect_gtpv2_ran_nas_cause}, /* 172, 8.103 RAN/NAS Cause */
9117 {GTPV2_IE_CN_OP_SEL_ENT173, dissect_gtpv2_cn_operator_selection_entity}, /* 173, 8.104 CN Operator Selection Entity */
9118 {GTPV2_IE_TRUST_WLAN_MODE_IND174, dissect_gtpv2_trust_wlan_mode_ind}, /* 174, 8.105 Trusted WLAN Mode Indication */
9119 {GTPV2_IE_NODE_NUMBER175, dissect_gtpv2_node_number}, /* 175, 8.106 Node Number */
9120 {GTPV2_IE_NODE_IDENTIFIER176, dissect_gtpv2_node_identifier}, /* 176, 8.107 Node Identifier */
9121 {GTPV2_IE_PRES_REP_AREA_ACT177, dissect_gtpv2_pres_rep_area_action}, /* 177, 8.108 Presence Reporting Area Action */
9122 {GTPV2_IE_PRES_REP_AREA_INF178, dissect_gtpv2_pres_rep_area_information}, /* 178, 8.109 Presence Reporting Area Information */
9123 {GTPV2_IE_TWAN_ID_TS179, dissect_gtpv2_twan_identifier_timestamp}, /* 179, 8.110 TWAN Identifier Timestamp */
9124 {GTPV2_IE_OVERLOAD_CONTROL_INF180, dissect_gtpv2_overload_control_inf}, /* 180, 8.111 Overload Control Information */
9125 {GTPV2_IE_LOAD_CONTROL_INF181, dissect_gtpv2_load_control_inf}, /* 181, 8.112 Load Control Information */
9126 {GTPV2_IE_METRIC182, dissect_gtpv2_metric}, /* 182, 8.113 Metric */
9127 {GTPV2_IE_SEQ_NO183, dissect_gtpv2_seq_no}, /* 183, 8.114 Sequence Number */
9128 {GTPV2_IE_APN_AND_REL_CAP184, dissect_gtpv2_apn_and_relative_capacity}, /* 184, 8.115 APN and Relative Capacity */
9129 {GTPV2_IE_WLAN_OFFLOADABILITY_IND185,dissect_gtpv2_unknown }, /* 185, 8.116 WLAN Offloadability Indication */
9130
9131 {GTPV2_IE_PAGING_AND_SERVICE_INF186, dissect_gtpv2_paging_and_service_inf}, /* 186, 8.117 Paging and Service Information */
9132 {GTPV2_IE_INTEGER_NUMBER187, dissect_gtpv2_integer_number}, /* 187, 8.118 Integer Number */
9133 {GTPV2_IE_MILLISECOND_TS188, dissect_gtpv2_ms_ts}, /* 188, 8.119 Millisecond Time Stamp */
9134 {GTPV2_IE_MON_EVENT_INF189, dissect_gtpv2_mon_event_inf}, /* 189, 8.120 Monitoring Event Information */
9135 /* 190, 8.121 ECGI List */
9136 /* 191, 8.122 Remote UE Context */
9137 /* 192, 8.123 Remote User ID */
9138 /* 193, 8.124 Remote UE IP Information */
9139 {GTPV2_IE_CIOT_OPT_SUPPORT_IND194, dissect_gtpv2_ciot_opt_support_ind}, /* 194, 8.125 CIoT Optimizations Support Indication */
9140 {GTPV2_IE_SCEF_PDN_CONNECTION195 , dissect_gtpv2_scef_pdn_connection }, /* 195, 8.126 SCEF PDN Connection */
9141 {GTPV2_IE_HEADER_COMP_CONF196, dissect_gtpv2_header_comp_comf}, /* 196, 8.127 Header Compression Configuration */
9142 {GTPV2_IE_EXTENDED_PCO197, dissect_gtpv2_pco}, /* 197, 8.128 Extended Protocol Configuration Options (ePCO) */
9143 {GTPV2_IE_SERV_PLMN_RATE_CONTROL198, dissect_gtpv2_serv_plmn_rate_control}, /* 198, 8.129 Serving PLMN Rate Control */
9144 {GTPV2_IE_COUNTER199, dissect_gtpv2_counter}, /* 199, 8.130 Counter */
9145 {GTPV2_IE_MAPPED_UE_USAGE_TYPE200, dissect_gtpv2_mapped_ue_usage_type }, /* 199, 8.131 Mapped UE Usage Type */
9146 {GTPV2_IE_SECONDARY_RAT_USAGE_DATA_REPORT201, dissect_gtpv2_secondary_rat_usage_data_report}, /* 201, 8.132 Secondary RAT Usage Data Report */
9147 {GTPV2_IE_UP_FUNC_SEL_INDI_FLG202, dissect_gtpv2_up_func_slec_indic_flg }, /* 202, 8.133 UP Function Selection Indication Flags */
9148 {GTPV2_IE_MAX_PKT_LOSS_RTE203, dissect_gtpv2_max_pkt_loss_rte }, /* 203, 8.134 Maximum Packet Loss Rate */
9149 {GTPV2_IE_APN_RTE_CNTRL_STATUS204, dissect_gtpv2_apn_rte_cntrl_status }, /* 204, 8.135 APN Rate Control Status */
9150 {GTPV2_IE_EXT_TRS_INF205, dissect_gtpv2_ext_trs_inf }, /* 205, 8.136 Extended Trace Information */
9151 {GTPV2_IE_MON_EVENT_EXT_INF206, dissect_gtpv2_ie_mon_event_ext_inf }, /* 206, 8.137 Monitoring Event Extension Information */
9152 {GTPV2_IE_ADDITIONAL_RRM_POLICY_INDEX207, dissect_gtpv2_ie_additional_rrm_policy_index }, /* 207 Additional RRM Policy Index Fixed Length / 8.138 */
9153 {GTPV2_IE_V2X_CONTEXT208, dissect_gtpv2_ie_v2x_context }, /* 208 V2X Context Extendable / 8.139 */
9154 {GTPV2_IE_PC5_QOS_PARAMETERS209, dissect_gtpv2_ie_pc5_qos_parameters }, /* 209 PC5 QoS Parameters Extendable / 8.140 */
9155 {GTPV2_IE_SERVICES_AUTHORIZED210, dissect_gtpv2_ie_services_authorized }, /* 210 Services Authorized Extendable / 8.141 */
9156 {GTPV2_IE_BIT_RATE211, dissect_gtpv2_ie_bit_rate }, /* 211 Bit Rate Extendable / 8.142 */
9157 {GTPV2_IE_PC5_QOS_FLOW212, dissect_gtpv2_ie_pc5_qos_flow }, /* 212 PC5 QoS Flow Extendable / 8.143 */
9158 {GTPV2_IE_SGI_PTP_TUNNEL_ADDRESS213, dissect_gtpv2_ie_sgi_ptp_tunnel_address }, /* 213 SGi PtP Tunnel Address Extendable / 8.144 */
9159 {GTPV2_IE_PGW_CHANGE_INFO214, dissect_gtpv2_ie_pgw_change_info }, /* 214 PGW Change Info Extendable / 8.145 */
9160 {GTPV2_IE_PGW_FQDN215, dissect_gtpv2_ie_pgw_fqdn }, /* 215 PGW FQDN Extendable / 8.146 */
9161 {GTPV2_IE_GROUP_ID216, dissect_gtpv2_ie_group_id }, /* 216 Group Id Variable Length / 8.147 */
9162 {GTPV2_IE_PSCELL_ID217, dissect_gtpv2_ie_pscell_id }, /* 217 PSCell Id Fixed Length / 8.148 */
9163 {GTPV2_IE_UP_SECURITY_POLICY218, dissect_gtpv2_ie_up_security_policy }, /* 218 UP Security Policy Extendable / 8.149 */
9164 {GTPV2_IE_ALT_IMSI219, dissect_gtpv2_ie_alternative_imsi }, /* 219 Alternative IMSI Variable Length / 8.150 */
9165 {GTPV2_IE_NF_INSTANCE_ID220, dissect_gtpv2_ie_nf_instance_id }, /* 220 NF Instance ID*/
9166 {GTPV2_IE_TIMER_IN_SECONDS221, dissect_gtpv2_timer_in_seconds }, /* 221 Timer in Seconds*/
9167 {GTPV2_IE_PRIVATE_EXT255, dissect_gtpv2_private_ext },
9168 {0, dissect_gtpv2_unknown}
9169};
9170
9171static gtpv2_msg_hash_t *
9172gtpv2_match_response(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned seq_nr, unsigned msgtype, gtpv2_conv_info_t *gtpv2_info, uint8_t last_cause)
9173{
9174 gtpv2_msg_hash_t gcr, *gcrp = NULL((void*)0);
9175 conversation_t *conv;
9176 uint32_t session;
9177
9178 gcr.seq_nr = seq_nr;
9179 gcr.req_time = pinfo->abs_ts;
9180
9181 switch (msgtype) {
9182 case GTPV2_CREATE_SESSION_REQUEST32:
9183 case GTPV2_CREATE_BEARER_REQUEST95:
9184 case GTPV2_UPDATE_BEARER_REQUEST97:
9185 case GTPV2_MODIFY_BEARER_REQUEST34:
9186 case GTPV2_DELETE_BEARER_REQUEST99:
9187 case GTPV2_DELETE_SESSION_REQUEST36:
9188 case GTPV2_MODIFY_BEARER_COMMAND64:
9189 case GTPV2_DELETE_BEARER_COMMAND66:
9190 case GTPV2_BEARER_RESOURCE_COMMAND68:
9191 case GTPV2_SRVCC_PS_TO_CS_REQUEST25:
9192 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27:
9193 case GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29:
9194 case GTPV2_CONTEXT_REQUEST130:
9195 case GTPV2_FORWARD_RELOCATION_REQ133:
9196 case GTPV2_RELOCATION_CANCEL_REQUEST139:
9197 case GTPV2_FORWARD_CTX_NOTIFICATION137:
9198 case GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135:
9199 case GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170:
9200 case GTPV2_DL_DATA_NOTIF176:
9201 gcr.is_request = true1;
9202 gcr.req_frame = pinfo->num;
9203 gcr.rep_frame = 0;
9204
9205 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9206 gcr.conv_id = conv->conv_index;
9207
9208 break;
9209 case GTPV2_CREATE_SESSION_RESPONSE33:
9210 case GTPV2_CREATE_BEARER_RESPONSE96:
9211 case GTPV2_UPDATE_BEARER_RESPONSE98:
9212 case GTPV2_MODIFY_BEARER_RESPONSE35:
9213 case GTPV2_DELETE_BEARER_RESPONSE100:
9214 case GTPV2_DELETE_SESSION_RESPONSE37:
9215 case GTPV2_MODIFY_BEARER_FAILURE_INDICATION65:
9216 case GTPV2_DELETE_BEARER_FAILURE_INDICATION67:
9217 case GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69:
9218 case GTPV2_SRVCC_PS_TO_CS_RESPONSE26:
9219 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28:
9220 case GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30:
9221 case GTPV2_CONTEXT_RESPONSE131:
9222 case GTPV2_FORWARD_RELOCATION_RESP134:
9223 case GTPV2_RELOCATION_CANCEL_RESPONSE140:
9224 case GTPV2_FORWARD_CTX_ACKNOWLEDGE138:
9225 case GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136:
9226 case GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171:
9227 case GTPV2_DL_DATA_NOTIF_ACK177:
9228
9229 gcr.is_request = false0;
9230 gcr.req_frame = 0;
9231 gcr.rep_frame = pinfo->num;
9232
9233 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9234 gcr.conv_id = conv->conv_index;
9235
9236 break;
9237 default:
9238 gcr.is_request = false0;
9239 gcr.req_frame = 0;
9240 gcr.rep_frame = 0;
9241 gcr.conv_id = 0;
9242 break;
9243 }
9244
9245 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->matched, &gcr);
9246
9247 if (gcrp) {
9248 gcrp->is_request = gcr.is_request;
9249 } else {
9250 /*no match, let's try to make one*/
9251 switch (msgtype) {
9252 case GTPV2_CREATE_SESSION_REQUEST32:
9253 case GTPV2_CREATE_BEARER_REQUEST95:
9254 case GTPV2_UPDATE_BEARER_REQUEST97:
9255 case GTPV2_MODIFY_BEARER_REQUEST34:
9256 case GTPV2_DELETE_BEARER_REQUEST99:
9257 case GTPV2_DELETE_SESSION_REQUEST36:
9258 case GTPV2_MODIFY_BEARER_COMMAND64:
9259 case GTPV2_DELETE_BEARER_COMMAND66:
9260 case GTPV2_BEARER_RESOURCE_COMMAND68:
9261 case GTPV2_SRVCC_PS_TO_CS_REQUEST25:
9262 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_NOTIFICATION27:
9263 case GTPV2_SRVCC_PS_TO_CS_CANCEL_NOTIFICATION29:
9264 case GTPV2_CONTEXT_REQUEST130:
9265 case GTPV2_FORWARD_RELOCATION_REQ133:
9266 case GTPV2_RELOCATION_CANCEL_REQUEST139:
9267 case GTPV2_FORWARD_CTX_NOTIFICATION137:
9268 case GTPV2_FORWARD_RELOCATION_COMPLETE_NOTIFICATION135:
9269 case GTPV2_RELEASE_ACCESS_BEARERS_REQUEST170:
9270 case GTPV2_DL_DATA_NOTIF176:
9271
9272 gcr.seq_nr = seq_nr;
9273
9274 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->unmatched, &gcr);
9275 if (gcrp) {
9276 wmem_map_remove(gtpv2_info->unmatched, gcrp);
9277 }
9278 /* if we can't reuse the old one, grab a new chunk */
9279 if (!gcrp) {
9280 gcrp = wmem_new(wmem_file_scope(), gtpv2_msg_hash_t)((gtpv2_msg_hash_t*)wmem_alloc((wmem_file_scope()), sizeof(gtpv2_msg_hash_t
)))
;
9281 }
9282 gcrp->seq_nr = seq_nr;
9283 gcrp->req_frame = pinfo->num;
9284 gcrp->req_time = pinfo->abs_ts;
9285 gcrp->rep_frame = 0;
9286 gcrp->msgtype = msgtype;
9287 gcrp->is_request = true1;
9288
9289 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9290 gcrp->conv_id = conv->conv_index;
9291
9292 wmem_map_insert(gtpv2_info->unmatched, gcrp, gcrp);
9293 return NULL((void*)0);
9294 case GTPV2_CREATE_SESSION_RESPONSE33:
9295 case GTPV2_CREATE_BEARER_RESPONSE96:
9296 case GTPV2_UPDATE_BEARER_RESPONSE98:
9297 case GTPV2_MODIFY_BEARER_RESPONSE35:
9298 case GTPV2_DELETE_BEARER_RESPONSE100:
9299 case GTPV2_DELETE_SESSION_RESPONSE37:
9300 case GTPV2_MODIFY_BEARER_FAILURE_INDICATION65:
9301 case GTPV2_DELETE_BEARER_FAILURE_INDICATION67:
9302 case GTPV2_BEARER_RESOURCE_FAILURE_INDICATION69:
9303 case GTPV2_SRVCC_PS_TO_CS_RESPONSE26:
9304 case GTPV2_SRVCC_PS_TO_CS_COMPLETE_ACKNOWLEDGE28:
9305 case GTPV2_SRVCC_PS_TO_CS_CANCEL_ACKNOWLEDGE30:
9306 case GTPV2_CONTEXT_RESPONSE131:
9307 case GTPV2_FORWARD_RELOCATION_RESP134:
9308 case GTPV2_RELOCATION_CANCEL_RESPONSE140:
9309 case GTPV2_FORWARD_CTX_ACKNOWLEDGE138:
9310 case GTPV2_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE136:
9311 case GTPV2_RELEASE_ACCESS_BEARERS_RESPONSE171:
9312 case GTPV2_DL_DATA_NOTIF_ACK177:
9313
9314 gcr.seq_nr = seq_nr;
9315 gcrp = (gtpv2_msg_hash_t *)wmem_map_lookup(gtpv2_info->unmatched, &gcr);
9316
9317 if (gcrp) {
9318 if (!gcrp->rep_frame) {
9319 wmem_map_remove(gtpv2_info->unmatched, gcrp);
9320 gcrp->rep_frame = pinfo->num;
9321 gcrp->is_request = false0;
9322
9323 conv = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9324 gcrp->conv_id = conv->conv_index;
9325
9326 wmem_map_insert(gtpv2_info->matched, gcrp, gcrp);
9327 }
9328 }
9329 break;
9330 default:
9331 break;
9332 }
9333 }
9334
9335 /* we have found a match */
9336 if (gcrp) {
9337 proto_item *it;
9338
9339 if (gcrp->is_request) {
9340 it = proto_tree_add_uint(tree, hf_gtpv2_response_in, tvb, 0, 0, gcrp->rep_frame);
9341 proto_item_set_generated(it);
9342 } else {
9343 nstime_t ns;
9344
9345 it = proto_tree_add_uint(tree, hf_gtpv2_response_to, tvb, 0, 0, gcrp->req_frame);
9346 proto_item_set_generated(it);
9347 nstime_delta(&ns, &pinfo->abs_ts, &gcrp->req_time);
9348 it = proto_tree_add_time(tree, hf_gtpv2_response_time, tvb, 0, 0, &ns);
9349 proto_item_set_generated(it);
9350 if (g_gtp_session && !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
9351 /* GTP session */
9352 /* If it's not already in the list */
9353 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)))))
;
9354 if (!session) {
9355 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)))))
;
9356 if (session) {
9357 add_gtp_session(pinfo->num, session);
9358 }
9359 }
9360
9361 if (!is_cause_accepted(last_cause, 2)){
9362 /* If the cause is not accepted then we have to remove all the session information about its corresponding request */
9363 remove_frame_info(gcrp->req_frame);
9364 }
9365 }
9366 }
9367 }
9368 return gcrp;
9369}
9370
9371static void
9372track_gtpv2_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gtpv2_hdr_t * gtpv2_hdr, session_args_t * args)
9373{
9374 uint32_t session, frame_teid_cp;
9375 proto_item *it;
9376 char *imsi = NULL((void*)0);
9377
9378 /* GTP session */
9379 if (!PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
9380 /* If the message does not have any session ID */
9381 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)))))
;
9382 if (!session) {
9383 /* 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 */
9384 if ((gtpv2_hdr->message != GTPV2_CREATE_SESSION_RESPONSE33 && gtpv2_hdr->message != GTPV2_CREATE_SESSION_REQUEST32 && gtpv2_hdr->message != GTPV2_UPDATE_BEARER_RESPONSE98
9385 && gtpv2_hdr->message != GTPV2_UPDATE_BEARER_REQUEST97 && gtpv2_hdr->message != GTPV2_CREATE_BEARER_REQUEST95 && gtpv2_hdr->message != GTPV2_CREATE_BEARER_RESPONSE96
9386 && gtpv2_hdr->message != GTPV2_MODIFY_BEARER_REQUEST34 && gtpv2_hdr->message != GTPV2_MODIFY_BEARER_RESPONSE35)) {
9387 /* If the lists are not empty*/
9388 if (wmem_list_count(args->teid_list) && wmem_list_count(args->ip_list)) {
9389 remove_frame_info(pinfo->num);
9390 }
9391 }
9392
9393 if (gtpv2_hdr->message == GTPV2_CREATE_SESSION_REQUEST32){
9394 /* If CPDPCREQ and not already in the list then we create a new session*/
9395 add_gtp_session(pinfo->num, gtp_session_count);
9396
9397 if (args->imsi) {
9398 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9399 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9400 }
9401 }
9402 else if (gtpv2_hdr->message != GTPV2_CREATE_SESSION_RESPONSE33) {
9403 /* 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
9404 the corresponding session ID */
9405
9406 /* Handle deinterlacing case */
9407 if(is_deinterlacing_supported(pinfo)) {
9408 conversation_t *conversation;
9409 conversation = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9410
9411 if ((get_gtp_session_frame(pinfo->dst, (uint32_t)gtpv2_hdr->teid, conversation->conv_index, &frame_teid_cp, 0) == 1)) {
9412
9413 /* Then we have to set its session ID */
9414 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)))))
;
9415 if (session) {
9416 /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
9417 add_gtp_session(pinfo->num, session);
9418
9419 if (args->imsi) {
9420 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9421 wmem_map_insert(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)), imsi);
9422 }
9423 }
9424 }
9425 else if (gtpv2_hdr->message == GTPV2_MODIFY_BEARER_REQUEST34) {
9426 /* If MBEAREQ and not already in the list then we create a new session*/
9427 add_gtp_session(pinfo->num, gtp_session_count);
9428
9429 if (args->imsi) {
9430 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9431 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9432 } else {
9433 /* If handover from 5G, look up referenceid from earlier HTTP2 streams */
9434 static char to_str_back_buf[32];
9435 #define BACK_PTR(&to_str_back_buf[31]) (&to_str_back_buf[31]) /* pointer to NUL string terminator */
9436
9437 char* referenceid = uint_to_str_back(BACK_PTR(&to_str_back_buf[31]), (uint32_t)gtpv2_hdr->teid);
9438 imsi = http2_get_imsi_from_location(referenceid);
9439 if(imsi) {
9440 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9441 }
9442 }
9443 }
9444 }
9445
9446 else { // no deinterlacing supported/asked
9447 if ((get_frame(pinfo->dst, (uint32_t)gtpv2_hdr->teid, &frame_teid_cp) == 1)) {
9448 /* Then we have to set its session ID */
9449 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)))))
;
9450 if (session) {
9451 /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
9452 add_gtp_session(pinfo->num, session);
9453
9454 if (args->imsi) {
9455 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9456 wmem_map_insert(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)), imsi);
9457 }
9458 }
9459 }
9460 else if (gtpv2_hdr->message == GTPV2_MODIFY_BEARER_REQUEST34) {
9461 /* If MBEAREQ and not already in the list then we create a new session*/
9462 add_gtp_session(pinfo->num, gtp_session_count);
9463
9464 if (args->imsi) {
9465 imsi = wmem_strdup(wmem_file_scope(), args->imsi);
9466 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9467 } else {
9468 /* If handover from 5G, look up location from earlier HTTP2 streams */
9469 static char to_str_back_buf[32];
9470 #define BACK_PTR(&to_str_back_buf[31]) (&to_str_back_buf[31]) /* pointer to NUL string terminator */
9471
9472 char* location = uint_to_str_back(BACK_PTR(&to_str_back_buf[31]), (uint32_t)gtpv2_hdr->teid);
9473 imsi = http2_get_imsi_from_location(location);
9474 if(imsi) {
9475 wmem_map_insert(session_imsi, GUINT_TO_POINTER(gtp_session_count++)((gpointer) (gulong) (gtp_session_count++)), imsi);
9476 }
9477 }
9478 }
9479 }
9480 }
9481 }
9482 }
9483
9484 if (tree) {
9485 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)))))
;
9486 if (session) {
9487 it = proto_tree_add_uint(tree, hf_gtpv2_session, tvb, 0, 0, session);
9488 proto_item_set_generated(it);
9489
9490 imsi = wmem_map_lookup(session_imsi, GUINT_TO_POINTER(session)((gpointer) (gulong) (session)));
9491 if (imsi) {
9492 add_assoc_imsi_item(tvb, tree, imsi);
9493 }
9494 }
9495 }
9496}
9497
9498void
9499dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned offset, uint8_t message_type, session_args_t * args, uint8_t parent_ie)
9500{
9501 proto_tree *ie_tree;
9502 proto_item *ti;
9503 tvbuff_t *ie_tvb;
9504 uint8_t type, instance;
9505 uint16_t length;
9506 unsigned i, remaining_length, msg_length;
9507 unsigned info_elem;
9508 /*
9509 * Octets 8 7 6 5 4 3 2 1
9510 * 1 Type
9511 * 2-3 Length = n
9512 * 4 CR Spare Instance
9513 * 5-(n+4) IE specific data
9514 */
9515 msg_length = (int)tvb_reported_length(tvb);
9516 while (offset < msg_length) {
9517 /* Get the type and length */
9518 remaining_length = msg_length - offset;
9519 if (remaining_length < 3) {
9520 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, offset, remaining_length,
9521 "Not enough data left for IE and length, %i bytes", remaining_length);
9522 return;
9523 }
9524 type = tvb_get_uint8(tvb, offset);
9525 length = tvb_get_ntohs(tvb, offset + 1);
9526 remaining_length = remaining_length -4;
9527 if (remaining_length < length) {
9528 proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_len_invalid, tvb, offset+4, remaining_length,
9529 "Less data left than indicated by length %u, remaining length %i", length, remaining_length);
9530 /* Octet 1 */
9531 proto_tree_add_item(tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9532 offset += 1;
9533
9534 /*Octet 2 - 3 */
9535 proto_tree_add_item(tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9536 return;
9537 }
9538 ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + length, ett_gtpv2_ies[type], &ti, "%s: ",
9539 val_to_str_ext_const(type, &gtpv2_element_type_vals_ext, "Unknown"));
9540
9541 /* Octet 1 */
9542 proto_tree_add_item(ie_tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9543 offset += 1;
9544
9545 /*Octet 2 - 3 */
9546 proto_tree_add_item(ie_tree, hf_gtpv2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9547 offset += 2;
9548
9549 /* ch8.120 breaks the format described in ch8.2.1 */
9550 if (type == GTPV2_IE_MON_EVENT_INF189) {
9551 instance = tvb_get_uint8(tvb, offset) & 0x0f;
9552 } else {
9553 /* CR Spare Instance Octet 4*/
9554 proto_tree_add_item(ie_tree, hf_gtpv2_cr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9555
9556 instance = tvb_get_uint8(tvb, offset) & 0x0f;
9557 proto_tree_add_item(ie_tree, hf_gtpv2_instance, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9558
9559 /* Add Info element on IE types with multiple instances in same group */
9560 if (tree && message_type > 0) {
9561 /* XXX - This has 250+ entries and should really be a different
9562 * data structure, perhaps lazily creating a table. */
9563 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++) {
9564 if (gtpv2_information_element_instance_vals[info_elem].message_type == message_type &&
9565 gtpv2_information_element_instance_vals[info_elem].parent_ie == parent_ie &&
9566 gtpv2_information_element_instance_vals[info_elem].type == type &&
9567 gtpv2_information_element_instance_vals[info_elem].instance == instance)
9568 {
9569 proto_item_append_text(ie_tree, "%s: ", gtpv2_information_element_instance_vals[info_elem].info_element);
9570 break;
9571 }
9572 }
9573 }
9574 offset++;
9575 }
9576
9577 /* TODO: call IE dissector here */
9578 if (type == GTPV2_IE_RESERVED0) {
9579 /* Treat IE type zero special as type zero is used to end the loop in the else branch */
9580 expert_add_info(pinfo, ti, &ei_gtpv2_ie);
9581 } else {
9582 i = -1;
9583 /* Loop over the IE dissector list to se if we find an entry;
9584 the last entry will have ie_type=0 breaking the loop */
9585 while (gtpv2_ies[++i].ie_type) {
9586 if (gtpv2_ies[i].ie_type == type)
9587 break;
9588 }
9589 /* Just give the IE dissector the IE */
9590 ie_tvb = tvb_new_subset_remaining(tvb, offset);
9591 (*gtpv2_ies[i].decode) (ie_tvb, pinfo , ie_tree, ti, length, message_type, instance, args);
9592 }
9593
9594 /* ch8.120 breaks the format described in ch8.2.1 */
9595 if (type == GTPV2_IE_MON_EVENT_INF189) {
9596 offset++;
9597 }
9598
9599 offset += length;
9600 }
9601}
9602
9603static int
9604// NOLINTNEXTLINE(misc-no-recursion)
9605dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U___attribute__((unused)))
9606{
9607 proto_tree *gtpv2_tree;
9608 proto_item *ti;
9609 uint8_t message_type, t_flag, p_flag, mp_flag, cause_aux;
9610 unsigned offset = 0;
9611 uint16_t msg_length;
9612 tvbuff_t *msg_tvb;
9613 uint32_t seq_no = 0;
9614 conversation_t *conversation;
9615 gtpv2_conv_info_t *gtpv2_info;
9616 session_args_t *args = NULL((void*)0);
9617 gtpv2_hdr_t * gtpv2_hdr = NULL((void*)0);
9618 gtpv2_msg_hash_t *gcrp = NULL((void*)0);
9619 uint64_t gtpv2_hdr_flags;
9620
9621 static int * const gtpv2_flags[] = {
9622 &hf_gtpv2_version,
9623 &hf_gtpv2_p,
9624 &hf_gtpv2_t,
9625 &hf_gtpv2_mp,
9626 NULL((void*)0)
9627 };
9628
9629 gtpv2_hdr = wmem_new0(pinfo->pool, gtpv2_hdr_t)((gtpv2_hdr_t*)wmem_alloc0((pinfo->pool), sizeof(gtpv2_hdr_t
)))
;
9630
9631 /* Setting the TEID to -1 to say that the TEID is not valid for this packet */
9632 gtpv2_hdr->teid = -1;
9633
9634 /* Currently we get called from the GTP dissector no need to check the version */
9635 col_set_str(pinfo->cinfo, COL_PROTOCOL, "GTPv2");
9636 col_clear(pinfo->cinfo, COL_INFO);
9637
9638 /* message type is in octet 2 */
9639 message_type = tvb_get_uint8(tvb, 1);
9640 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(message_type, &gtpv2_message_type_vals_ext, "Unknown"));
9641
9642
9643 msg_length = tvb_get_ntohs(tvb, offset + 2);
9644 ti = proto_tree_add_item(tree, proto_gtpv2, tvb, offset, msg_length + 4, ENC_NA0x00000000);
9645 gtpv2_tree = proto_item_add_subtree(ti, ett_gtpv2);
9646
9647 if (g_gtp_session) {
9648 args = wmem_new0(pinfo->pool, session_args_t)((session_args_t*)wmem_alloc0((pinfo->pool), sizeof(session_args_t
)))
;
9649 args->last_cause = 16; /* It stores the last cause decoded. Cause accepted by default */
9650 /* We create the auxiliary lists */
9651 args->teid_list = wmem_list_new(pinfo->pool);
9652 args->ip_list = wmem_list_new(pinfo->pool);
9653 }
9654
9655 /*
9656 * Do we have a conversation for this connection?
9657 */
9658 conversation = find_conversation_strat(pinfo, CONVERSATION_IP, NO_PORT_X0x00040000, false0);
9659 if(conversation == NULL((void*)0)) {
9660 // XXX - very unlikely this is needed as we're carried over IP
9661 conversation = conversation_new_strat(pinfo, CONVERSATION_IP, NO_PORTS0x010);
9662 }
9663
9664 /*
9665 * Do we already know this conversation?
9666 */
9667 gtpv2_info = (gtpv2_conv_info_t *)conversation_get_proto_data(conversation, proto_gtpv2);
9668 if (gtpv2_info == NULL((void*)0)) {
9669 /* No. Attach that information to the conversation, and add
9670 * it to the list of information structures.
9671 */
9672 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
)))
;
9673 /*Request/response matching tables*/
9674 gtpv2_info->matched = wmem_map_new(wmem_file_scope(), gtpv2_sn_hash, gtpv2_sn_equal_matched);
9675 gtpv2_info->unmatched = wmem_map_new(wmem_file_scope(), gtpv2_sn_hash, gtpv2_sn_equal_unmatched);
9676
9677 conversation_add_proto_data(conversation, proto_gtpv2, gtpv2_info);
9678 }
9679
9680 /* Control Plane GTP uses a variable length header. Control Plane GTP header
9681 * length shall be a multiple of 4 octets.
9682 * Figure 5.1-1 illustrates the format of the GTPv2-C Header.
9683 * Bits 8 7 6 5 4 3 2 1
9684 * Octets 1 Version P T Spare Spare Spare
9685 * 2 Message Type
9686 * 3 Message Length (1st Octet)
9687 * 4 Message Length (2nd Octet)
9688 * m-k(m+3) If T flag is set to 1, then TEID shall be placed into octets 5-8.
9689 * Otherwise, TEID field is not present at all.
9690 * n-(n+2) Sequence Number
9691 * (n+3) Spare
9692 * Figure 5.1-1: General format of GTPv2 Header for Control Plane
9693 */
9694
9695 /* 5.4 EPC specific GTP-C header
9696 * Bits 8 7 6 5 4 3 2 1
9697 * Octets 1 Version P T=1 MP Spare Spare
9698 * 2 Message Type
9699 * 3 Message Length (1st Octet)
9700 * 4 Message Length (2nd Octet)
9701 * 5 Tunnel Endpoint Identifier (1st Octet)
9702 * 6 Tunnel Endpoint Identifier (2nd Octet)
9703 * 7 Tunnel Endpoint Identifier (3rd Octet)
9704 * 8 Tunnel Endpoint Identifier (4th Octet)
9705 * 9 Sequence Number (1st Octet)
9706 * 10 Sequence Number (2nd Octet)
9707 * 11 Sequence Number (3rd Octet)
9708 * 12 Message Priority Spare
9709 */
9710
9711 /* Octet 1 */
9712 proto_tree_add_bitmask_with_flags_ret_uint64(gtpv2_tree, tvb, offset, hf_gtpv2_flags,
9713 ett_gtpv2_flags, gtpv2_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02, &gtpv2_hdr_flags);
9714
9715 gtpv2_hdr->flags = (uint8_t)gtpv2_hdr_flags;
9716 p_flag = (gtpv2_hdr->flags & 0x10) >> 4;
9717 t_flag = (gtpv2_hdr->flags & 0x08) >> 3;
9718 mp_flag = (gtpv2_hdr->flags & 0x04) >> 2;
9719
9720 offset += 1;
9721
9722 /* Octet 2 */
9723 gtpv2_hdr->message = tvb_get_uint8(tvb, offset);
9724 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_message_type, tvb, offset, 1, gtpv2_hdr->message);
9725 offset += 1;
9726 /* Octet 3 - 4 */
9727 gtpv2_hdr->length = tvb_get_ntohs(tvb, offset);
9728 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_msg_length, tvb, offset, 2, gtpv2_hdr->length);
9729 offset += 2;
9730
9731 if (t_flag) {
9732 /* Tunnel Endpoint Identifier 4 octets */
9733 gtpv2_hdr->teid = tvb_get_ntohl(tvb, offset);
9734 proto_tree_add_uint(gtpv2_tree, hf_gtpv2_teid, tvb, offset, 4, (uint32_t)gtpv2_hdr->teid);
9735 offset += 4;
9736 }
9737 /* Sequence Number 3 octets */
9738 proto_tree_add_item_ret_uint(gtpv2_tree, hf_gtpv2_seq, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &seq_no);
9739 offset += 3;
9740
9741 /* Spare 1 octet or if the "MP" flag is set to "1",
9742 * then bits 8 to 5 of octet 12 shall indicate the message priority.
9743 */
9744 if (mp_flag) {
9745 /* Bits 8 to 5 of octet 12 shall be encoded as the binary value of the Message Priority
9746 * and it may take any value between 0 and 15, where 0 corresponds to the highest priority
9747 * and 15 the lowest priority.
9748 */
9749 proto_tree_add_item(gtpv2_tree, hf_gtpv2_msg_prio, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9750 }else{
9751 proto_tree_add_item(gtpv2_tree, hf_gtpv2_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9752 }
9753 offset += 1;
9754
9755 if (p_flag) {
9756 msg_tvb = tvb_new_subset_length(tvb, 0, msg_length + 4);
9757 dissect_gtpv2_ie_common(msg_tvb, pinfo, gtpv2_tree, offset, message_type, args, 0);
9758 } else {
9759 dissect_gtpv2_ie_common(tvb, pinfo, gtpv2_tree, offset, message_type, args, 0);
9760 }
9761 /*Use sequence number to track Req/Resp pairs*/
9762 cause_aux = 16; /* Cause accepted by default. Only used when args is NULL */
9763 if (args && !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
9764 /* We insert the lists inside the table*/
9765 if(is_deinterlacing_supported(pinfo)) {
9766 fill_map(args->teid_list, args->ip_list, pinfo->num, conversation->conv_index, 0);
9767 }
9768 else {
9769 // no deinterlacing supported/asked
9770 fill_map(args->teid_list, args->ip_list, pinfo->num, 0, 1);
9771 }
9772 cause_aux = args->last_cause;
9773 }
9774 gcrp = gtpv2_match_response(tvb, pinfo, gtpv2_tree, seq_no, message_type, gtpv2_info, cause_aux);
9775 if (gcrp) {
9776 tap_queue_packet(gtpv2_tap, pinfo, gcrp);
9777 }
9778 if (args) {
9779 track_gtpv2_session(tvb, pinfo, gtpv2_tree, gtpv2_hdr, args);
9780 }
9781
9782 /* Bit 5 represents a "P" flag. If the "P" flag is set to "0",
9783 * no piggybacked message shall be present. If the "P" flag is set to "1",
9784 * then another GTPv2-C message with its own header and body shall be present
9785 * at the end of the current message.
9786 */
9787 if (p_flag) {
9788 tvbuff_t *new_p_tvb;
9789 /* Octets 3 to 4 represent the Length field. This field shall indicate the
9790 * length of the message in octets excluding the
9791 * mandatory part of the GTP-C header (the first 4 octets).
9792 */
9793 new_p_tvb = tvb_new_subset_remaining(tvb, msg_length + 4);
9794 col_append_str(pinfo->cinfo, COL_INFO, " / ");
9795 col_set_fence(pinfo->cinfo, COL_INFO);
9796 increment_dissection_depth(pinfo);
9797 dissect_gtpv2(new_p_tvb, pinfo, tree, NULL((void*)0));
9798 decrement_dissection_depth(pinfo);
9799 }
9800
9801 return tvb_captured_length(tvb);
9802}
9803
9804void proto_register_gtpv2(void)
9805{
9806 unsigned i, last_offset;
9807
9808 static hf_register_info hf_gtpv2[] = {
9809 { &hf_gtpv2_response_in,
9810 { "Response In", "gtpv2.response_in",
9811 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE)((gpointer) (glong) (FT_FRAMENUM_RESPONSE)), 0x0,
9812 "The response to this GTP request is in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9813 },
9814 { &hf_gtpv2_response_to,
9815 { "Response To", "gtpv2.response_to",
9816 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST)((gpointer) (glong) (FT_FRAMENUM_REQUEST)), 0x0,
9817 "This is a response to the GTP request in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9818 },
9819 { &hf_gtpv2_response_time,
9820 { "Response Time", "gtpv2.response_time",
9821 FT_RELATIVE_TIME, BASE_NONE, NULL((void*)0), 0x0,
9822 "The time between the Request and the Response", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9823 },
9824 { &hf_gtpv2_spare_half_octet,
9825 {"Spare half octet", "gtpv2.spare_half_octet",
9826 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9828 },
9829 { &hf_gtpv2_spare_bits,
9830 {"Spare bit(s)", "gtpv2.spare_bits",
9831 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9833 },
9834 //{ &hf_gtpv2_spare_b7_b1,
9835 // {"Spare bit(s)", "gtpv2.spare_b7_b1",
9836 // FT_UINT8, BASE_DEC, NULL, 0xfe,
9837 // NULL, HFILL }
9838 //},
9839 { &hf_gtpv2_spare_b7_b2,
9840 { "Spare", "gtpv2.spare.b7_b2",
9841 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
9842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9843 },
9844 { &hf_gtpv2_spare_b7_b3,
9845 {"Spare bit(s)", "gtpv2.spare_b7_b3",
9846 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf8,
9847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9848 },
9849 { &hf_gtpv2_spare_b7_b4,
9850 { "Spare", "gtpv2.spare.b7_b4",
9851 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0,
9852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9853 },
9854 { &hf_gtpv2_spare_b7_b5,
9855 { "Spare", "gtpv2.spare.b7_b5",
9856 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
9857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9858 },
9859 {&hf_gtpv2_flags,
9860 {"Flags", "gtpv2.flags",
9861 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
9862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9863 },
9864 {&hf_gtpv2_version,
9865 {"Version", "gtpv2.version",
9866 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
9867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9868 },
9869 {&hf_gtpv2_p,
9870 {"Piggybacking flag (P)", "gtpv2.p",
9871 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
9872 "If Piggybacked message is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9873 },
9874 { &hf_gtpv2_t,
9875 {"TEID flag (T)", "gtpv2.t",
9876 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
9877 "If TEID field is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9878 },
9879 { &hf_gtpv2_mp,
9880 {"Message Priority(MP)", "gtpv2.mp",
9881 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
9882 "If Message Priority field is present or not", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9883 },
9884 { &hf_gtpv2_message_type,
9885 {"Message Type", "gtpv2.message_type",
9886 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_message_type_vals_ext, 0x0,
9887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9888 },
9889 { &hf_gtpv2_msg_length,
9890 {"Message Length", "gtpv2.msg_length",
9891 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9893 },
9894 { &hf_gtpv2_teid,
9895 {"Tunnel Endpoint Identifier", "gtpv2.teid",
9896 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
9897 "TEID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9898 },
9899 { &hf_gtpv2_seq,
9900 {"Sequence Number", "gtpv2.seq",
9901 FT_UINT24, BASE_HEX_DEC, NULL((void*)0), 0x0,
9902 "SEQ", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9903 },
9904 { &hf_gtpv2_msg_prio,
9905 {"Message Priority", "gtpv2.mp",
9906 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0xf0,
9907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9908 },
9909 { &hf_gtpv2_spare,
9910 {"Spare", "gtpv2.spare",
9911 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9913 },
9914 { &hf_gtpv2_spare_w0,
9915 { "Spare", "gtpv2.spare.w0",
9916 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
9918 },
9919 { &hf_gtpv2_ie,
9920 {"IE Type", "gtpv2.ie_type",
9921 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_element_type_vals_ext, 0x0,
9922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9923 },
9924 { &hf_gtpv2_ie_len,
9925 {"IE Length", "gtpv2.ie_len",
9926 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
9927 "length of the information element excluding the first four octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9928 },
9929 { &hf_gtpv2_cr,
9930 {"CR flag", "gtpv2.cr",
9931 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, /* SRVCC */
9932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9933 },
9934 { &hf_gtpv2_instance,
9935 {"Instance", "gtpv2.instance",
9936 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
9937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9938 },
9939 { &hf_gtpv2_ipv4_addr,
9940 {"IPv4 Address", "gtpv2.ipv4_addr",
9941 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
9942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9943 },
9944 { &hf_gtpv2_cause,
9945 {"Cause", "gtpv2.cause",
9946 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_cause_vals_ext, 0x0,
9947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9948 },
9949 {&hf_gtpv2_cause_cs,
9950 {"CS (Cause Source)", "gtpv2.cs",
9951 FT_BOOLEAN, 8, TFS(&gtpv2_cause_cs)((0 ? (const struct true_false_string*)0 : ((&gtpv2_cause_cs
))))
, 0x01,
9952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9953 },
9954 { &hf_gtpv2_cause_bce,
9955 {"BCE (Bearer Context IE Error)", "gtpv2.bce",
9956 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
9957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9958 },
9959 { &hf_gtpv2_cause_pce,
9960 {"PCE (PDN Connection IE Error)", "gtpv2.pce",
9961 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
9962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9963 },
9964 { &hf_gtpv2_cause_off_ie_t,
9965 {"Type of the offending IE", "gtpv2.cause_off_ie_t",
9966 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_element_type_vals_ext, 0x0,
9967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9968 },
9969 { &hf_gtpv2_rec,
9970 {"Restart Counter", "gtpv2.rec",
9971 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9973 },
9974/*Start SRVCC Messages*/
9975 { &hf_gtpv2_stn_sr,
9976 {"STN-SR", "gtpv2.stn_sr",
9977 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9978 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9979 },
9980 { &hf_gtpv2_len_trans_con,
9981 {"Length of the Transparent Container", "gtpv2.len_trans_con",
9982 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
9983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9984 },
9985 { &hf_gtpv2_eksi,
9986 {"eKSI", "gtpv2.eksi",
9987 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
9988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9989 },
9990 { &hf_gtpv2_ck,
9991 {"CK", "gtpv2.ck",
9992 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9994 },
9995 { &hf_gtpv2_ik,
9996 {"IK", "gtpv2.ik",
9997 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
9998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
9999 },
10000 { &hf_gtpv2_len_ms_classmark2,
10001 {"Length of Mobile Station Classmark2", "gtpv2.len_ms_classmark2",
10002 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10004 },
10005 { &hf_gtpv2_len_ms_classmark3,
10006 {"Length of Mobile Station Classmark3", "gtpv2.len_ms_classmark3",
10007 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10009 },
10010 { &hf_gtpv2_len_supp_codec_list,
10011 {"Length of Supported Codec List", "gtpv2.len_supp_codec_list",
10012 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10014 },
10015 { &hf_gtpv2_ksi,
10016 {"KSI'cs", "gtpv2.ksi",
10017 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
10018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10019 },
10020 { &hf_gtpv2_cksn,
10021 {"CKSN'", "gtpv2.cksn",
10022 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10024 },
10025 { &hf_gtpv2_srvcc_cause,
10026 {"SRVCC Cause", "gtpv2.srvcc_cause",
10027 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_srvcc_cause_vals_ext, 0x0,
10028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10029 },
10030 {&hf_gtpv2_rac,
10031 { "Routing Area Code (RAC)", "gtpv2.rac",
10032 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
10033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10034 },
10035
10036 { &hf_gtpv2_rnc_id,
10037 {"RNC ID", "gtpv2.rnc_id",
10038 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10040 },
10041 { &hf_gtpv2_ext_rnc_id,
10042 {"Extended RNC-ID", "gtpv2.ext_rnc_id",
10043 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10045 },
10046 { &hf_gtpv2_lac,
10047 { "Location Area Code (LAC)", "gtpv2.lac",
10048 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x00,
10049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10050 },
10051 { &hf_gtpv2_sac,
10052 { "Service Area Code (SAC)", "gtpv2.sac",
10053 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x00,
10054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10055 },
10056 { &hf_gtpv2_tgt_g_cell_id,
10057 {"Cell ID", "gtpv2.tgt_g_cell_id",
10058 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
10059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10060 },
10061 {&hf_gtpv2_teid_c,
10062 {"Tunnel Endpoint Identifier for Control Plane(TEID-C)", "gtpv2.teid_c",
10063 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
10064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10065 },
10066 {&hf_gtpv2_sv_sti,
10067 {"STI (Session Transfer Indicator)", "gtpv2.sv_sti",
10068 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10069 },
10070 {&hf_gtpv2_sv_ics,
10071 {"ICS (IMS Centralized Service)", "gtpv2.sv_ics",
10072 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10073 },
10074 {&hf_gtpv2_sv_emind,
10075 {"EmInd(Emergency Indicator)", "gtpv2.sv_emind",
10076 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10077 },
10078
10079/*End SRVCC Messages*/
10080 {&hf_gtpv2_apn,
10081 {"APN (Access Point Name)", "gtpv2.apn",
10082 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
10083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10084 },
10085 {&hf_gtpv2_ambr_up,
10086 {"AMBR Uplink (Aggregate Maximum Bit Rate for Uplink)", "gtpv2.ambr_up",
10087 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10089 },
10090 {&hf_gtpv2_ambr_down,
10091 {"AMBR Downlink (Aggregate Maximum Bit Rate for Downlink)", "gtpv2.ambr_down",
10092 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10094 },
10095 {&hf_gtpv2_ebi,
10096 {"EPS Bearer ID (EBI)", "gtpv2.ebi",
10097 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
10098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10099 },
10100 { &hf_gtpv2_ip_address_ipv4,
10101 {"IP address IPv4", "gtpv2.ip_address_ipv4",
10102 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
10103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10104 },
10105 { &hf_gtpv2_ip_address_ipv6,
10106 {"IP address IPv6", "gtpv2.ip_address_ipv6",
10107 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
10108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10109 },
10110 {&hf_gtpv2_mei,
10111 {"MEI(Mobile Equipment Identity)", "gtpv2.mei",
10112 FT_STRING, BASE_NONE, NULL((void*)0), 0,
10113 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10114 },
10115 { &hf_gtpv2_pdn_numbers_nsapi,
10116 {"NSAPI", "gtpv2.pdn_numbers_nsapi",
10117 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10118 },
10119 { &hf_gtpv2_p_tmsi,
10120 {"Packet TMSI (P-TMSI)", "gtpv2.p_tmsi",
10121 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10122 },
10123 { &hf_gtpv2_p_tmsi_sig,
10124 {"P-TMSI Signature", "gtpv2.p_tmsi_sig",
10125 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10126 },
10127 {&hf_gtpv2_daf,
10128 {"DAF (Dual Address Bearer Flag)", "gtpv2.daf",
10129 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10130 },
10131 {&hf_gtpv2_dtf,
10132 {"DTF (Direct Tunnel Flag)", "gtpv2.dtf",
10133 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10134 },
10135 {&hf_gtpv2_hi,
10136 {"HI (Handover Indication)", "gtpv2.hi",
10137 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10138 },
10139 {&hf_gtpv2_dfi,
10140 {"DFI (Direct Forwarding Indication)", "gtpv2.dfi",
10141 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10142 },
10143 {&hf_gtpv2_oi,
10144 {"OI (Operation Indication)", "gtpv2.oi",
10145 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10146 },
10147 {&hf_gtpv2_isrsi,
10148 {"ISRSI (Idle mode Signalling Reduction Supported Indication)", "gtpv2.isrsi",
10149 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10150 },
10151 {&hf_gtpv2_israi,
10152 {"ISRAI (Idle mode Signalling Reduction Activation Indication)", "gtpv2.israi",
10153 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10154 },
10155 {&hf_gtpv2_sgwci,
10156 {"SGWCI (SGW Change Indication)", "gtpv2.sgwci",
10157 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10158 },
10159 {&hf_gtpv2_sqci,
10160 {"SQCI (Subscribed QoS Change Indication)", "gtpv2.sqci",
10161 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10162 },
10163 {&hf_gtpv2_uimsi,
10164 {"UIMSI (Unauthenticated IMSI)", "gtpv2.uimsi",
10165 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10166 },
10167 {&hf_gtpv2_cfsi,
10168 {"CFSI (Change F-TEID support indication)", "gtpv2.cfsi",
10169 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10170 },
10171 {&hf_gtpv2_crsi,
10172 {"CRSI (Change Reporting support indication)", "gtpv2.crsi",
10173 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10174 },
10175 {&hf_gtpv2_ps,
10176 {"PS (Piggybacking Supported)", "gtpv2.ps",
10177 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10178 },
10179 {&hf_gtpv2_pt,
10180 {"PT (Protocol Type)", "gtpv2.pt",
10181 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10182 },
10183 {&hf_gtpv2_si,
10184 {"SI (Scope Indication)", "gtpv2.si",
10185 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10186 },
10187 {&hf_gtpv2_msv,
10188 {"MSV (MS Validated)", "gtpv2.msv",
10189 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10190 },
10191 {&hf_gtpv2_retloc,
10192 {"RetLoc (Retrieve Location Indication Flag)", "gtpv2.retloc",
10193 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10194 },
10195 {&hf_gtpv2_pbic,
10196 {"PBIC (Propagate BBAI Information Change)", "gtpv2.pbic",
10197 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10198 },
10199 {&hf_gtpv2_srni,
10200 {"SRNI (SGW Restoration Needed Indication)", "gtpv2.snri",
10201 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10202 },
10203 {&hf_gtpv2_s6af,
10204 {"S6AF (Static IPv6 Address Flag)", "gtpv2.s6af",
10205 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10206 },
10207 {&hf_gtpv2_s4af,
10208 {"S4AF (Static IPv4 Address Flag)", "gtpv2.s4af",
10209 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10210 },
10211 {&hf_gtpv2_mbmdt,
10212 {"MBMDT (Management Based MDT allowed flag)", "gtpv2.mbmdt",
10213 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10214 },
10215 {&hf_gtpv2_israu,
10216 {"ISRAU (ISR is activated for the UE)", "gtpv2.israu",
10217 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10218 },
10219 {&hf_gtpv2_ccrsi,
10220 {"CCRSI (CSG Change Reporting support indication)", "gtpv2.ccrsi",
10221 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10222 },
10223
10224 {&hf_gtpv2_cprai,
10225 {"CPRAI (Change of Presence Reporting Area information Indication)", "gtpv2.cprai",
10226 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10227 },
10228 {&hf_gtpv2_arrl,
10229 {"ARRL (Abnormal Release of Radio Link)", "gtpv2.arrl",
10230 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10231 },
10232 {&hf_gtpv2_ppof,
10233 {"PPOFF (PDN Pause Off Indication)", "gtpv2.ppof",
10234 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10235 },
10236 {&hf_gtpv2_ppon_ppei,
10237 {"PPON (PDN Pause On Indication) / PPEI (PDN Pause Enabled Indication)", "gtpv2.ppon_ppei",
10238 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10239 },
10240 {&hf_gtpv2_ppsi,
10241 {"PPSI (PDN Pause Support Indication)", "gtpv2.ppsi",
10242 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10243 },
10244 {&hf_gtpv2_csfbi,
10245 {"CSFBI (CSFB Indication)", "gtpv2.csfbi",
10246 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10247 },
10248 {&hf_gtpv2_clii,
10249 {"CLII (Change of Location Information Indication)", "gtpv2.clii",
10250 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10251 },
10252 {&hf_gtpv2_cpsr,
10253 {"CPSR (CS to PS SRVCC Indication)", "gtpv2.cpsr",
10254 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10255 },
10256 {&hf_gtpv2_nsi,
10257 {"NSI (NBIFOM Support Indication)", "gtpv2.nsi",
10258 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10259 },
10260 {&hf_gtpv2_uasi,
10261 {"UASI (UE Available for Signalling Indication)", "gtpv2.uasi",
10262 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10263 },
10264 {&hf_gtpv2_dtci,
10265 {"DTCI (Delay Tolerant Connection Indication)", "gtpv2.dtci",
10266 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10267 },
10268 {&hf_gtpv2_bdwi,
10269 {"BDWI (Buffered DL Data Waiting Indication)", "gtpv2.bdwi",
10270 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10271 },
10272 {&hf_gtpv2_psci,
10273 {"PSCI (Pending Subscription Change Indication)", "gtpv2.psci",
10274 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10275 },
10276 {&hf_gtpv2_pcri,
10277 {"PCRI (P-CSCF Restoration Indication)", "gtpv2.pcri",
10278 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10279 },
10280 {&hf_gtpv2_aosi,
10281 {"AOSI (Associate OCI with SGW node's Identity)", "gtpv2.aosi",
10282 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10283 },
10284 {&hf_gtpv2_aopi,
10285 {"AOPI (Associate OCI with PGW node's Identity)", "gtpv2.aopi",
10286 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10287 },
10288 {&hf_gtpv2_roaai,
10289 {"ROAAI (Release Over Any Access Indication)", "gtpv2.roaai",
10290 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10291 },
10292 {&hf_gtpv2_epcosi,
10293 {"EPCOSI (Extended PCO Support Indication)", "gtpv2.epcosi",
10294 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10295 },
10296 {&hf_gtpv2_cpopci,
10297 {"CPOPCI (Control Plane Only PDN Connection Indication)", "gtpv2.cpopci",
10298 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10299 },
10300 {&hf_gtpv2_pmtsmi,
10301 {"PMTSMI (Pending MT Short Message Indication)", "gtpv2.pmtsmi",
10302 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10303 },
10304 {&hf_gtpv2_s11tf,
10305 {"S11TF (S11-U Tunnel Flag)", "gtpv2.s11tf",
10306 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10307 },
10308 {&hf_gtpv2_pnsi,
10309 {"PNSI (Pending Network Initiated PDN Connection Signalling Indication)", "gtpv2.pnsi",
10310 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10311 },
10312 {&hf_gtpv2_unaccsi,
10313 {"UNACCSI (UE Not Authorized Cause Code Support Indication)", "gtpv2.unaccsi",
10314 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10315 },
10316 {&hf_gtpv2_wpmsi,
10317 {"WPMSI (WLCP PDN Connection Modification Support Indication)", "gtpv2.wpmsi",
10318 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10319 },
10320 {&hf_gtpv2_5gsnn26,
10321 { "5GSNN26 (5GS Interworking without N26 Indication)", "gtpv2.5gsnn26",
10322 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10323 },
10324 {&hf_gtpv2_reprefi,
10325 { "REPREFI (Return Preferred Indication)", "gtpv2.reprefi",
10326 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10327 },
10328 {&hf_gtpv2_5gsiwk,
10329 { "5GSIWKI (5GS Interworking Indication)", "gtpv2.5gsiwk",
10330 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10331 },
10332 {&hf_gtpv2_eevrsi,
10333 { "EEVRSI (Extended EBI Value Range Support Indication)", "gtpv2.eevrsi",
10334 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10335 },
10336 {&hf_gtpv2_ltemui,
10337 { "LTEMUI (LTE-M UE Indication)", "gtpv2.ltemui",
10338 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10339 },
10340 {&hf_gtpv2_ltempi,
10341 { "LTEMPI (LTE-M RAT Type reporting to PGW Indication)", "gtpv2.ltempi",
10342 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10343 },
10344 {&hf_gtpv2_enbcrsi,
10345 {"ENBCRSI (eNB Change Reporting Support Indication)", "gtpv2.enbcrsi",
10346 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10347 },
10348 {&hf_gtpv2_tspcmi,
10349 {"TSPCMI (Triggering SGSN Initiated PDP Context Creation/Modification Indication)", "gtpv2.tspcmi",
10350 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10351 },
10352 {&hf_gtpv2_csrmfi,
10353 { "CSRMFI (Create Session Request Message Forwarded Indication)", "gtpv2.csrmfi",
10354 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10355 },
10356 {&hf_gtpv2_mtedtn,
10357 { "MTEDTN (MT-EDT Not Applicable)", "gtpv2.mtedtn",
10358 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) }
10359 },
10360
10361 {&hf_gtpv2_mtedta,
10362 { "MTEDTA (MT-EDT Applicable)", "gtpv2.mtedta",
10363 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) }
10364 },
10365
10366 {&hf_gtpv2_n5gnmi,
10367 { "N5GNMI (No 5GS N26 Mobility Indication)", "gtpv2.n5gnmi",
10368 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
10369 },
10370 { &hf_gtpv2_5gcnrs,
10371 { "5GCNRS (5GC Not Restricted Support)", "gtpv2.5gcnrs",
10372 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) }
10373 },
10374 { &hf_gtpv2_5gcnri,
10375 { "5GCNRI (5GC Not Restricted Indication)", "gtpv2.5gcnri",
10376 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) }
10377 },
10378 { &hf_gtpv2_5srhoi,
10379 { "5SRHOI (5G-SRVCC HO Indication)", "gtpv2.5srhoi",
10380 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) }
10381 },
10382 { &hf_gtpv2_ethpdn,
10383 {"ETHPDN (Ethernet PDN Support Indication)", "gtpv2.ethpdn",
10384 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)}
10385 },
10386 { &hf_gtpv2_nspusi,
10387 {"NSPUSI (Notify Start of Pause of Charging via User plane Support Indication)", "gtpv2.nspusi",
10388 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10389 },
10390 { &hf_gtpv2_pgwrnsi,
10391 {"PGWRNSI (PGW Redirection due to mismatch with Network Slice subscribed by UE Support Indication)", "gtpv2.pgwrnsi",
10392 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10393 },
10394 { &hf_gtpv2_rppcsi,
10395 {"RPPCSI (Restoration of PDN connections after an PGW-C/SMF change Support Indication)", "gtpv2.rppcsi",
10396 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10397 },
10398 { &hf_gtpv2_pgwchi,
10399 {"PGWCHI (PGW CHange Indication)", "gtpv2.pgwchi",
10400 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10401 },
10402 { &hf_gtpv2_sissme,
10403 {"SISSME (Same IWK-SCEF Selected for Monitoring Event Indication)", "gtpv2.sissme",
10404 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10405 },
10406 { &hf_gtpv2_nsenbi,
10407 {"NSENBI (Notify Source eNodeB Indication)", "gtpv2.nsenbi",
10408 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10409 },
10410 { &hf_gtpv2_idfupf,
10411 {"IDFUPF (Indirect Data Forwarding with UPF Indication)", "gtpv2.idfupf",
10412 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10413 },
10414 { &hf_gtpv2_emci,
10415 {"EMCI (Emergency PDU Session Indication)", "gtpv2.emci",
10416 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10417 },
10418 { &hf_gtpv2_lapcosi,
10419 {"LAPCOSI (Large Additional Protocol Configuration Options Support Indication)", "gtpv2.lapcosi",
10420 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10421 },
10422 { &hf_gtpv2_ltemsai,
10423 {"LTEMSAI (LTE-M Satellite Access Indication)", "gtpv2.ltemsai",
10424 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10425 },
10426 { &hf_gtpv2_srtpi,
10427 {"SRTPI (Satellite RAT Type reporting to PGW Indication)", "gtpv2.srtpi",
10428 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10429 },
10430 { &hf_gtpv2_upipsi,
10431 {"UPIPSI (User Plane Integrity Protection Support Indication)", "gtpv2.upipsi",
10432 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10433 },
10434
10435
10436 { &hf_gtpv2_pdn_type,
10437 {"PDN Type", "gtpv2.pdn_type",
10438 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_pdn_type_vals_ext, 0x07,
10439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10440 },
10441#if 0
10442 { &hf_gtpv2_tra_info,
10443 {"Trace ID", "gtpv2.tra_info",
10444 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
10445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10446 },
10447#endif
10448 { &hf_gtpv2_tra_info_msc_momt_calls,
10449 {"MO and MT calls", "gtpv2.tra_info_msc_momt_calls",
10450 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10451 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10452 },
10453 { &hf_gtpv2_tra_info_msc_momt_sms,
10454 {"MO and MT SMS", "gtpv2.tra_info_msc_momt_sms",
10455 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10456 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10457 },
10458 { &hf_gtpv2_tra_info_msc_lu_imsi_ad,
10459 {"LU, IMSI attach, IMSI detach", "gtpv2.tra_info_msc_lu_imsi_ad",
10460 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10461 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10462 },
10463 { &hf_gtpv2_tra_info_msc_handovers,
10464 {"Handovers", "gtpv2.tra_info_msc_handovers",
10465 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10466 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10467 },
10468 { &hf_gtpv2_tra_info_msc_ss,
10469 {"SS", "gtpv2.tra_info_msc_ss",
10470 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10471 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10472 },
10473 { &hf_gtpv2_tra_info_mgw_context,
10474 {"Context", "gtpv2.tra_info_mgw_context",
10475 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10476 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10477 },
10478 { &hf_gtpv2_tra_info_sgsn_pdp_context,
10479 {"PDP context", "gtpv2.tra_info_sgsn_pdp_context",
10480 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10481 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10482 },
10483 { &hf_gtpv2_tra_info_sgsn_momt_sms,
10484 {"MO and MT SMS", "gtpv2.tra_info_sgsn_momt_sms",
10485 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10486 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10487 },
10488 { &hf_gtpv2_tra_info_sgsn_rau_gprs_ad,
10489 {"RAU, GPRS attach, GPRS detach", "gtpv2.tra_info_sgsn_rau_gprs_ad",
10490 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10491 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10492 },
10493 { &hf_gtpv2_tra_info_sgsn_mbms,
10494 {"MBMS Context", "gtpv2.tra_info_sgsn_mbms",
10495 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10496 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10497 },
10498 { &hf_gtpv2_tra_info_sgsn_reserved,
10499 {"Reserved", "gtpv2.tra_info_sgsn_reserved",
10500 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10501 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10502 },
10503 { &hf_gtpv2_tra_info_ggsn_pdp,
10504 {"PDP Context", "gtpv2.tra_info_ggsn_pdp",
10505 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10506 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10507 },
10508 { &hf_gtpv2_tra_info_ggsn_mbms,
10509 {"MBMS Context", "gtpv2.tra_info_ggsn_mbms",
10510 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10511 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10512 },
10513 { &hf_gtpv2_tra_info_bm_sc,
10514 {"MBMS Multicast service activation", "gtpv2.tra_info_bm_sc",
10515 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10516 "BM-SC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10517 },
10518 { &hf_gtpv2_tra_info_mme_sgw_ss,
10519 {"Session setup", "gtpv2.tra_info_mme_sgw_ss",
10520 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10521 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10522 },
10523 { &hf_gtpv2_tra_info_mme_sgw_sr,
10524 {"Service Request", "gtpv2.tra_info_mme_sgw_sr",
10525 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10526 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10527 },
10528 { &hf_gtpv2_tra_info_mme_sgw_iataud,
10529 {"Initial Attach, Tracking area update, Detach", "gtpv2.tra_info_mme_sgw_iataud",
10530 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10531 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10532 },
10533 { &hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc,
10534 {"UE initiated PDN disconnection", "gtpv2.tra_info_mme_sgw_ue_init_pdn_disc",
10535 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10536 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10537 },
10538 { &hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del,
10539 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_mme_sgw_bearer_act_mod_del",
10540 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10541 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10542 },
10543 { &hf_gtpv2_tra_info_mme_sgw_ho,
10544 {"Handover", "gtpv2.tra_info_mme_sgw_ho",
10545 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10546 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10547 },
10548 { &hf_gtpv2_tra_info_sgw_pdn_con_creat,
10549 {"PDN Connection creation", "gtpv2.tra_info_sgw_pdn_con_creat",
10550 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10551 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10552 },
10553 { &hf_gtpv2_tra_info_sgw_pdn_con_term,
10554 {"PDN connection termination", "gtpv2.tra_info_sgw_pdn_con_term",
10555 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10556 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10557 },
10558 { &hf_gtpv2_tra_info_sgw_bearer_act_mod_del,
10559 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_sgw_bearer_act_mod_del",
10560 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10561 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10562 },
10563 { &hf_gtpv2_tra_info_pgw_pdn_con_creat,
10564 {"PDN Connection creation", "gtpv2.tra_info_pgw_pdn_con_creat",
10565 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10566 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10567 },
10568 { &hf_gtpv2_tra_info_pgw_pdn_con_term,
10569 {"PDN connection termination", "gtpv2.tra_info_pgw_pdn_con_term",
10570 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10571 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10572 },
10573 { &hf_gtpv2_tra_info_pgw_bearer_act_mod_del,
10574 {"Bearer Activation Modification Deletion", "gtpv2.tra_info_pgw_bearer_act_mod_del",
10575 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10576 "PGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10577 },
10578 { &hf_gtpv2_tra_info_lne_msc_s,
10579 {"MSC-S", "gtpv2.tra_info_lne_msc_s",
10580 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
10581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10582 },
10583 { &hf_gtpv2_tra_info_lne_mgw,
10584 {"MGW", "gtpv2.tra_info_lne_mgw",
10585 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
10586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10587 },
10588 { &hf_gtpv2_tra_info_lne_sgsn,
10589 {"SGSN", "gtpv2.tra_info_lne_sgsn",
10590 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
10591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10592 },
10593 { &hf_gtpv2_tra_info_lne_ggsn,
10594 {"GGSN", "gtpv2.tra_info_lne_ggsn",
10595 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
10596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10597 },
10598 { &hf_gtpv2_tra_info_lne_rnc,
10599 {"RNC", "gtpv2.tra_info_lne_rnc",
10600 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10602 },
10603 { &hf_gtpv2_tra_info_lne_bm_sc,
10604 {"BM-SC", "gtpv2.tra_info_lne_bm_sc",
10605 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
10606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10607 },
10608 { &hf_gtpv2_tra_info_lne_mme,
10609 {"MME", "gtpv2.tra_info_lne_mme",
10610 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
10611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10612 },
10613 { &hf_gtpv2_tra_info_lne_sgw,
10614 {"SGW", "gtpv2.tra_info_lne_sgw",
10615 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
10616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10617 },
10618 { &hf_gtpv2_tra_info_lne_pdn_gw,
10619 {"PDN GW", "gtpv2.tra_info_lne_pdn_gw",
10620 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
10621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10622 },
10623 { &hf_gtpv2_tra_info_lne_enb,
10624 {"eNB", "gtpv2.tra_info_lne_enb",
10625 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
10626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10627 },
10628 { &hf_gtpv2_tra_info_lne_amf,
10629 {"AMF", "gtpv2.tra_info_lne_amf",
10630 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
10631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10632 },
10633 { &hf_gtpv2_tra_info_lne_smf,
10634 {"SMF", "gtpv2.tra_info_lne_smf",
10635 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
10636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10637 },
10638 { &hf_gtpv2_tra_info_lne_pcf,
10639 {"PCF", "gtpv2.tra_info_lne_pcf",
10640 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
10641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10642 },
10643 { &hf_gtpv2_tra_info_lne_upf,
10644 {"UPF", "gtpv2.tra_info_lne_upf",
10645 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
10646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10647 },
10648 { &hf_gtpv2_tra_info_tra_info_ng_ran_node,
10649 {"NG-RAN node", "gtpv2.tra_info_ng_ran_node",
10650 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
10651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10652 },
10653
10654 { &hf_gtpv2_tra_info_tdl,
10655 {"Trace Depth Length", "gtpv2.tra_info_tdl",
10656 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10658 },
10659 { &hf_gtpv2_tra_info_lmsc_a,
10660 {"A", "gtpv2.tra_info_lmsc_a",
10661 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10662 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10663 },
10664 { &hf_gtpv2_tra_info_lmsc_lu,
10665 {"Iu", "gtpv2.tra_info_lmsc_lu",
10666 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10667 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10668 },
10669 { &hf_gtpv2_tra_info_lmsc_mc,
10670 {"Mc", "gtpv2.tra_info_lmsc_mc",
10671 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10672 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10673 },
10674 { &hf_gtpv2_tra_info_lmsc_map_g,
10675 {"MAP-G", "gtpv2.tra_info_lmsc_map_g",
10676 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10677 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10678 },
10679 { &hf_gtpv2_tra_info_lmsc_map_b,
10680 {"MAP-B", "gtpv2.tra_info_lmsc_map_b",
10681 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10682 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10683 },
10684 { &hf_gtpv2_tra_info_lmsc_map_e,
10685 {"MAP-E", "gtpv2.tra_info_lmsc_map_e",
10686 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10687 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10688 },
10689 { &hf_gtpv2_tra_info_lmsc_map_f,
10690 {"MAP-F", "gtpv2.tra_info_lmsc_map_f",
10691 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10692 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10693 },
10694 { &hf_gtpv2_tra_info_lmsc_cap,
10695 {"CAP", "gtpv2.tra_info_lmsc_cap",
10696 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10697 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10698 },
10699 { &hf_gtpv2_tra_info_lmsc_map_d,
10700 {"MAP-D", "gtpv2.tra_info_lmsc_map_d",
10701 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10702 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10703 },
10704 { &hf_gtpv2_tra_info_lmsc_map_c,
10705 {"MAP-C", "gtpv2.tra_info_lmsc_map_c",
10706 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10707 "MSC Server", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10708 },
10709 { &hf_gtpv2_tra_info_lmgw_mc,
10710 {"Mc", "gtpv2.tra_info_lmgw_mc",
10711 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10712 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10713 },
10714 { &hf_gtpv2_tra_info_lmgw_nb_up,
10715 {"Nb-UP", "gtpv2.tra_info_lmgw_nb_up",
10716 FT_UINT8, BASE_DEC, NULL((void*)0), 0x2,
10717 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10718 },
10719 { &hf_gtpv2_tra_info_lmgw_lu_up,
10720 {"Iu-UP", "gtpv2.tra_info_lmgw_lu_up",
10721 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10722 "MGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10723 },
10724 { &hf_gtpv2_tra_info_lsgsn_gb,
10725 {"Gb", "gtpv2.tra_info_lsgsn_gb",
10726 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10727 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10728 },
10729 { &hf_gtpv2_tra_info_lsgsn_lu,
10730 {"Iu", "gtpv2.tra_info_lsgsn_lu",
10731 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10732 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10733 },
10734 { &hf_gtpv2_tra_info_lsgsn_gn,
10735 {"Gn", "gtpv2.tra_info_lsgsn_gn",
10736 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10737 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10738 },
10739 { &hf_gtpv2_tra_info_lsgsn_map_gr,
10740 {"MAP-Gr", "gtpv2.tra_info_lsgsn_map_gr",
10741 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10742 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10743 },
10744 { &hf_gtpv2_tra_info_lsgsn_map_gd,
10745 {"MAP-Gd", "gtpv2.tra_info_lsgsn_map_gd",
10746 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10747 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10748 },
10749 { &hf_gtpv2_tra_info_lsgsn_map_gf,
10750 {"MAP-Gf", "gtpv2.tra_info_lsgsn_map_gf",
10751 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10752 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10753 },
10754 { &hf_gtpv2_tra_info_lsgsn_gs,
10755 {"Gs", "gtpv2.tra_info_lsgsn_gs",
10756 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10757 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10758 },
10759 { &hf_gtpv2_tra_info_lsgsn_ge,
10760 {"Ge", "gtpv2.tra_info_lsgsn_ge",
10761 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10762 "SGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10763 },
10764 { &hf_gtpv2_tra_info_lggsn_gn,
10765 {"Gn", "gtpv2.tra_info_lggsn_gn",
10766 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10767 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10768 },
10769 { &hf_gtpv2_tra_info_lggsn_gi,
10770 {"Gi", "gtpv2.tra_info_lggsn_gi",
10771 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10772 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10773 },
10774 { &hf_gtpv2_tra_info_lggsn_gmb,
10775 {"Gmb", "gtpv2.tra_info_lggsn_gmb",
10776 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10777 "GGSN", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10778 },
10779 { &hf_gtpv2_tra_info_lrnc_lu,
10780 {"Iu", "gtpv2.tra_info_lrnc_lu",
10781 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10782 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10783 },
10784 { &hf_gtpv2_tra_info_lrnc_lur,
10785 {"Iur", "gtpv2.tra_info_lrnc_lur",
10786 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10787 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10788 },
10789 { &hf_gtpv2_tra_info_lrnc_lub,
10790 {"Iub", "gtpv2.tra_info_lrnc_lub",
10791 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10792 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10793 },
10794 { &hf_gtpv2_tra_info_lrnc_uu,
10795 {"Uu", "gtpv2.tra_info_lrnc_uu",
10796 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10797 "RNC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10798 },
10799 { &hf_gtpv2_tra_info_lbm_sc_gmb,
10800 {"Gmb", "gtpv2.tra_info_lbm_sc_gmb",
10801 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10802 "BM-SC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10803 },
10804 { &hf_gtpv2_tra_info_lmme_s1_mme,
10805 {"S1-MME", "gtpv2.tra_info_lmme_s1_mme",
10806 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10807 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10808 },
10809 { &hf_gtpv2_tra_info_lmme_s3,
10810 {"S3", "gtpv2.tra_info_lmme_s3",
10811 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10812 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10813 },
10814 { &hf_gtpv2_tra_info_lmme_s6a,
10815 {"S6a", "gtpv2.tra_info_lmme_s6a",
10816 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10817 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10818 },
10819 { &hf_gtpv2_tra_info_lmme_s10,
10820 {"S10", "gtpv2.tra_info_lmme_s10",
10821 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10822 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10823 },
10824 { &hf_gtpv2_tra_info_lmme_s11,
10825 {"S11", "gtpv2.tra_info_lmme_s11",
10826 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10827 "MME", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10828 },
10829 { &hf_gtpv2_tra_info_lsgw_s4,
10830 {"S4", "gtpv2.tra_info_lsgw_s4",
10831 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10832 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10833 },
10834 { &hf_gtpv2_tra_info_lsgw_s5,
10835 {"S5", "gtpv2.tra_info_lsgw_s5",
10836 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10837 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10838 },
10839 { &hf_gtpv2_tra_info_lsgw_s8b,
10840 {"S8b", "gtpv2.tra_info_lsgw_s8b",
10841 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10842 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10843 },
10844 { &hf_gtpv2_tra_info_lsgw_s11,
10845 {"S11", "gtpv2.tra_info_lsgw_s11",
10846 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10847 "SGW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10848 },
10849 { &hf_gtpv2_tra_info_lpdn_gw_s2a,
10850 {"S2a", "gtpv2.tra_info_lpdn_gw_s2a",
10851 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10852 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10853 },
10854 { &hf_gtpv2_tra_info_lpdn_gw_s2b,
10855 {"S2b", "gtpv2.tra_info_lpdn_gw_s2b",
10856 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10857 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10858 },
10859 { &hf_gtpv2_tra_info_lpdn_gw_s2c,
10860 {"S2c", "gtpv2.tra_info_lpdn_gw_s2c",
10861 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10862 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10863 },
10864 { &hf_gtpv2_tra_info_lpdn_gw_s5,
10865 {"S5", "gtpv2.tra_info_lpdn_gw_s5",
10866 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
10867 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10868 },
10869 { &hf_gtpv2_tra_info_lpdn_gw_s6c,
10870 {"S6c", "gtpv2.tra_info_lpdn_gw_s6c",
10871 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
10872 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10873 },
10874 { &hf_gtpv2_tra_info_lpdn_gw_gx,
10875 {"Gx", "gtpv2.tra_info_lpdn_gw_gx",
10876 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
10877 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10878 },
10879 { &hf_gtpv2_tra_info_lpdn_gw_s8b,
10880 {"S8b", "gtpv2.tra_info_lpdn_gw_s8b",
10881 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
10882 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10883 },
10884 { &hf_gtpv2_tra_info_lpdn_gw_sgi,
10885 {"SGi", "gtpv2.tra_info_lpdn_gw_sgi",
10886 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
10887 "PDN GW", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10888 },
10889 { &hf_gtpv2_tra_info_lenb_s1_mme,
10890 {"S1-MME", "gtpv2.tra_info_lenb_s1_mme",
10891 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
10892 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10893 },
10894 { &hf_gtpv2_tra_info_lenb_x2,
10895 {"X2", "gtpv2.tra_info_lenb_x2",
10896 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
10897 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10898 },
10899 { &hf_gtpv2_tra_info_lenb_uu,
10900 {"Uu", "gtpv2.tra_info_lenb_uu",
10901 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
10902 "eNB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10903 },
10904 { &hf_gtpv2_pdn_ipv4,
10905 {"PDN Address and Prefix(IPv4)", "gtpv2.pdn_addr_and_prefix.ipv4",
10906 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
10907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10908 },
10909 { &hf_gtpv2_pdn_ipv6_len,
10910 {"IPv6 Prefix Length", "gtpv2.pdn_ipv6_len",
10911 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10913 },
10914 { &hf_gtpv2_pdn_ipv6,
10915 {"PDN Address and Prefix(IPv6)", "gtpv2.pdn_addr_and_prefix.ipv6",
10916 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
10917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10918 },
10919 /* Bit 7 - PCI (Pre-emption Capability): See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP.
10920 * clause 5.3.46 Pre-emption-Capability AVP.
10921 * 5.3.46 Pre-emption-Capability AVP
10922 * The following values are defined:
10923 * PRE-EMPTION_CAPABILITY_ENABLED (0)
10924 * PRE-EMPTION_CAPABILITY_DISABLED (1)
10925 */
10926 {&hf_gtpv2_bearer_qos_pci,
10927 {"PCI (Pre-emption Capability)", "gtpv2.bearer_qos_pci",
10928 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x40,
10929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10930 },
10931 {&hf_gtpv2_bearer_qos_pl,
10932 {"PL (Priority Level)", "gtpv2.bearer_qos_pl",
10933 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
10934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10935 },
10936 /* Bit 1 - PVI (Pre-emption Vulnerability): See 3GPP TS 29.212[29],
10937 * clause 5.3.47 Pre-emption-Vulnerability AVP.
10938 * 5.3.47 Pre-emption-Vulnerability AVP
10939 * The following values are defined:
10940 * PRE-EMPTION_VULNERABILITY_ENABLED (0)
10941 * PRE-EMPTION_VULNERABILITY_DISABLED (1)
10942 */
10943 {&hf_gtpv2_bearer_qos_pvi,
10944 {"PVI (Pre-emption Vulnerability)", "gtpv2.bearer_qos_pvi",
10945 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x01,
10946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10947 },
10948 {&hf_gtpv2_bearer_qos_label_qci,
10949 {"Label (QCI)", "gtpv2.bearer_qos_label_qci",
10950 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10952 },
10953 {&hf_gtpv2_bearer_qos_mbr_up,
10954 {"Maximum Bit Rate For Uplink", "gtpv2.bearer_qos_mbr_up",
10955 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10957 },
10958 {&hf_gtpv2_bearer_qos_mbr_down,
10959 {"Maximum Bit Rate For Downlink", "gtpv2.bearer_qos_mbr_down",
10960 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10962 },
10963 {&hf_gtpv2_bearer_qos_gbr_up,
10964 {"Guaranteed Bit Rate For Uplink", "gtpv2.bearer_qos_gbr_up",
10965 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10967 },
10968 {&hf_gtpv2_bearer_qos_gbr_down,
10969 {"Guaranteed Bit Rate For Downlink", "gtpv2.bearer_qos_gbr_down",
10970 FT_UINT64, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0x0,
10971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10972 },
10973 {&hf_gtpv2_flow_qos_label_qci,
10974 {"Label (QCI)", "gtpv2.flow_qos_label_qci",
10975 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
10976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10977 },
10978 {&hf_gtpv2_flow_qos_mbr_up,
10979 {"Maximum Bit Rate For Uplink", "gtpv2.flow_qos_mbr_up",
10980 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10982 },
10983 {&hf_gtpv2_flow_qos_mbr_down,
10984 {"Maximum Bit Rate For Downlink", "gtpv2.flow_qos_mbr_down",
10985 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10987 },
10988 {&hf_gtpv2_flow_qos_gbr_up,
10989 {"Guaranteed Bit Rate For Uplink", "gtpv2.flow_qos_gbr_up",
10990 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10992 },
10993 {&hf_gtpv2_flow_qos_gbr_down,
10994 {"Guaranteed Bit Rate For Downlink", "gtpv2.flow_qos_gbr_down",
10995 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
10996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
10997 },
10998 { &hf_gtpv2_rat_type,
10999 {"RAT Type", "gtpv2.rat_type",
11000 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_rat_type_vals_ext, 0x0,
11001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11002 },
11003 { &hf_gtpv2_uli_ecgi_flg,
11004 {"ECGI Present", "gtpv2.uli_ecgi_flg",
11005 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_ECGI_MASK0x10,
11006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11007 },
11008 { &hf_gtpv2_uli_ext_macro_enb_id_flg,
11009 {"Extended Macro eNodeB ID Present", "gtpv2.uli_ext_macro_enb_id_flg",
11010 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_EXT_MACRO_eNB_ID_MASK0x80,
11011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11012 },
11013 { &hf_gtpv2_uli_macro_enb_id_flg,
11014 {"Macro eNodeB ID Present", "gtpv2.uli_macro_enb_id_flg",
11015 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_MACRO_eNB_ID_MASK0x40,
11016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11017 },
11018 { &hf_gtpv2_uli_lai_flg,
11019 {"LAI Present", "gtpv2.uli_lai_flg",
11020 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_LAI_MASK0x20,
11021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11022 },
11023 { &hf_gtpv2_uli_tai_flg,
11024 {"TAI Present", "gtpv2.uli_tai_flg",
11025 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_TAI_MASK0x08,
11026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11027 },
11028 { &hf_gtpv2_uli_rai_flg,
11029 {"RAI Present", "gtpv2.uli_rai_flg",
11030 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_RAI_MASK0x04,
11031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11032 },
11033 { &hf_gtpv2_uli_sai_flg,
11034 {"SAI Present", "gtpv2.uli_sai_flg",
11035 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_SAI_MASK0x02,
11036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11037 },
11038 { &hf_gtpv2_uli_cgi_flg,
11039 {"CGI Present", "gtpv2.uli_cgi_flg",
11040 FT_BOOLEAN, 8, NULL((void*)0), GTPv2_ULI_CGI_MASK0x01,
11041 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11042 },
11043 { &hf_gtpv2_glt,
11044 {"Geographic Location Type", "gtpv2.glt",
11045 FT_UINT8, BASE_DEC, VALS(geographic_location_type_vals)((0 ? (const struct _value_string*)0 : ((geographic_location_type_vals
))))
, 0x0,
11046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11047 },
11048 { &hf_gtpv2_uli_cgi_lac,
11049 {"Location Area Code", "gtpv2.uli_cgi_lac",
11050 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11052 },
11053 { &hf_gtpv2_uli_cgi_ci,
11054 {"Cell Identity", "gtpv2.uli_cgi_ci",
11055 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11057 },
11058 { &hf_gtpv2_sai_lac,
11059 {"Location Area Code", "gtpv2.sai_lac",
11060 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11062 },
11063 { &hf_gtpv2_sai_sac,
11064 {"Service Area Code", "gtpv2.sai_sac",
11065 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11067 },
11068 { &hf_gtpv2_rai_lac,
11069 {"Location Area Code", "gtpv2.rai_lac",
11070 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11072 },
11073 { &hf_gtpv2_rai_rac,
11074 {"Routing Area Code", "gtpv2.rai_rac",
11075 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
11076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11077 },
11078 { &hf_gtpv2_tai_tac,
11079 {"Tracking Area Code", "gtpv2.tai_tac",
11080 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11082 },
11083 { &hf_gtpv2_tai_tac_name,
11084 {"Tracking Area Name", "gtpv2.tai_tac_name",
11085 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
11086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11087 },
11088 { &hf_gtpv2_5gs_tai_tac,
11089 {"5GS Tracking Area Code", "gtpv2.5gs_tai_tac",
11090 FT_UINT24, BASE_HEX_DEC, NULL((void*)0), 0x0,
11091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11092 },
11093 {&hf_gtpv2_ecgi_eci,
11094 {"ECI (E-UTRAN Cell Identifier)", "gtpv2.ecgi_eci",
11095 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11097 },
11098 {&hf_gtpv2_ncgi_nrci,
11099 {"NR Cell Identifier", "gtpv2.ncgi_nrci",
11100 FT_UINT40, BASE_HEX, NULL((void*)0), 0xfffffffff0,
11101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11102 },
11103 {&hf_gtpv2_uli_lai_lac,
11104 {"Location Area Code (LAC)", "gtpv2.uli_lai_lac",
11105 FT_UINT16, BASE_HEX_DEC, NULL((void*)0), 0x0,
11106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11107 },
11108 {&hf_gtpv2_ecgi_eci_spare,
11109 {"Spare", "gtpv2.uli_ecgi_eci_spare",
11110 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11112 },
11113 { &hf_gtpv2_nsapi,
11114 {"NSAPI", "gtpv2.nsapi",
11115 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
11116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11117 },
11118 {&hf_gtpv2_f_teid_v4,
11119 {"V4", "gtpv2.f_teid_v4",
11120 FT_BOOLEAN, 8, TFS(&gtpv2_f_teid_v4_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_f_teid_v4_vals
))))
, 0x80,
11121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11122 },
11123 {&hf_gtpv2_f_teid_v6,
11124 {"V6", "gtpv2.f_teid_v6",
11125 FT_BOOLEAN, 8, TFS(&gtpv2_f_teid_v6_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_f_teid_v6_vals
))))
, 0x40,
11126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11127 },
11128 {&hf_gtpv2_f_teid_interface_type,
11129 {"Interface Type", "gtpv2.f_teid_interface_type",
11130 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_f_teid_interface_type_vals_ext, 0x3f,
11131 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11132 },
11133 {&hf_gtpv2_f_teid_gre_key,
11134 {"TEID/GRE Key", "gtpv2.f_teid_gre_key",
11135 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11136 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11137 },
11138 { &hf_gtpv2_f_teid_ipv4,
11139 {"F-TEID IPv4", "gtpv2.f_teid_ipv4",
11140 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11142 },
11143 { &hf_gtpv2_f_teid_ipv6,
11144 {"F-TEID IPv6", "gtpv2.f_teid_ipv6",
11145 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11147 },
11148 { &hf_gtpv2_tmsi,
11149 {"TMSI", "gtpv2.tmsi",
11150 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
11151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11152 },
11153 { &hf_gtpv2_hsgw_addr_f_len,
11154 {"HSGW Address for forwarding Length", "gtpv2.hsgw_addr_f_len",
11155 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11157 },
11158 { &hf_gtpv2_hsgw_addr_ipv4,
11159 {"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv4",
11160 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11162 },
11163 { &hf_gtpv2_hsgw_addr_ipv6,
11164 {"HSGW Address for forwarding", "gtpv2.hsgw_addr_ipv6",
11165 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11167 },
11168 { &hf_gtpv2_gre_key,
11169 {"GRE Key", "gtpv2.gre_key",
11170 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11171 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11172 },
11173 { &hf_gtpv2_sgw_addr_ipv4,
11174 {"Serving GW Address", "gtpv2.sgw_addr_ipv4",
11175 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11177 },
11178 { &hf_gtpv2_sgw_addr_ipv6,
11179 {"Serving GW Address", "gtpv2.sgw_addr_ipv6",
11180 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11182 },
11183 { &hf_gtpv2_sgw_s1u_teid,
11184 {"Serving GW S1-U TEID", "gtpv2.sgw_s1u_teid",
11185 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11187 },
11188 {&hf_gtpv2_delay_value,
11189 {"Delay Value (In integer multiples of 50 milliseconds or zero)", "gtpv2.delay_value",
11190 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11192 },
11193 {&hf_gtpv2_charging_id,
11194 {"Charging id", "gtpv2.charging_id",
11195 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
11196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11197 },
11198 {&hf_gtpv2_charging_characteristic,
11199 {"Charging Characteristic", "gtpv2.charging_characteristic",
11200 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
11201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11202 },
11203 {&hf_gtpv2_bearer_flag_ppc,
11204 {"PPC (Prohibit Payload Compression)", "gtpv2.bearer_flag.ppc",
11205 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11207 },
11208 {&hf_gtpv2_bearer_flag_vb,
11209 {"VB (Voice Bearer)", "gtpv2.bearer_flag.vb",
11210 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11212 },
11213 {&hf_gtpv2_pti,
11214 {"Procedure Transaction Id", "gtpv2.pti",
11215 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11217 },
11218 /* MM Context */
11219 { &hf_gtpv2_mm_context_sm,
11220 {"Security Mode", "gtpv2.mm_context_sm",
11221 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_security_mode)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_security_mode
))))
, 0xe0,
11222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11223 },
11224 { &hf_gtpv2_mm_context_nhi,
11225 {"NHI(Next Hop Indicator)", "gtpv2.mm_context_nhi",
11226 FT_BOOLEAN, 8, TFS(&gtpv2_nhi_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_nhi_vals
))))
, 0x10,
11227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11228 },
11229 { &hf_gtpv2_mm_context_drxi,
11230 {"DRXI", "gtpv2.mm_context_drxi",
11231 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
11232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11233 },
11234 { &hf_gtpv2_mm_context_cksn,
11235 {"CKSN", "gtpv2.mm_context_cksn",
11236 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11238 },
11239 { &hf_gtpv2_mm_context_cksn_ksi,
11240 {"CKSN/KSI", "gtpv2.mm_context_cksn_ksi",
11241 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11243 },
11244 { &hf_gtpv2_metric,
11245 {"Metric", "gtpv2.metric",
11246 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11248 },
11249 { &hf_gtpv2_throttling_factor,
11250 {"Throttling Factor", "gtpv2.throttling_factor",
11251 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11253 },
11254 { &hf_gtpv2_relative_capacity,
11255 {"Relative Capacity", "gtpv2.relative_capacity",
11256 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11258 },
11259 { &hf_gtpv2_apn_length,
11260 {"APN Length", "gtpv2.apn_length",
11261 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
11262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11263 },
11264 { &hf_gtpv2_sequence_number,
11265 {"Sequence Number", "gtpv2.sequence_number",
11266 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
11267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11268 },
11269 { &hf_gtpv2_mm_context_ksi_a,
11270 {"KSI_asme", "gtpv2.mm_context_ksi_a",
11271 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11273 },
11274 { &hf_gtpv2_mm_context_nr_tri,
11275 {"Number of Triplet", "gtpv2.mm_context_nr_tri",
11276 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
11277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11278 },
11279 { &hf_gtpv2_mm_context_used_cipher,
11280 {"Used Cipher", "gtpv2.mm_context_used_cipher",
11281 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_used_cipher_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_used_cipher_vals
))))
, 0x07,
11282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11283 },
11284 { &hf_gtpv2_mm_context_unipa,
11285 {"Used NAS integrity protection algorithm", "gtpv2.mm_context_unipa",
11286 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unipa_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_unipa_vals
))))
, 0x70,
11287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11288 },
11289
11290 { &hf_gtpv2_mm_context_unc,
11291 {"Used NAS Cipher", "gtpv2.mm_context_unc",
11292 FT_UINT8, BASE_DEC, VALS(gtpv2_mm_context_unc_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mm_context_unc_vals
))))
, 0x0f,
11293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11294 },
11295 { &hf_gtpv2_mm_context_nas_dl_cnt,
11296 {"NAS Downlink Count", "gtpv2.mm_context_nas_dl_cnt",
11297 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
11298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11299 },
11300 { &hf_gtpv2_mm_context_nas_ul_cnt,
11301 {"NAS Uplink Count", "gtpv2.mm_context_nas_ul_cnt",
11302 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
11303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11304 },
11305 { &hf_gtpv2_mm_context_kasme,
11306 {"Kasme", "gtpv2.mm_context_kasme",
11307 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11309 },
11310 { &hf_gtpv2_mm_context_rand,
11311 {"RAND", "gtpv2.mm_context_rand",
11312 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11314 },
11315 {&hf_gtpv2_uci_csg_id,
11316 {"CSG ID", "gtpv2.cui_csg_id",
11317 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07FFFFFF,
11318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11319 },
11320 {&hf_gtpv2_uci_csg_id_spare,
11321 {"Spare", "gtpv2.cui_csg_id_spare",
11322 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8,
11323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11324 },
11325 { &hf_gtpv2_uci_csg_membership,
11326 { "CSG Membership Indication", "gtpv2.uci_csg_membership",
11327 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_csg_membership_status)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_csg_membership_status
))))
, 0x01,
11328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11329 },
11330 { &hf_gtpv2_uci_access_mode,
11331 {"Access Mode", "gtpv2.uci_access_mode",
11332 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_access_mode)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_access_mode
))))
, 0xC0,
11333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11334 },
11335 { &hf_gtpv2_uci_lcsg,
11336 {"Leave CSG", "gtpv2.uci_leave_csg",
11337 FT_UINT8, BASE_DEC, VALS(gtpv2_uci_leave_csg)((0 ? (const struct _value_string*)0 : ((gtpv2_uci_leave_csg)
)))
, 0x02,
11338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11339 },
11340 { &hf_gtpv2_mm_context_xres_len,
11341 {"XRES Length", "gtpv2.mm_context_xres_len",
11342 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11344 },
11345 { &hf_gtpv2_mm_context_xres,
11346 {"XRES", "gtpv2.mm_context_xres",
11347 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11349 },
11350 { &hf_gtpv2_mm_context_autn_len,
11351 {"AUTN Length", "gtpv2.mm_context_autn_len",
11352 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11354 },
11355 { &hf_gtpv2_mm_context_autn,
11356 {"AUTN", "gtpv2.mm_context_autn",
11357 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11359 },
11360 { &hf_gtpv2_mm_context_drx,
11361 {"DRX", "gtpv2.mm_context_drx",
11362 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
11363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11364 },
11365 { &hf_gtpv2_vdp_length,
11366 {"VDP and UE's Usage Setting length", "gtpv2.vdp_length",
11367 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11369 },
11370
11371 { &hf_gtpv2_mm_context_ue_net_cap_len,
11372 {"Length of UE Network Capability", "gtpv2.mm_context_ue_net_cap_len",
11373 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11375 },
11376 { &hf_gtpv2_mm_context_ms_net_cap_len,
11377 {"Length of MS Network Capability", "gtpv2.mm_context_ms_net_cap_len",
11378 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11380 },
11381 { &hf_gtpv2_mm_context_mei_len,
11382 {"Length of Mobile Equipment Identity (MEI)", "gtpv2.mm_context_mei_len",
11383 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11385 },
11386 { &hf_gtpv2_mm_contex_nhi_old,
11387 { "Next Hop Indicator for old EPS Security Context", "gtpv2.mm_context_nhi_old",
11388 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
11389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11390 },
11391 { &hf_gtpv2_mm_context_old_ksiasme,
11392 { "old KSIASME", "gtpv2.old_ksiasme",
11393 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38,
11394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11395 },
11396 { &hf_gtpv2_mm_context_old_ncc,
11397 { "old NCC", "gtpv2.old_ncc",
11398 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11400 },
11401 { &hf_gtpv2_mm_context_old_kasme,
11402 { "Old Kasme", "gtpv2.mm_context_old_kasme",
11403 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11405 },
11406 { &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) } },
11407 { &hf_gtpv2_mm_context_vdp_len,
11408 { "Length of Voice Domain Preference and UE's Usage Setting", "gtpv2.mm_context.vdp_len",
11409 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11411 },
11412 { &hf_gtpv2_mm_context_paging_len,
11413 { "Length of UE Radio Capability for Paging information", "gtpv2.mm_context.paging_len",
11414 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11416 },
11417 { &hf_gtpv2_mm_context_ex_access_res_data_len,
11418 { "Length of Extended Access Restriction Data", "gtpv2.mm_context.ex_access_res_data_len",
11419 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11421 },
11422 { &hf_gtpv2_mm_context_ue_add_sec_cap_len,
11423 { "Length of UE additional security capability", "gtpv2.mm_context.ue_add_sec_cap_len",
11424 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11426 },
11427 { &hf_gtpv2_mm_context_ue_nr_sec_cap_len,
11428 { "Length of UE NR security capability", "gtpv2.mm_context.ue_nr_sec_cap_len",
11429 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11431 },
11432 { &hf_gtpv2_mm_context_apn_rte_ctrl_sts_len,
11433 { "Length of APN Rate Control Statuses", "gtpv2.mm_context.apn_rte_ctrl_sts_len",
11434 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11436 },
11437 { &hf_gtpv2_mm_context_cnr_len,
11438 { "Length of Core Network Restrictions", "gtpv2.mm_context.cnr_len",
11439 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11441 },
11442 { &hf_gtpv2_mm_context_ue_radio_cap_len,
11443 { "Length of UE Radio Capability ID", "gtpv2.mm_context.radio_cap_len",
11444 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11446 },
11447 { &hf_gtpv2_una,
11448 { "UTRAN", "gtpv2.mm_context.una",
11449 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x01,
11450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11451 },
11452 { &hf_gtpv2_gena,
11453 { "GERAN", "gtpv2.mm_context.gena",
11454 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x02,
11455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11456 },
11457 { &hf_gtpv2_gana,
11458 { "GAN", "gtpv2.mm_context.gana",
11459 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x04,
11460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11461 },
11462 { &hf_gtpv2_ina,
11463 { "I-HSPA-EVOLUTION", "gtpv2.mm_context.ina",
11464 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x08,
11465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11466 },
11467 { &hf_gtpv2_ena,
11468 { "E-UTRAN", "gtpv2.mm_context.ena",
11469 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x10,
11470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11471 },
11472 { &hf_gtpv2_hnna,
11473 { "HO-toNone3GPP-Access", "gtpv2.mm_context.hnna",
11474 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x20,
11475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11476 },
11477 { &hf_gtpv2_hbna,
11478 { "NB-IoT Not Allowed", "gtpv2.mm_context.hbna",
11479 FT_BOOLEAN, 8, TFS(&tfs_not_allowed_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_not_allowed_allowed
))))
, 0x40,
11480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11481 },
11482 { &hf_gtpv2_mm_context_ksi,
11483 {"KSI", "gtpv2.mm_context_ksi",
11484 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11486 },
11487 { &hf_gtpv2_mm_context_nr_qui,
11488 {"Number of Quintuplets", "gtpv2.mm_context_nr_qui",
11489 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
11490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11491 },
11492
11493 { &hf_gtpv2_mm_context_nr_qua,
11494 {"Number of Quadruplet", "gtpv2.mm_context_nr_qua",
11495 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1c,
11496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11497 },
11498 { &hf_gtpv2_mm_context_uamb_ri,
11499 {"UAMB RI", "gtpv2.mm_context_uamb_ri",
11500 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11502 },
11503 { &hf_gtpv2_mm_context_osci,
11504 {"OSCI", "gtpv2.mm_context_osci",
11505 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11506 "Old Security Context Indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11507 },
11508 { &hf_gtpv2_mm_context_nruna,
11509 { "NRUNA (NR-U in 5GS Not Allowed)", "gtpv2.mm_context.nruna",
11510 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
11511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11512 },
11513 { &hf_gtpv2_mm_context_nrusrna,
11514 { "NRUSRNA (New Radio Unlicensed as Secondary RAT Not Allowed)", "gtpv2.mm_context.nrusrna",
11515 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
11516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11517 },
11518 { &hf_gtpv2_mm_context_nrna,
11519 { "NRNA(NR in 5GS Not Allowed)", "gtpv2.mm_context.nrna",
11520 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
11521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11522 },
11523 { &hf_gtpv2_mm_context_ussrna,
11524 {"USSRNA", "gtpv2.mm_context_ussrna",
11525 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11526 "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)}
11527 },
11528 { &hf_gtpv2_mm_context_nrsrna,
11529 {"NRSRNA(NR as Secondary RAT Not Allowed)", "gtpv2.mm_context_nrsrna",
11530 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11532 },
11533 { &hf_gtpv2_mm_context_ensct,
11534 {"ENSCT (EPS NAS Security Context Type)", "gtpv2.mm_context_ensct",
11535 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,
11536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11537 },
11538 { &hf_gtpv2_mm_context_samb_ri,
11539 {"SAMB RI", "gtpv2.mm_context_samb_ri",
11540 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
11541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11542 },
11543 { &hf_gtpv2_ue_time_zone_dst,
11544 {"Daylight Saving Time", "gtpv2.ue_time_zone_dst",
11545 FT_UINT8, BASE_DEC, VALS(gtpv2_ue_time_zone_dst_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_ue_time_zone_dst_vals
))))
, 0x03,
11546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11547 },
11548 { &hf_gtpv2_fq_csid_type,
11549 {"Node-ID Type", "gtpv2.fq_csid_type",
11550 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
11551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11552 },
11553 { &hf_gtpv2_fq_csid_nr,
11554 {"Number of CSIDs", "gtpv2.fq_csid_nr",
11555 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
11556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11557 },
11558 { &hf_gtpv2_fq_csid_ipv4,
11559 {"Node-ID (IPv4)", "gtpv2.fq_csid_ipv4",
11560 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11562 },
11563 { &hf_gtpv2_fq_csid_ipv6,
11564 {"Node-ID (IPv6)", "gtpv2.fq_csid_ipv6",
11565 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11567 },
11568 { &hf_gtpv2_fq_csid_id,
11569 {"CSID", "gtpv2.fq_csid_id",
11570 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11572 },
11573 { &hf_gtpv2_complete_req_msg_type,
11574 {"Complete Request Message Type", "gtpv2.complete_req_msg_type",
11575 FT_UINT8, BASE_DEC, VALS(gtpv2_complete_req_msg_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_complete_req_msg_type_vals
))))
, 0x0,
11576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11577 },
11578 {&hf_gtpv2_mme_grp_id,
11579 {"MME Group ID", "gtpv2.mme_grp_id",
11580 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11582 },
11583 { &hf_gtpv2_mme_code,
11584 {"MME Code", "gtpv2.mme_code",
11585 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11587 },
11588 { &hf_gtpv2_m_tmsi,
11589 {"M-TMSI", "gtpv2.m_tmsi",
11590 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11592 },
11593 { &hf_gtpv2_container_type,
11594 {"Container Type", "gtpv2.container_type",
11595 FT_UINT8, BASE_DEC, VALS(gtpv2_container_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_container_type_vals
))))
, 0x0f,
11596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11597 },
11598 { &hf_gtpv2_cause_type,
11599 {"Cause Type", "gtpv2.cause_type",
11600 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_cause_type_vals_ext, 0x0f,
11601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11602 },
11603 { &hf_gtpv2_CauseRadioNetwork,
11604 {"Radio Network Layer Cause", "gtpv2.CauseRadioNetwork",
11605 FT_UINT8, BASE_DEC, VALS(s1ap_CauseRadioNetwork_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseRadioNetwork_vals
))))
, 0x0,
11606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11607 },
11608 { &hf_gtpv2_CauseTransport,
11609 {"Transport Layer Cause", "gtpv2.CauseTransport",
11610 FT_UINT8, BASE_DEC, VALS(s1ap_CauseTransport_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseTransport_vals
))))
, 0x0,
11611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11612 },
11613 { &hf_gtpv2_CauseNas,
11614 {"NAS Cause", "gtpv2.CauseNas",
11615 FT_UINT8, BASE_DEC, VALS(s1ap_CauseNas_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseNas_vals))
))
, 0x0,
11616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11617 },
11618 { &hf_gtpv2_CauseMisc,
11619 {"Miscellaneous Cause", "gtpv2.CauseMisc",
11620 FT_UINT8, BASE_DEC, VALS(s1ap_CauseMisc_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseMisc_vals)
)))
, 0x0,
11621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11622 },
11623 { &hf_gtpv2_target_type,
11624 {"Target Type", "gtpv2.target_type",
11625 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_target_type_vals_ext, 0x0,
11626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11627 },
11628 {&hf_gtpv2_macro_enodeb_id,
11629 {"Macro eNodeB ID", "gtpv2.macro_enodeb_id",
11630 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0fffff,
11631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11632 },
11633 {&hf_gtpv2_smenb,
11634 {"SMeNB", "gtpv2.smenb",
11635 FT_BOOLEAN, 8, TFS(&gtpv2_smenb)((0 ? (const struct true_false_string*)0 : ((&gtpv2_smenb
))))
, 0x80,
11636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11637 },
11638 {&hf_gtpv2_ext_macro_enodeb_id,
11639 {"Extended Macro eNodeB ID", "gtpv2.ext_macro_enodeb_id",
11640 FT_UINT24, BASE_HEX, NULL((void*)0), 0x1fffff,
11641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11642 },
11643 {&hf_gtpv2_ext_macro_ng_enodeb_id,
11644 {"Extended Macro ng-eNodeB ID", "gtpv2.ext_macro_ng_enodeb_id",
11645 FT_UINT24, BASE_HEX, NULL((void*)0), 0x1fffff,
11646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11647 },
11648 {&hf_gtpv2_cellid,
11649 {"CellId", "gtpv2.cellid",
11650 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFF,
11651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11652 },
11653 { &hf_gtpv2_enodebid,
11654 { "eNodeB Id", "gtpv2.enodebid",
11655 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0FFFFF00,
11656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11657 },
11658 { &hf_gtpv2_CauseProtocol,
11659 {"Protocol Cause", "gtpv2.CauseProtocol",
11660 FT_UINT8, BASE_DEC, VALS(s1ap_CauseProtocol_vals)((0 ? (const struct _value_string*)0 : ((s1ap_CauseProtocol_vals
))))
, 0x0,
11661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11662 },
11663 {&hf_gtpv2_apn_rest,
11664 {"APN Restriction", "gtpv2.apn_rest",
11665 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_apn_restriction_vals_ext, 0x0,
11666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11667 },
11668 {&hf_gtpv2_selec_mode,
11669 {"Selection Mode", "gtpv2.selec_mode",
11670 FT_UINT8, BASE_DEC, VALS(gtpv2_selec_mode_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_selec_mode_vals
))))
, 0x03,
11671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11672 },
11673 { &hf_gtpv2_source_type,
11674 {"Source Type", "gtpv2.source_type",
11675 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11677 },
11678 {&hf_gtpv2_bearer_control_mode,
11679 {"Bearer Control Mode", "gtpv2.bearer_control_mode",
11680 FT_UINT8, BASE_DEC, VALS(gtpv2_bearer_control_mode_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_bearer_control_mode_vals
))))
, 0x0,
11681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11682 },
11683 { &hf_gtpv2_cng_rep_act,
11684 {"Change Reporting Action", "gtpv2.cng_rep_act",
11685 FT_UINT8, BASE_DEC, VALS(gtpv2_cng_rep_act_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_cng_rep_act_vals
))))
, 0x0,
11686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11687 },
11688 { &hf_gtpv2_node_type,
11689 {"Node Type", "gtpv2.node_type",
11690 FT_UINT8, BASE_DEC, VALS(gtpv2_node_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_node_type_vals
))))
, 0x0,
11691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11692 },
11693 {&hf_gtpv2_fqdn,
11694 {"FQDN", "gtpv2.fqdn",
11695 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
11696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11697 },
11698 { &hf_gtpv2_enterprise_id,
11699 {"Enterprise ID", "gtpv2.enterprise_id",
11700 FT_UINT16, BASE_ENTERPRISESBASE_CUSTOM, STRINGS_ENTERPRISES((const void *) (size_t) (enterprises_base_custom)), 0x0,
11701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11702 },
11703 { &hf_gtpv2_ti,
11704 {"Transaction Identifier", "gtpv2.ti",
11705 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11707 },
11708 { &hf_gtpv2_bss_container_phx,
11709 {"PHX", "gtpv2.bss_cont.phx",
11710 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
11711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11712 },
11713 { &hf_gtpv2_bss_con_sapi_flg,
11714 {"SAPI", "gtpv2.bss_cont.sapi_flg",
11715 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
11716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11717 },
11718 { &hf_gtpv2_bss_con_rp_flg,
11719 {"RP", "gtpv2.bss_cont.rp_flg",
11720 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
11721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11722 },
11723 { &hf_gtpv2_bss_con_pfi_flg,
11724 {"PFI", "gtpv2.bss_cont.pfi_flg",
11725 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
11726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11727 },
11728 { &hf_gtpv2_bss_con_pfi,
11729 {"Packet Flow ID(PFI)", "gtpv2.bss_cont.pfi",
11730 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11732 },
11733 { &hf_gtpv2_bss_con_rp,
11734 {"Radio Priority(RP)", "gtpv2.bss_cont.rp",
11735 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
11736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11737 },
11738 { &hf_gtpv2_bss_con_sapi,
11739 {"SAPI", "gtpv2.bss_cont.sapi",
11740 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
11741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11742 },
11743 { &hf_gtpv2_bss_con_xid_len,
11744 {"XiD parameters length", "gtpv2.bss_cont.xid_len",
11745 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11747 },
11748 { &hf_gtpv2_bss_con_xid,
11749 {"XiD parameters", "gtpv2.bss_cont.xid",
11750 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11752 },
11753 { &hf_gtpv2_home_enodeb_id,
11754 {"Home eNodeB ID", "gtpv2.home_enodeb_id",
11755 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0fffffff,
11756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11757 },
11758 { &hf_gtpv2_tac,
11759 {"Tracking Area Code (TAC)", "gtpv2.tac",
11760 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11762 },
11763 { &hf_gtpv2_mbms_service_area_nr,
11764 {"Number of MBMS Service Area codes", "gtpv2.mbms_service_area_nr",
11765 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11767 },
11768 { &hf_gtpv2_mbms_service_area_id,
11769 {"MBMS Service Area code (Service Area Identity)", "gtpv2.mbms_service_area_id",
11770 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
11771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11772 },
11773 { &hf_gtpv2_mbms_session_id,
11774 {"MBMS Session Identifier", "gtpv2.mbms_session_id",
11775 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11777 },
11778 { &hf_gtpv2_mbms_flow_id,
11779 {"MBMS Flow Identifier", "gtpv2.mbms_flow_id",
11780 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11782 },
11783 { &hf_gtpv2_cteid,
11784 {"Common Tunnel Endpoint Identifier", "gtpv2.cetid",
11785 FT_UINT32, BASE_HEX_DEC, NULL((void*)0), 0x0,
11786 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11787 },
11788 { &hf_gtpv2_ip_addr_type,
11789 {"IP Address Type", "gtpv2.ip_addr_type",
11790 FT_UINT8, BASE_DEC, NULL((void*)0), 0xc0,
11791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11792 },
11793 { &hf_gtpv2_ip_addr_len,
11794 {"IP Address Length", "gtpv2.ip_addr_len",
11795 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
11796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11797 },
11798 { &hf_gtpv2_mbms_ip_mc_dist_addrv4,
11799 {"MBMS IP Multicast Distribution Address (IPv4)", "gtpv2.mbms_ip_mc_dist_addrv4",
11800 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11802 },
11803 { &hf_gtpv2_mbms_ip_mc_dist_addrv6,
11804 {"MBMS IP Multicast Distribution Address (IPv6)", "gtpv2.mbms_ip_mc_dist_addrv6",
11805 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11807 },
11808 { &hf_gtpv2_mbms_ip_mc_src_addrv4,
11809 {"MBMS IP Multicast Source Address (IPv4)", "gtpv2.mbms_ip_mc_src_addrv4",
11810 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11812 },
11813 { &hf_gtpv2_mbms_ip_mc_src_addrv6,
11814 {"MBMS IP Multicast Source Address (IPv6)", "gtpv2.mbms_ip_mc_src_addrv6",
11815 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
11816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11817 },
11818 { &hf_gtpv2_mbms_hc_indicator,
11819 {"MBMS HC Indicator", "gtpv2.mbms_hc_indicator",
11820 FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_hc_indicator_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mbms_hc_indicator_vals
))))
, 0x0,
11821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11822 },
11823 { &hf_gtpv2_mbms_dist_indication,
11824 {"MBMS Distribution Indication", "gtpv2.mbms_dist_indication",
11825 FT_UINT8, BASE_DEC, VALS(gtpv2_mbms_dist_indication_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_mbms_dist_indication_vals
))))
, 0x03,
11826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11827 },
11828 { &hf_gtpv2_subscriber_rfsp,
11829 {"Subscribed RFSP Index", "gtpv2.subscriber_rfsp",
11830 FT_INT16, BASE_DEC, NULL((void*)0), 0x0,
11831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11832 },
11833 { &hf_gtpv2_rfsp_inuse,
11834 {"RFSP Index in Use", "gtpv2.rfsp_inuse",
11835 FT_INT16, BASE_DEC, NULL((void*)0), 0x0,
11836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11837 },
11838 { &hf_gtpv2_mbms_service_id,
11839 {"MBMS Service ID", "gtpv2.mbms_service_id",
11840 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
11841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11842 },
11843 { &hf_gtpv2_add_flags_for_srvcc_ics,
11844 {"ICS (IMS Centralized Service)", "gtpv2.add_flags_for_srvcc_ics",
11845 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11847 },
11848 { &hf_gtpv2_vsrvcc_flag,
11849 {"VF (vSRVCC Flag)", "gtpv2.vsrvcc_flag",
11850 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11852 },
11853 { &hf_gtpv2_henb_info_report_fti,
11854 {"FTI", "gtpv2.henb_info_report_fti",
11855 FT_BOOLEAN, 8, TFS(&gtpv2_henb_info_report_fti_vals)((0 ? (const struct true_false_string*)0 : ((&gtpv2_henb_info_report_fti_vals
))))
, 0x01,
11856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11857 },
11858 { &hf_gtpv2_ip4cp_subnet_prefix_len,
11859 {"Subnet Prefix Length", "gtpv2.ip4cp_subnet_prefix_len",
11860 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
11861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11862 },
11863 { &hf_gtpv2_ip4cp_ipv4,
11864 {"IPv4 Default Router Address", "gtpv2.ip4cp_ipv4",
11865 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
11866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11867 },
11868 { &hf_gtpv2_change_report_flags_sncr,
11869 {"SNCR (Service Network Change to Report)", "gtpv2.change_report_flags_sncr",
11870 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
11871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11872 },
11873 { &hf_gtpv2_change_report_flags_tzcr,
11874 {"TZCR (Time Zone Change to Report)", "gtpv2.change_report_flags_tzcr",
11875 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
11876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11877 },
11878 {&hf_gtpv2_action_indication_val,
11879 {"Action Indication", "gtpv2.action_indication_val",
11880 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &gtpv2_action_indication_vals_ext, 0x07,
11881 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11882 },
11883 { &hf_gtpv2_uli_timestamp,
11884 { "ULI Timestamp", "gtpv2.uli_timestamp",
11885 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
11886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11887 },
11888 { &hf_gtpv2_abs_time_mbms_data,
11889 { "Absolute Time of MBMS Data Transfer", "gtpv2.abs_time_mbms_data",
11890 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
11891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11892 },
11893 { &hf_gtpv2_mbms_session_duration_days,
11894 {"MBMS Session Duration (days)", "gtpv2.mbms_session_duration_days",
11895 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007F,
11896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11897 },
11898 { &hf_gtpv2_mbms_session_duration_secs,
11899 {"MBMS Session Duration (seconds)", "gtpv2.mbms_session_duration_secs",
11900 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFFF80,
11901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11902 },
11903 { &hf_gtpv2_csg_id,
11904 {"CSG ID", "gtpv2.csg_id",
11905 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07ffffff,
11906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11907 },
11908 { &hf_gtpv2_cmi,
11909 {"CSG Membership Indication (CMI)", "gtpv2.cmi",
11910 FT_BOOLEAN, 8, TFS(&tfs_no_yes)((0 ? (const struct true_false_string*)0 : ((&tfs_no_yes)
)))
, 0x01,
11911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11912 },
11913 { &hf_gtpv2_service_indicator,
11914 {"Service Indicator", "gtpv2.service_indicator",
11915 FT_UINT8, BASE_DEC, VALS(gtpv2_service_indicator_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_service_indicator_vals
))))
, 0,
11916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11917 },
11918 { &hf_gtpv2_detach_type,
11919 {"Detach Type", "gtpv2.detach_type",
11920 FT_UINT8, BASE_DEC, VALS(gtpv2_detach_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_detach_type_vals
))))
, 0,
11921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11922 },
11923 { &hf_gtpv2_ldn,
11924 {"Local Distinguished Name (LDN)", "gtpv2.ldn",
11925 FT_STRING, BASE_NONE, NULL((void*)0), 0,
11926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11927 },
11928 { &hf_gtpv2_node_features_prn,
11929 {"PGW Restart Notification (PRN)", "gtpv2.node_features_prn",
11930 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
11931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11932 },
11933 { &hf_gtpv2_node_features_mabr,
11934 {"Modify Access Bearers Request (MABR)", "gtpv2.node_features_mabr",
11935 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
11936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11937 },
11938 { &hf_gtpv2_node_features_ntsr,
11939 {"Network Triggered Service Restoration (NTSR)", "gtpv2.node_features_ntsr",
11940 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
11941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11942 },
11943 { &hf_gtpv2_node_features_ciot,
11944 {"Cellular Internet Of Things (CIOT)", "gtpv2.node_features_ciot",
11945 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
11946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11947 },
11948 { &hf_gtpv2_node_features_s1un,
11949 {"S1-U path failure notification feature (S1UN)", "gtpv2.node_features_s1un",
11950 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
11951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11952 },
11953 { &hf_gtpv2_node_features_eth,
11954 {"Ethernet PDN type (ETH)", "gtpv2.node_features_eth",
11955 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
11956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11957 },
11958 { &hf_gtpv2_node_features_mtedt,
11959 {"Support of MT-EDT (MTEDT)", "gtpv2.node_features_mtedt",
11960 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x40,
11961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11962 },
11963 { &hf_gtpv2_node_features_psset,
11964 {"Support of PGW-C/SMF Set (PSSET)", "gtpv2.node_features_psset",
11965 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
11966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11967 },
11968 { &hf_gtpv2_time_to_data_xfer,
11969 {"MBMS Time to Data Transfer", "gtpv2.time_to_data_xfer",
11970 FT_STRING, BASE_NONE, NULL((void*)0), 0,
11971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11972 },
11973 { &hf_gtpv2_arp_pvi,
11974 {"Pre-emption Vulnerability (PVI)", "gtpv2.arp_pvi",
11975 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x01,
11976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11977 },
11978 { &hf_gtpv2_arp_pl,
11979 {"Priority Level", "gtpv2.arp_pl",
11980 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
11981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11982 },
11983 { &hf_gtpv2_arp_pci,
11984 {"Pre-emption Capability (PCI)", "gtpv2.arp_pci",
11985 FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled)((0 ? (const struct true_false_string*)0 : ((&tfs_disabled_enabled
))))
, 0x40,
11986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11987 },
11988 { &hf_gtpv2_timer_unit,
11989 {"Timer unit", "gtpv2.timer_unit",
11990 FT_UINT8, BASE_DEC, VALS(gtpv2_timer_unit_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_timer_unit_vals
))))
, 0xe0,
11991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
11992 },
11993 { &hf_gtpv2_throttling_delay_unit,
11994 {"Throttling Delay unit", "gtpv2.throttling_delay_unit",
11995 FT_UINT8, BASE_DEC, VALS(gtpv2_throttling_delay_unit_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_throttling_delay_unit_vals
))))
, 0xe0,
11996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
11997 },
11998 { &hf_gtpv2_timer_value,
11999 {"Timer value", "gtpv2.timer_value",
12000 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f,
12001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12002 },
12003 { &hf_gtpv2_throttling_delay_value,
12004 {"Throttling Delay value", "gtpv2.throttling_delay_value",
12005 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f,
12006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12007 },
12008 { &hf_gtpv2_lapi,
12009 {"LAPI (Low Access Priority Indication)", "gtpv2.lapi",
12010 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
12011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12012 },
12013 { &hf_gtpv2_mm_context_higher_br_16mb_flg_len,
12014 {"Length of Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg_len",
12015 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12017 },
12018 { &hf_gtpv2_mm_context_higher_br_16mb_flg,
12019 {"Higher bitrates than 16 Mbps flag", "gtpv2.mm_context_higher_br_16mb_flg",
12020 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,
12021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12022 },
12023 { &hf_gtpv2_mmbr_ul,
12024 {"Max MBR/APN-AMBR for uplink", "gtpv2.mmbr_ul",
12025 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12027 },
12028 { &hf_gtpv2_mmbr_dl,
12029 {"Max MBR/APN-AMBR for downlink", "gtpv2.mmbr_dl",
12030 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12032 },
12033 { &hf_gtpv2_pres_rep_area_act_inapra,
12034 {"INAPRA", "gtpv2.pres_rep_area_action.inapra",
12035 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
12036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12037 },
12038 { &hf_gtpv2_pres_rep_area_action,
12039 {"Action", "gtpv2.pres_rep_area_action.action",
12040 FT_UINT8, BASE_DEC, VALS(gtpv2_pres_rep_area_action_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_pres_rep_area_action_vals
))))
, 0x03,
12041 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12042 },
12043 { &hf_gtpv2_pres_rep_area_id,
12044 {"Presence Reporting Area Identifier", "gtpv2.pres_rep_area_action.pres_rep_area_id",
12045 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12047 },
12048 { &hf_gtpv2_pres_rep_area_act_no_tai,
12049 {"Number of TAI", "gtpv2.pres_rep_area_action.no_tai",
12050 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
12051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12052 },
12053 { &hf_gtpv2_pres_rep_area_act_no_rai,
12054 {"Number of RAI", "gtpv2.pres_rep_area_action.no_rai",
12055 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
12056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12057 },
12058 { &hf_gtpv2_pres_rep_area_act_no_m_enodeb,
12059 {"Number of Macro eNodeB", "gtpv2.pres_rep_area_action.no_m_enodeb",
12060 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12062 },
12063 { &hf_gtpv2_pres_rep_area_act_no_h_enodeb,
12064 {"Number of Home eNodeB", "gtpv2.pres_rep_area_action.no_h_enodeb",
12065 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12067 },
12068 { &hf_gtpv2_pres_rep_area_act_no_ecgi,
12069 {"Number of ECGI", "gtpv2.pres_rep_area_action.no_ecgi",
12070 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12072 },
12073 { &hf_gtpv2_pres_rep_area_act_no_sai,
12074 {"Number of SAI", "gtpv2.pres_rep_area_action.no_sai",
12075 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12077 },
12078 { &hf_gtpv2_pres_rep_area_act_no_cgi,
12079 {"Number of CGI", "gtpv2.pres_rep_area_action.no_cgi",
12080 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12082 },
12083 { &hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb,
12084 {"Number of Extended Macro eNodeB", "gtpv2.pres_rep_area_action.no_ext_m_enodeb",
12085 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12087 },
12088 { &hf_gtpv2_ksi_ps,
12089 { "KSI'ps", "gtpv2.ksi_ps",
12090 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0f,
12091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12092 },
12093 { &hf_gtpv2_ck_ps,
12094 { "CK'ps", "gtpv2.ck_ps",
12095 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12097 },
12098 { &hf_gtpv2_ik_ps,
12099 { "IK'ps", "gtpv2.ik_ps",
12100 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12102 },
12103 { &hf_gtpv2_kc_ps,
12104 { "KC'ps", "gtpv2.kc_ps",
12105 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
12106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12107 },
12108 { &hf_gtpv2_cksn_ps,
12109 { "CKSN'ps", "gtpv2.cksn_ps",
12110 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12112 },
12113 { &hf_gtpv2_pres_rep_area_info_id,
12114 {"Presence Reporting Area Identifier", "gtpv2.pres_rep_area_info_id",
12115 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12117 },
12118 { &hf_gtpv2_pres_rep_area_info_additional_id,
12119 {"Additional Presence Reporting Area Identifier", "gtpv2.pres_rep_area_info_additional_id",
12120 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
12121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12122 },
12123 { &hf_gtpv2_pres_rep_area_info_flags,
12124 {"Flags", "gtpv2.pres_rep_area_info_flags",
12125 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12127 },
12128 { &hf_gtpv2_pres_rep_area_info_flags_no_inapra,
12129 {"Flags", "gtpv2.pres_rep_area_info_flags",
12130 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12132 },
12133 { &hf_gtpv2_pres_rep_area_info_flags_b0_ipra,
12134 {"Inside Presence Reporting Area(IPRA)", "gtpv2.pres_rep_area_info_flag_ipra",
12135 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
12136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12137 },
12138 { &hf_gtpv2_pres_rep_area_info_flags_b1_opra,
12139 {"Outside Presence Reporting Area(OPRA)", "gtpv2.pres_rep_area_info_flag_opra",
12140 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
12141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12142 },
12143 { &hf_gtpv2_pres_rep_area_info_flags_b2_apra,
12144 {"Additional Presence Reporting Area(APRA)", "gtpv2.pres_rep_area_info_flag_apra",
12145 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
12146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12147 },
12148 { &hf_gtpv2_pres_rep_area_info_flags_b3_inapra,
12149 {"Inactive Presence Reporting Area(INAPRA)", "gtpv2.pres_rep_area_info_flag_inapra",
12150 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
12151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12152 },
12153 { &hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare,
12154 {"Spare", "gtpv2.pres_rep_area_info_spare",
12155 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
12156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12157 },
12158 { &hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare,
12159 {"Spare", "gtpv2.pres_rep_area_info_spare",
12160 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
12161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12162 },
12163 { &hf_gtpv2_ppi_value,
12164 {"Paging and Policy Information Value", "gtpv2.ppi_value",
12165 FT_UINT8, BASE_DEC | BASE_EXT_STRING0x00000200,
12166 &dscp_vals_ext, GTPV2_PPI_VAL_MASK0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12167 },
12168 { &hf_gtpv2_ppi_flag,
12169 {"Paging Policy Indication", "gtpv2.ppi_flag",
12170 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12172 },
12173 { &hf_gtpv2_session,
12174 { "Session", "gtpv2.session",
12175 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
12176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12177 },
12178
12179 /* Generated from convert_proto_tree_add_text.pl */
12180 { &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) }},
12181 { &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) }},
12182 { &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) }},
12183 { &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) }},
12184 { &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) }},
12185 { &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) }},
12186 { &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) }},
12187 { &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) }},
12188 { &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) }},
12189 { &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) }},
12190 { &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) }},
12191 { &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) }},
12192 { &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) }},
12193 { &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) }},
12194 { &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) }},
12195 { &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) }},
12196 { &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) }},
12197 { &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) }},
12198 { &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) }},
12199 { &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) }},
12200 { &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) }},
12201 { &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) }},
12202 { &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) }},
12203 { &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) }},
12204 { &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) }},
12205 { &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) } },
12206 { &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) }},
12207 { &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) }},
12208 { &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) }},
12209 { &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) }},
12210 { &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) }},
12211 { &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) }},
12212 { &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) }},
12213 { &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) }},
12214 { &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) }},
12215 { &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) }},
12216 { &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) }},
12217 { &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) }},
12218 { &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) }},
12219 { &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) }},
12220 { &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) }},
12221 { &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) }},
12222 { &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) }},
12223 { &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) }},
12224 { &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) }},
12225
12226 { &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) } },
12227 { &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) } },
12228 { &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) } },
12229 { &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) } },
12230 { &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) } },
12231 { &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) } },
12232 { &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) } },
12233 { &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) } },
12234 { &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) } },
12235 { &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) } },
12236 { &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) } },
12237 { &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) } },
12238 { &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) } },
12239 { &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) } },
12240 { &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) } },
12241 { &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) } },
12242 { &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) } },
12243 { &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) } },
12244 { &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) } },
12245 { &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) } },
12246 { &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) } },
12247 { &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) } },
12248 { &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) } },
12249 { &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) } },
12250 { &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) } },
12251 { &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) } },
12252 { &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) } },
12253 { &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)} },
12254 { &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)} },
12255 { &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)} },
12256 { &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)} },
12257 { &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)} },
12258 { &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)} },
12259 { &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)} },
12260 { &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) } },
12261 { &hf_gtpv2_ciot_support_ind_spare_bits,
12262 { "Spare", "gtpv2.ciot_support_ind.spare_bits",
12263 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
12264 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12265 },
12266 { &hf_gtpv2_ciot_support_ind_bit4,
12267 { "IHCSI (IP Header Compression Support)", "gtpv2.ciot_support_ind.ihcsi",
12268 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12269 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12270 },
12271 { &hf_gtpv2_ciot_support_ind_bit3,
12272 { "AWOPDN (Attach without PDN Support)", "gtpv2.ciot_support_ind.awopdn",
12273 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12275 },
12276 { &hf_gtpv2_ciot_support_ind_bit2,
12277 { "SCNIPDN (SCEF Non-IP PDN Support)", "gtpv2.ciot_support_ind.scnipdn",
12278 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12280 },
12281 { &hf_gtpv2_ciot_support_ind_bit1,
12282 { "SGNIPDN (SGi Non-IP PDN Support)", "gtpv2.ciot_support_ind.sgnipdn",
12283 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12285 },
12286 { &hf_gtpv2_length_of_node_name,
12287 { "Length of Node Name", "gtpv2.length_of_node_name",
12288 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12290 },
12291 { &hf_gtpv2_length_of_node_realm,
12292 { "Length of Node Realm", "gtpv2.length_of_node_realm",
12293 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12295 },
12296 { &hf_gtpv2_node_name,
12297 { "Node Name", "gtpv2.node_name",
12298 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12300 },
12301 { &hf_gtpv2_node_realm,
12302 { "Node Realm", "gtpv2.node_realm",
12303 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12305 },
12306 { &hf_gtpv2_ms_ts,
12307 { "Millisecond Time Stamp", "gtpv2.ms_ts",
12308 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0,
12309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12310 },
12311 { &hf_gtpv2_origination_ts,
12312 { "Origination Time Stamp", "gtpv2.origination_ts",
12313 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0,
12314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12315 },
12316 { &hf_gtpv2_mon_event_inf_nsur,
12317 { "NSUR (Notify SCEF when UE becomes Reachable)", "gtpv2.mon_event_inf.nsur",
12318 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
12319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12320 },
12321 { &hf_gtpv2_mon_event_inf_nsui,
12322 { "NSUI (Notify SCEF when UE becomes Idle)", "gtpv2.mon_event_inf.nsui",
12323 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
12324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12325 },
12326 { &hf_gtpv2_mon_event_inf_nscf,
12327 { "NSCF (Notify SCEF about Communication Failure events)", "gtpv2.mon_event_inf.nscf",
12328 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
12329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12330 },
12331 { &hf_gtpv2_mon_event_inf_srie,
12332 { "SRIE (SCEF Reference Id Extension)", "gtpv2.mon_event_ext_inf.srie",
12333 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80,
12334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12335 },
12336 { &hf_gtpv2_mon_event_inf_scef_reference_id,
12337 { "SCEF Reference ID", "gtpv2.mon_event_inf.scef_reference_id",
12338 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12340 },
12341 { &hf_gtpv2_mon_event_inf_scef_reference_id_ext,
12342 { "SCEF Reference ID Ext", "gtpv2.mon_event_inf.scef_reference_id_ext",
12343 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12345 },
12346 { &hf_gtpv2_mon_event_inf_scef_id_length,
12347 { "SCEF ID length", "gtpv2.mon_event_inf.scef_id_length",
12348 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12350 },
12351 { &hf_gtpv2_mon_event_inf_scef_id,
12352 { "SCEF ID", "gtpv2.mon_event_inf.scef_id",
12353 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12355 },
12356 { &hf_gtpv2_mon_event_inf_remaining_number_of_reports,
12357 { "Remaining Number of Reports", "gtpv2.mon_event_inf.remaining_number_of_reports",
12358 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12360 },
12361 { &hf_gtpv2_mon_event_ext_inf_lrtp,
12362 { "LRTP (Remaining Minimum Periodic Location Reporting Time Present)", "gtpv2.mon_event_ext_inf.lrtp",
12363 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
12364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12365 },
12366 { &hf_gtpv2_mon_event_ext_inf_srie,
12367 { "SRIE (SCEF Reference Id Extension)", "gtpv2.mon_event_ext_inf.srie",
12368 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
12369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12370 },
12371 { &hf_gtpv2_mon_event_ext_inf_scef_reference_id,
12372 { "SCEF Reference ID", "gtpv2.mon_event_ext_inf.scef_reference_id",
12373 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12375 },
12376 { &hf_gtpv2_mon_event_ext_inf_scef_id_length,
12377 { "SCEF ID length", "gtpv2.mon_event_ext_inf.scef_id_length",
12378 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12380 },
12381 { &hf_gtpv2_mon_event_ext_inf_scef_id,
12382 { "SCEF ID", "gtpv2.mon_event_ext_inf.scef_id",
12383 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
12384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12385 },
12386 { &hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type,
12387 { "Remaining Minimum Periodic Location Reporting Time", "gtpv2.mon_event_ext_inf.remain_min_period_loc_report_type",
12388 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0x0,
12389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12390 },
12391 { &hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext,
12392 { "SCEF Reference ID Ext", "gtpv2.mon_event_ext_inf.scef_reference_id_ext",
12393 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12395 },
12396 { &hf_gtpv2_rohc_profile_flags,
12397 { "ROHC Profiles flags", "gtpv2.rohc_profile_flags",
12398 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12400 },
12401 { &hf_gtpv2_rohc_profiles_bit0,
12402 { "Profile Identifier: 0x0002, UDP/IP", "gtpv2.rohc_profiles.b0",
12403 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x01,
12404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12405 },
12406 { &hf_gtpv2_rohc_profiles_bit1,
12407 { "Profile Identifier: 0x0003, ESP/IP", "gtpv2.rohc_profiles.b1",
12408 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x02,
12409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12410 },
12411 { &hf_gtpv2_rohc_profiles_bit2,
12412 { "Profile Identifier: 0x0004, IP", "gtpv2.rohc_profiles.b2",
12413 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x04,
12414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12415 },
12416 { &hf_gtpv2_rohc_profiles_bit3,
12417 { "Profile Identifier: 0x0006, TCP/IP", "gtpv2.rohc_profiles.b3",
12418 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x08,
12419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12420 },
12421 { &hf_gtpv2_rohc_profiles_bit4,
12422 { "Profile Identifier: 0x0102, UDP/IP", "gtpv2.rohc_profiles.b4",
12423 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x10,
12424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12425 },
12426 { &hf_gtpv2_rohc_profiles_bit5,
12427 { "Profile Identifier: 0x0103, ESP/IP", "gtpv2.rohc_profiles.b5",
12428 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x20,
12429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12430 },
12431 { &hf_gtpv2_rohc_profiles_bit6,
12432 { "Profile Identifier: 0x0104, IP", "gtpv2.rohc_profiles.b6",
12433 FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x40,
12434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12435 },
12436 { &hf_gtpv2_rohc_profiles_bit7,
12437 { "Spare", "gtpv2.rohc_profiles.b7",
12438 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
12439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12440 },
12441 { &hf_gtpv2_max_cid,
12442 { "MAX_CID", "gtpv2.max_cid",
12443 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12445 },
12446 { &hf_gtpv2_uplink_rate_limit,
12447 { "Uplink Rate Limit", "gtpv2.uplink_rate_limit",
12448 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12450 },
12451 { &hf_gtpv2_downlink_rate_limit,
12452 { "Downlink Rate Limit", "gtpv2.downlink_rate_limit",
12453 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12455 },
12456 { &hf_gtpv2_timestamp_value,
12457 { "Timestamp value", "gtpv2.timestamp_value",
12458 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12460 },
12461 { &hf_gtpv2_counter_value,
12462 { "Counter value", "gtpv2.counter_value",
12463 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12465 },
12466 { &hf_gtpv2_mapped_ue_usage_type,
12467 { "Mapped UE usage type", "gtpv2.mapped_ue_usage_type",
12468 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
12469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12470 },
12471 { &hf_gtpv2_uli_flags,
12472 { "ULI Flags", "gtpv2.uli_flags",
12473 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
12474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12475 },
12476 { &hf_gtpv2_dcnr,
12477 { "DCNR (Dual connectivity with NR)", "gtpv2.dcnr",
12478 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12480 },
12481 { &hf_gtpv2_secondary_rat_usage_data_report,
12482 { "Secondary RAT Usage Data Report", "gtpv2.secondary_rat_usage_data_report",
12483 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12485 },
12486 { &hf_gtpv2_secondary_rat_usage_data_report_spare_bits,
12487 { "Spare", "gtpv2.secondary_rat_usage_data_report.spare_bits",
12488 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
12489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12490 },
12491 { &hf_gtpv2_secondary_rat_usage_data_report_bit3,
12492 { "SRUDN (Secondary RAT Usage Report from NG-RAN)", "gtpv2.secondary_rat_usage_data_report.srudn",
12493 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12495 },
12496 { &hf_gtpv2_secondary_rat_usage_data_report_bit2,
12497 { "IRSGW (Intended Receiver SGW)", "gtpv2.secondary_rat_usage_data_report.irsgw",
12498 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12500 },
12501 { &hf_gtpv2_secondary_rat_usage_data_report_bit1,
12502 { "IRPGW (Intended Receiver PGW)", "gtpv2.secondary_rat_usage_data_report.irpgw",
12503 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12505 },
12506 { &hf_gtpv2_secondary_rat_usage_data_report_rat_type,
12507 {"RAT Type", "gtpv2.secondary_rat_usage_data_report.rat_type",
12508 FT_UINT8, BASE_DEC, VALS(gtpv2_secondary_rat_type_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_secondary_rat_type_vals
))))
, 0x0,
12509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12510 },
12511 { &hf_gtpv2_secondary_rat_usage_data_report_start_timestamp,
12512 { "Start timestamp", "gtpv2.secondary_rat_usage_data_report.start_timestamp",
12513 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12515 },
12516 { &hf_gtpv2_secondary_rat_usage_data_report_end_timestamp,
12517 { "End timestamp", "gtpv2.secondary_rat_usage_data_report.end_timestamp",
12518 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
12519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12520 },
12521 { &hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl,
12522 { "Usage Data DL", "gtpv2.secondary_rat_usage_data_report.usage_data_dl",
12523 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12525 },
12526 { &hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul,
12527 { "Usage Data UL", "gtpv2.secondary_rat_usage_data_report.usage_data_ul",
12528 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
12529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12530 },
12531 { &hf_gtpv2_secondary_rat_usage_data_report_srudn_length,
12532 { "SRUDN length", "gtpv2.mon_event_inf.srudn_length",
12533 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
12534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12535 },
12536 { &hf_gtpv2_secondary_rat_usage_data_report_srudn_value,
12537 { "SecondaryRATDataUsageReportTransfer", "gtpv2.mon_event_inf.srudn_value",
12538 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
12539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12540 },
12541 { &hf_gtpv2_csg_info_rep_action_b0,
12542 { "UCICSG", "gtpv2.csg_info_rep_action.ucicsg",
12543 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12545 },
12546 { &hf_gtpv2_csg_info_rep_action_b1,
12547 { "UCISHC", "gtpv2.csg_info_rep_action.ucishc",
12548 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12550 },
12551 { &hf_gtpv2_csg_info_rep_action_b2,
12552 { "UCIUHC", "gtpv2.csg_info_rep_action.uciuhc",
12553 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12555 },
12556 { &hf_gtpv2_gnodeb_id_len,
12557 {"gNodeB ID Length", "gtpv2.gnodeb_id_len",
12558 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12560 },
12561 { &hf_gtpv2_gnodeb_id,
12562 { "gNodeB ID", "gtpv2.gnodeb_id",
12563 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
12564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12565 },
12566 { &hf_gtpv2_macro_ng_enodeb_id,
12567 { "Macro ng-eNodeB ID", "gtpv2.ng_enodeb_id",
12568 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0fffff,
12569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12570 },
12571 { &hf_gtpv2_5gs_tac,
12572 { "5GS Tracking Area Code (TAC)", "gtpv2.5gs_tac",
12573 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
12574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12575 },
12576 { &hf_gtpv2_en_gnb_id_len,
12577 {"en-gNB ID Length", "gtpv2.en_gnb_id_len",
12578 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3f,
12579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12580 },
12581 { &hf_gtpv2_5tac,
12582 { "5TAC", "gtpv2.5tac",
12583 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80,
12584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12585 },
12586 { &hf_gtpv2_etac,
12587 { "ETAC", "gtpv2.etac",
12588 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
12589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12590 },
12591 { &hf_gtpv2_en_gnb_id,
12592 { "gNodeB ID", "gtpv2.en_gnb_id",
12593 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
12594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12595 },
12596 { &hf_gtpv2_trig_event_len,
12597 { "Length of Triggering Events", "gtpv2.trig_event_len",
12598 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12600 },
12601 { &hf_gtpv2_ne_list_len,
12602 { "Length of List of NE Types", "gtpv2.ne_list_len",
12603 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12605 },
12606 { &hf_gtpv2_ses_trs_depth,
12607 { "Session Trace Depth", "gtpv2.ses_trs_dept",
12608 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12610 },
12611 { &hf_gtpv2_list_of_if_len,
12612 { "Length of List of Interfaces", "gtpv2.list_of_if_len",
12613 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12615 },
12616 { &hf_gtpv2_trs_coll_ip_addr_len,
12617 { "Length of IP Address of Trace Collection Entity", "gtpv2.trs_coll_ip_addr_len",
12618 FT_UINT8, BASE_DEC, NULL((void*)0),0x0,
12619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12620 },
12621 { &hf_gtpv2_trs_coll_ipv4_addr,
12622 {"IP Address of Trace Collection Entity", "gtpv2.trs_coll_ipv4_addr",
12623 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
12624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12625 },
12626 { &hf_gtpv2_trs_coll_ipv6_addr,
12627 {"IP Address of Trace Collection Entity", "gtpv2.trs_coll_ipv6_addr",
12628 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
12629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
12630 },
12631 { &hf_gtpv2_ext_tra_info_loi_mscs_cap,
12632 { "CAP", "gtpv2.ext_tra_info_loi.mscs.cap",
12633 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12635 },
12636 { &hf_gtpv2_ext_tra_info_loi_mscs_map_f,
12637 { "MAP-F", "gtpv2.ext_tra_info_loi.mscs.map_f",
12638 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12640 },
12641 { &hf_gtpv2_ext_tra_info_loi_mscs_map_e,
12642 { "MAP-E", "gtpv2.ext_tra_info_loi.mscs.map_e",
12643 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12645 },
12646 { &hf_gtpv2_ext_tra_info_loi_mscs_map_b,
12647 { "MAP-B", "gtpv2.ext_tra_info_loi.mscs.map_b",
12648 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12650 },
12651 { &hf_gtpv2_ext_tra_info_loi_mscs_map_g,
12652 { "MAP-G", "gtpv2.ext_tra_info_loi.mscs.map_g",
12653 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12655 },
12656 { &hf_gtpv2_ext_tra_info_loi_mscs_mc,
12657 { "Mc", "gtpv2.ext_tra_info_loi.mscs.mc",
12658 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12660 },
12661 { &hf_gtpv2_ext_tra_info_loi_mscs_iu,
12662 { "Iu", "gtpv2.ext_tra_info_loi.mscs.iu",
12663 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12665 },
12666 { &hf_gtpv2_ext_tra_info_loi_mscs_a,
12667 { "A","gtpv2.ext_tra_info_loi.mscs.a",
12668 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12670 },
12671 { &hf_gtpv2_ext_tra_info_loi_mscs_map_c,
12672 { "MAP-C", "gtpv2.ext_tra_info_loi.mscs.map_c",
12673 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12675 },
12676 { &hf_gtpv2_ext_tra_info_loi_mscs_map_d,
12677 { "MAP-D", "gtpv2.ext_tra_info_loi.mscs.map_d",
12678 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12680 },
12681 { &hf_gtpv2_ext_tra_info_loi_mgw_iuup,
12682 { "Iu-UP", "gtpv2.ext_tra_info_loi.mgw.iuup",
12683 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12685 },
12686 { &hf_gtpv2_ext_tra_info_loi_mgw_nbup,
12687 { "Nb-UP", "gtpv2.ext_tra_info_loi.mgw.nbup",
12688 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12690 },
12691 { &hf_gtpv2_ext_tra_info_loi_mgw_mc,
12692 { "Mc", "gtpv2.ext_tra_info_loi.mgw.mc",
12693 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12695 },
12696 { &hf_gtpv2_ext_tra_info_loi_sgsn_ge,
12697 { "Ge", "gtpv2.ext_tra_info_loi.sgsn.ge",
12698 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12700 },
12701 { &hf_gtpv2_ext_tra_info_loi_sgsn_gs,
12702 { "Gs", "gtpv2.ext_tra_info_loi.sgsn.gs",
12703 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12705 },
12706 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gf,
12707 { "MAP-Gf", "gtpv2.ext_tra_info_loi.sgsn.map_gf",
12708 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12710 },
12711 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gd,
12712 { "MAP-Gd", "gtpv2.ext_tra_info_loi.sgsn.map_gd",
12713 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12715 },
12716 { &hf_gtpv2_ext_tra_info_loi_sgsn_map_gr,
12717 { "MAP-Gr", "gtpv2.ext_tra_info_loi.sgsn.map_gr",
12718 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12720 },
12721 { &hf_gtpv2_ext_tra_info_loi_sgsn_gn,
12722 { "Gn", "gtpv2.ext_tra_info_loi.sgsn.gn",
12723 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12725 },
12726 { &hf_gtpv2_ext_tra_info_loi_sgsn_iu,
12727 { "Iu", "gtpv2.ext_tra_info_loi.sgsn.iu",
12728 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12730 },
12731 { &hf_gtpv2_ext_tra_info_loi_sgsn_gb,
12732 { "Gb", "gtpv2.ext_tra_info_loi.sgsn.gb",
12733 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12735 },
12736 { &hf_gtpv2_ext_tra_info_loi_sgsn_s13,
12737 { "S13", "gtpv2.ext_tra_info_loi.sgsn.s13",
12738 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12740 },
12741 { &hf_gtpv2_ext_tra_info_loi_sgsn_s3,
12742 { "S3", "gtpv2.ext_tra_info_loi.sgsn.s3",
12743 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12745 },
12746 { &hf_gtpv2_ext_tra_info_loi_sgsn_s4,
12747 { "S4", "gtpv2.ext_tra_info_loi.sgsn.s4",
12748 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12750 },
12751 { &hf_gtpv2_ext_tra_info_loi_sgsn_s6d,
12752 { "S6d", "gtpv2.ext_tra_info_loi.sgsn.s6d",
12753 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12755 },
12756 { &hf_gtpv2_ext_tra_info_loi_ggsn_gmb,
12757 { "Gmb", "gtpv2.ext_tra_info_loi.ggsn.gmb",
12758 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12760 },
12761 { &hf_gtpv2_ext_tra_info_loi_ggsn_gi,
12762 { "Gi", "gtpv2.ext_tra_info_loi.ggsn.gi",
12763 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12765 },
12766 { &hf_gtpv2_ext_tra_info_loi_ggsn_gn,
12767 { "Gn", "gtpv2.ext_tra_info_loi.ggsn.gn",
12768 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12770 },
12771 { &hf_gtpv2_ext_tra_info_loi_rnc_uu,
12772 { "Uu", "gtpv2.ext_tra_info_loi.rrc.uu",
12773 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12775 },
12776 { &hf_gtpv2_ext_tra_info_loi_rnc_iub,
12777 { "Iub", "gtpv2.ext_tra_info_loi.rrc.iub",
12778 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12780 },
12781 { &hf_gtpv2_ext_tra_info_loi_rnc_iur,
12782 { "Iur", "gtpv2.ext_tra_info_loi.rrc.iur",
12783 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12785 },
12786 { &hf_gtpv2_ext_tra_info_loi_rnc_iu,
12787 { "Iu", "gtpv2.ext_tra_info_loi.rrc.iu",
12788 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12790 },
12791 { &hf_gtpv2_ext_tra_info_loi_bm_sc_gmb,
12792 { "Gmb", "gtpv2.ext_tra_info_loi.bm_sc.gmb",
12793 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12795 },
12796 { &hf_gtpv2_ext_tra_info_loi_mme_s13,
12797 { "S13", "gtpv2.ext_tra_info_loi.mme.s13",
12798 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12800 },
12801 { &hf_gtpv2_ext_tra_info_loi_mme_s11,
12802 { "S11", "gtpv2.ext_tra_info_loi.mme.s11",
12803 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12805 },
12806 { &hf_gtpv2_ext_tra_info_loi_mme_s10,
12807 { "S10", "gtpv2.ext_tra_info_loi.mme.s10",
12808 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12810 },
12811 { &hf_gtpv2_ext_tra_info_loi_mme_s6a,
12812 { "S6a", "gtpv2.ext_tra_info_loi.mme.s6a",
12813 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12815 },
12816 { &hf_gtpv2_ext_tra_info_loi_mme_s3,
12817 { "S3", "gtpv2.ext_tra_info_loi.mme.s3",
12818 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12820 },
12821 { &hf_gtpv2_ext_tra_info_loi_mme_s1_mme,
12822 { "S1-mme", "gtpv2.ext_tra_info_loi.mme.s1_mme",
12823 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12825 },
12826 { &hf_gtpv2_ext_tra_info_loi_sgw_gxc,
12827 { "Gxc", "gtpv2.ext_tra_info_loi.sgw.gxc",
12828 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12830 },
12831 { &hf_gtpv2_ext_tra_info_loi_sgw_s11,
12832 { "S11", "gtpv2.ext_tra_info_loi.sgw.s11",
12833 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12835 },
12836 { &hf_gtpv2_ext_tra_info_loi_sgw_s8b,
12837 { "S8b", "gtpv2.ext_tra_info_loi.sgw.s8b",
12838 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12840 },
12841 { &hf_gtpv2_ext_tra_info_loi_sgw_s5,
12842 { "S5", "gtpv2.ext_tra_info_loi.sgw.s5",
12843 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12845 },
12846 { &hf_gtpv2_ext_tra_info_loi_sgw_s4,
12847 { "S4", "gtpv2.ext_tra_info_loi.sgw.s4",
12848 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12850 },
12851 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi,
12852 { "Sgi", "gtpv2.ext_tra_info_loi.pdn_gw.sgi",
12853 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12855 },
12856 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b,
12857 { "S8b", "gtpv2.ext_tra_info_loi.pdn_gw.s8b",
12858 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12860 },
12861 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_gx,
12862 { "Gx", "gtpv2.ext_tra_info_loi.pdn_gw.gx",
12863 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12865 },
12866 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b,
12867 { "S6b", "gtpv2.ext_tra_info_loi.pdn_gw.s6b",
12868 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12870 },
12871 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s5,
12872 { "S5", "gtpv2.ext_tra_info_loi.pdn_gw.s5",
12873 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12875 },
12876 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c,
12877 { "S2c", "gtpv2.ext_tra_info_loi.pdn_gw.s2c",
12878 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12880 },
12881 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b,
12882 { "S2b", "gtpv2.ext_tra_info_loi.pdn_gw.s2b",
12883 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12885 },
12886 { &hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a,
12887 { "S2a", "gtpv2.ext_tra_info_loi.pdn_gw.s2a",
12888 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12890 },
12891 { &hf_gtpv2_ext_tra_info_loi_enb_uu,
12892 { "Uu", "gtpv2.ext_tra_info_loi.enb.uu",
12893 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12895 },
12896 { &hf_gtpv2_ext_tra_info_loi_enb_x2,
12897 { "X2", "gtpv2.ext_tra_info_loi.enb.x2",
12898 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12900 },
12901 { &hf_gtpv2_ext_tra_info_loi_enb_s1_mme,
12902 { "S1-MME", "gtpv2.ext_tra_info_loi.enb.s1_mme",
12903 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12905 },
12906 { &hf_gtpv2_ext_tra_info_loi_hss_sh,
12907 { "Sh", "gtpv2.ext_tra_info_loi.hss.Sh",
12908 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12910 },
12911 { &hf_gtpv2_ext_tra_info_loi_hss_s6a,
12912 { "S6a", "gtpv2.ext_tra_info_loi.hss.S6a",
12913 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12915 },
12916 { &hf_gtpv2_ext_tra_info_loi_hss_s6d,
12917 { "S6d", "gtpv2.ext_tra_info_loi.hss.S6d",
12918 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12920 },
12921 { &hf_gtpv2_ext_tra_info_loi_hss_cx,
12922 { "Cx", "gtpv2.ext_tra_info_loi.hss.cx",
12923 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12925 },
12926 { &hf_gtpv2_ext_tra_info_loi_hss_map_gr,
12927 { "MAP-Gr", "gtpv2.ext_tra_info_loi.hss.map_gr",
12928 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12930 },
12931 { &hf_gtpv2_ext_tra_info_loi_hss_map_gc,
12932 { "MAP-Gc", "gtpv2.ext_tra_info_loi.hss.map_gc",
12933 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12935 },
12936 { &hf_gtpv2_ext_tra_info_loi_hss_map_d,
12937 { "MAP-D", "gtpv2.ext_tra_info_loi.hss.map_d",
12938 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12940 },
12941 { &hf_gtpv2_ext_tra_info_loi_hss_map_c,
12942 { "MAP-C", "gtpv2.ext_tra_info_loi.hss.map_c",
12943 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
12944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12945 },
12946 { &hf_gtpv2_ext_tra_info_loi_eir_map_gf,
12947 { "MAP-Gf", "gtpv2.ext_tra_info_loi.eir.map_gf",
12948 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12950 },
12951 { &hf_gtpv2_ext_tra_info_loi_eir_s13p,
12952 { "S13'", "gtpv2.ext_tra_info_loi.eir.s13p",
12953 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12955 },
12956 { &hf_gtpv2_ext_tra_info_loi_eir_s13,
12957 { "S13", "gtpv2.ext_tra_info_loi.eir.s13",
12958 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12960 },
12961 { &hf_gtpv2_ext_tra_info_loi_eir_map_f,
12962 { "MAP-F", "gtpv2.ext_tra_info_loi.eir.map_f",
12963 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12965 },
12966 { &hf_gtpv2_ext_tra_info_loi_amf_n20,
12967 { "N20", "gtpv2.ext_tra_info_loi.amf.n20",
12968 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x80,
12969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12970 },
12971 { &hf_gtpv2_ext_tra_info_loi_amf_n15,
12972 { "N15", "gtpv2.ext_tra_info_loi.amf.n15",
12973 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x40,
12974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12975 },
12976 { &hf_gtpv2_ext_tra_info_loi_amf_n14,
12977 { "N14", "gtpv2.ext_tra_info_loi.amf.n14",
12978 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x20,
12979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12980 },
12981 { &hf_gtpv2_ext_tra_info_loi_amf_n12,
12982 { "N12", "gtpv2.ext_tra_info_loi.amf.n12",
12983 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
12984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12985 },
12986 { &hf_gtpv2_ext_tra_info_loi_amf_n11,
12987 { "N11", "gtpv2.ext_tra_info_loi.amf.n11",
12988 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
12989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12990 },
12991 { &hf_gtpv2_ext_tra_info_loi_amf_n8,
12992 { "N8", "gtpv2.ext_tra_info_loi.amf.n8",
12993 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
12994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
12995 },
12996 { &hf_gtpv2_ext_tra_info_loi_amf_n2,
12997 { "N2", "gtpv2.ext_tra_info_loi.amf.n2",
12998 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
12999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13000 },
13001 { &hf_gtpv2_ext_tra_info_loi_amf_n1,
13002 { "N1", "gtpv2.ext_tra_info_loi.amf.n1",
13003 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13005 },
13006 { &hf_gtpv2_ext_tra_info_loi_amf_n22,
13007 { "N22", "gtpv2.ext_tra_info_loi.amf.n22",
13008 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13010 },
13011 { &hf_gtpv2_ext_tra_info_loi_amf_n26,
13012 { "N26", "gtpv2.ext_tra_info_loi.amf.n26",
13013 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13015 },
13016 { &hf_gtpv2_ext_tra_info_loi_pcf_n15,
13017 { "N15", "gtpv2.ext_tra_info_loi.pcf.n15",
13018 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13020 },
13021 { &hf_gtpv2_ext_tra_info_loi_pcf_n7,
13022 { "N7", "gtpv2.ext_tra_info_loi.pcf.n7",
13023 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13025 },
13026 { &hf_gtpv2_ext_tra_info_loi_pcf_n5,
13027 { "N5", "gtpv2.ext_tra_info_loi.pcf.n5",
13028 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13030 },
13031 { &hf_gtpv2_ext_tra_info_loi_smf_s5_c,
13032 { "S5-C", "gtpv2.ext_tra_info_loi.smf.s5_c",
13033 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
13034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13035 },
13036 { &hf_gtpv2_ext_tra_info_loi_smf_n11,
13037 { "N11", "gtpv2.ext_tra_info_loi.smf.n11",
13038 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
13039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13040 },
13041 { &hf_gtpv2_ext_tra_info_loi_smf_n10,
13042 { "N10", "gtpv2.ext_tra_info_loi.smf.n10",
13043 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13045 },
13046 { &hf_gtpv2_ext_tra_info_loi_smf_n7,
13047 { "N7", "gtpv2.ext_tra_info_loi.smf.n7",
13048 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13050 },
13051 { &hf_gtpv2_ext_tra_info_loi_smf_n4,
13052 { "N4", "gtpv2.ext_tra_info_loi.smf.n4",
13053 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13055 },
13056 { &hf_gtpv2_ext_tra_info_loi_upf_n4,
13057 { "N4", "gtpv2.ext_tra_info_loi.upf.n4",
13058 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
13059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13060 },
13061 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c,
13062 { "E1-C", "gtpv2.ext_tra_info_loi.ng_ran_node.e1_c",
13063 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x10,
13064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13065 },
13066 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c,
13067 { "F1-C", "gtpv2.ext_tra_info_loi.ng_ran_node.f1_c",
13068 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08,
13069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13070 },
13071 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu,
13072 { "Uu", "gtpv2.ext_tra_info_loi.ng_ran_node.uu",
13073 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
13074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13075 },
13076 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c,
13077 { "Xn-C", "gtpv2.ext_tra_info_loi.ng_ran_node.xn_c",
13078 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13080 },
13081 { &hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c,
13082 { "NG-C", "gtpv2.ext_tra_info_loi.ng_ran_node.ng_c",
13083 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
13084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13085 },
13086 { &hf_gtpv2_nr_add_exception_rpts,
13087 { "Number of additional exception reports", "gtpv2.r_add_exception_rpts",
13088 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13090 },
13091 { &hf_gtpv2_nr_ul_pkts_all,
13092 { "Number of Uplink packets allowed", "gtpv2.nr_ul_pkts_all",
13093 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13095 },
13096 { &hf_gtpv2_nr_dl_pkts_all,
13097 { "Number of Downlink packets allowed", "gtpv2.nr_dl_pkts_all",
13098 FT_UINT32, BASE_DEC, NULL((void*)0),0x0,
13099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13100 },
13101 { &hf_apn_rte_cntrl_status_val_time,
13102 { "APN Rate Control Status validity Time", "gtpv2.pn_rte_cntrl_status_val_time",
13103 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0),0x0,
13104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13105 },
13106 { &hf_gtpv2_max_pkt_loss_rte_ul_flg,
13107 { "UL", "gtpv2.max_pkt_loss_rte_ul_flg",
13108 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
13109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13110 },
13111 { &hf_gtpv2_max_pkt_loss_rte_dl_flg,
13112 { "DL", "gtpv2.max_pkt_loss_rte_dl_flg",
13113 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
13114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13115 },
13116 { &hf_gtpv2_max_pkt_loss_rte_ul,
13117 { "Maximum Packet Loss Rate UL", "gtpv2.max_pkt_loss_rte_ul",
13118 FT_UINT16, BASE_CUSTOM, CF_FUNC(value_in_tenth_of_percent_fmt)((const void *) (size_t) (value_in_tenth_of_percent_fmt)), 0x0,
13119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13120 },
13121 { &hf_gtpv2_max_pkt_loss_rte_dl,
13122 { "Maximum Packet Loss Rate DL", "gtpv2.max_pkt_loss_rte_dl",
13123 FT_UINT16, BASE_CUSTOM, CF_FUNC(value_in_tenth_of_percent_fmt)((const void *) (size_t) (value_in_tenth_of_percent_fmt)), 0x0,
13124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13125 },
13126 { &hf_gtpv2_mm_context_iov_updates_counter,
13127 { "IOV_updates counter", "gtpv2.mm_context.iov_updates_counter",
13128 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13130 },
13131 { &hf_gtpv2_mm_context_ear_len,
13132 { "Length of Extended Access Restriction Data", "gtpv2.mm_context.ear_len",
13133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13135 },
13136 { &hf_gtpv2_node_number_len,
13137 { "Length", "gtpv2.node_number.len",
13138 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13140 },
13141 { &hf_gtpv2_additional_rrm_policy_index,
13142 { "Additional RRM Policy Index", "gtpv2.additional_rrm_policy_index",
13143 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13145 },
13146 { &hf_gtpv2_group_id,
13147 { "Group ID", "gtpv2.group_id",
13148 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13150 },
13151 { &hf_gtpv2_ie_up_security_policy_up_ip_policy,
13152 { "UP IP Policy", "gtpv2.ie_up_security_policy.up_ip_policy",
13153 FT_UINT8, BASE_DEC, VALS(gtpv2_up_ip_policy_vals)((0 ? (const struct _value_string*)0 : ((gtpv2_up_ip_policy_vals
))))
, 0x3,
13154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13155 },
13156 { &hf_gtpv2_ie_pscell_id_spare,
13157 { "Spare", "gtpv2.pscell_id.spare",
13158 FT_UINT40, BASE_DEC, NULL((void*)0), 0xF000000000,
13159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13160 },
13161 { &hf_gtpv2_ie_pscell_id_nr_cgi,
13162 { "NR CGI", "gtpv2.pscell_id.nr_cgi",
13163 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0FFFFFFFFF,
13164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13165 },
13166 { &hf_gtpv2_ie_up_security_policy_spare,
13167 { "Spare", "gtpv2.up_security_policy.spare",
13168 FT_UINT8, BASE_DEC, NULL((void*)0), 0xFC,
13169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13170 },
13171 { &hf_gtpv2_nf_instance_id_nf_instance_id,
13172 { "NF Instance ID", "gtpv2.nf_instance_id_nf_instance_id",
13173 FT_GUID, BASE_NONE, NULL((void*)0), 0x0,
13174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
13175 },
13176 { &hf_gtpv2_nf_timer_in_seconds_timer_value,
13177 { "Timer in Seconds", "gtpv2.timer_in_seconds_timer_value",
13178 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
13180 },
13181 };
13182
13183 /* Setup protocol subtree array */
13184#define GTPV2_NUM_INDIVIDUAL_ELEMS85 85
13185 static int *ett_gtpv2_array[GTPV2_NUM_INDIVIDUAL_ELEMS85 + NUM_GTPV2_IES256];
13186
13187 ett_gtpv2_array[0] = &ett_gtpv2;
13188 ett_gtpv2_array[1] = &ett_gtpv2_flags;
13189 ett_gtpv2_array[2] = &ett_gtpv2_uli_flags;
13190 ett_gtpv2_array[3] = &ett_gtpv2_uli_field;
13191 ett_gtpv2_array[4] = &ett_gtpv2_bearer_ctx;
13192 ett_gtpv2_array[5] = &ett_gtpv2_PDN_conn;
13193 ett_gtpv2_array[6] = &ett_gtpv2_overload_control_information;
13194 ett_gtpv2_array[7] = &ett_gtpv2_mm_context_flag;
13195 ett_gtpv2_array[8] = &ett_gtpv2_pdn_numbers_nsapi;
13196 ett_gtpv2_array[9] = &ett_gtpv2_tra_info_trigg;
13197 ett_gtpv2_array[10] = &ett_gtpv2_tra_info_trigg_msc_server;
13198 ett_gtpv2_array[11] = &ett_gtpv2_tra_info_trigg_mgw;
13199 ett_gtpv2_array[12] = &ett_gtpv2_tra_info_trigg_sgsn;
13200 ett_gtpv2_array[13] = &ett_gtpv2_tra_info_trigg_ggsn;
13201 ett_gtpv2_array[14] = &ett_gtpv2_tra_info_trigg_bm_sc;
13202 ett_gtpv2_array[15] = &ett_gtpv2_tra_info_trigg_sgw_mme;
13203 ett_gtpv2_array[16] = &ett_gtpv2_tra_info_trigg_sgw;
13204 ett_gtpv2_array[17] = &ett_gtpv2_tra_info_trigg_pgw;
13205 ett_gtpv2_array[18] = &ett_gtpv2_tra_info_interfaces;
13206 ett_gtpv2_array[19] = &ett_gtpv2_tra_info_interfaces_imsc_server;
13207 ett_gtpv2_array[20] = &ett_gtpv2_tra_info_interfaces_lmgw;
13208 ett_gtpv2_array[21] = &ett_gtpv2_tra_info_interfaces_lsgsn;
13209 ett_gtpv2_array[22] = &ett_gtpv2_tra_info_interfaces_lggsn;
13210 ett_gtpv2_array[23] = &ett_gtpv2_tra_info_interfaces_lrnc;
13211 ett_gtpv2_array[24] = &ett_gtpv2_tra_info_interfaces_lbm_sc;
13212 ett_gtpv2_array[25] = &ett_gtpv2_tra_info_interfaces_lmme;
13213 ett_gtpv2_array[26] = &ett_gtpv2_tra_info_interfaces_lsgw;
13214 ett_gtpv2_array[27] = &ett_gtpv2_tra_info_interfaces_lpdn_gw;
13215 ett_gtpv2_array[28] = &ett_gtpv2_tra_info_interfaces_lpdn_lenb;
13216 ett_gtpv2_array[29] = &ett_gtpv2_tra_info_ne_types;
13217 ett_gtpv2_array[30] = &ett_gtpv2_rai;
13218 ett_gtpv2_array[31] = &ett_gtpv2_stn_sr;
13219 ett_gtpv2_array[32] = &ett_gtpv2_ms_mark;
13220 ett_gtpv2_array[33] = &ett_gtpv2_supp_codec_list;
13221 ett_gtpv2_array[34] = &ett_gtpv2_bss_con;
13222 ett_gtpv2_array[35] = &ett_gtpv2_utran_con;
13223 ett_gtpv2_array[36] = &ett_gtpv2_eutran_con;
13224 ett_gtpv2_array[37] = &ett_gtpv2_son_con;
13225 ett_gtpv2_array[38] = &ett_gtpv2_endc_son_con;
13226 ett_gtpv2_array[39] = &ett_gtpv2_intersys_son_con;
13227 ett_gtpv2_array[40] = &ett_gtpv2_mm_context_auth_qua;
13228 ett_gtpv2_array[41] = &ett_gtpv2_mm_context_auth_qui;
13229 ett_gtpv2_array[42] = &ett_gtpv2_mm_context_auth_tri;
13230 ett_gtpv2_array[43] = &ett_gtpv2_mm_context_net_cap;
13231 ett_gtpv2_array[44] = &ett_gtpv2_ms_network_capability;
13232 ett_gtpv2_array[45] = &ett_gtpv2_mm_context_sc;
13233 ett_gtpv2_array[46] = &ett_gtpv2_vd_pref;
13234 ett_gtpv2_array[47] = &ett_gtpv2_access_rest_data;
13235 ett_gtpv2_array[48] = &ett_gtpv2_qua;
13236 ett_gtpv2_array[49] = &ett_gtpv2_qui;
13237 ett_gtpv2_array[50] = &ett_gtpv2_preaa_tais;
13238 ett_gtpv2_array[51] = &ett_gtpv2_preaa_menbs;
13239 ett_gtpv2_array[52] = &ett_gtpv2_preaa_henbs;
13240 ett_gtpv2_array[53] = &ett_gtpv2_preaa_ecgis;
13241 ett_gtpv2_array[54] = &ett_gtpv2_preaa_rais;
13242 ett_gtpv2_array[55] = &ett_gtpv2_preaa_sais;
13243 ett_gtpv2_array[56] = &ett_gtpv2_preaa_cgis;
13244 ett_gtpv2_array[57] = &ett_gtpv2_load_control_inf;
13245 ett_gtpv2_array[58] = &ett_gtpv2_eci;
13246 ett_gtpv2_array[59] = &ett_gtpv2_twan_flags;
13247 ett_gtpv2_array[60] = &ett_gtpv2_ciot_support_ind;
13248 ett_gtpv2_array[61] = &ett_gtpv2_rohc_profile_flags;
13249 ett_gtpv2_array[62] = &ett_gtpv2_secondary_rat_usage_data_report;
13250 ett_gtpv2_array[63] = &ett_gtpv2_pres_rep_area_info;
13251 ett_gtpv2_array[64] = &ett_gtpv2_preaa_ext_menbs;
13252 ett_gtpv2_array[65] = &ett_gtpv2_ue_nr_sec_cap_len;
13253 ett_gtpv2_array[66] = &ett_gtpv2_apn_rte_ctrl_sts_len;
13254 ett_gtpv2_array[67] = &ett_gtpv2_if_mgcs;
13255 ett_gtpv2_array[68] = &ett_gtpv2_if_mgw;
13256 ett_gtpv2_array[69] = &ett_gtpv2_if_sgsn;
13257 ett_gtpv2_array[70] = &ett_gtpv2_if_ggsn;
13258 ett_gtpv2_array[71] = &ett_gtpv2_if_rnc;
13259 ett_gtpv2_array[72] = &ett_gtpv2_if_bm_sc;
13260 ett_gtpv2_array[73] = &ett_gtpv2_if_mme;
13261 ett_gtpv2_array[74] = &ett_gtpv2_if_sgw;
13262 ett_gtpv2_array[75] = &ett_gtpv2_if_pdn_gw;
13263 ett_gtpv2_array[76] = &ett_gtpv2_if_enb;
13264 ett_gtpv2_array[77] = &ett_gtpv2_if_hss;
13265 ett_gtpv2_array[78] = &ett_gtpv2_if_eir;
13266 ett_gtpv2_array[79] = &ett_gtpv2_if_amf;
13267 ett_gtpv2_array[80] = &ett_gtpv2_if_pcf;
13268 ett_gtpv2_array[81] = &ett_gtpv2_if_smf;
13269 ett_gtpv2_array[82] = &ett_gtpv2_if_upf;
13270 ett_gtpv2_array[83] = &ett_gtpv2_if_ng_ran_node;
13271 ett_gtpv2_array[84] = &ett_gtpv2_PGW_change_info;
13272 last_offset = GTPV2_NUM_INDIVIDUAL_ELEMS85;
13273
13274 for (i=0; i < NUM_GTPV2_IES256; i++, last_offset++)
13275 {
13276 ett_gtpv2_array[last_offset] = &ett_gtpv2_ies[i];
13277 }
13278
13279 static ei_register_info ei[] = {
13280 { &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)}}
}},
13281 { &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)}}
}},
13282 { &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)}}
}},
13283 { &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)}}
}},
13284 { &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)}}
}},
13285 { &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)}}
}},
13286 { &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)}}
}},
13287 { &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)}}
} },
13288 { &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)}}
} },
13289 };
13290
13291 expert_module_t* expert_gtpv2;
13292 module_t *gtpv2_module;
13293
13294 static const enum_val_t decode_srvcc_ps_to_cs_trans_cont_vals[] = {
13295 {"no", "Don't decode", PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0},
13296 {"utran", "Assume UTRAN target", PREF_DECODE_SRVCC_P2C_TRANS_CONT_TARGET_UTRAN1},
13297 {NULL((void*)0), NULL((void*)0), -1}
13298 };
13299
13300 proto_gtpv2 = proto_register_protocol("GPRS Tunneling Protocol V2", "GTPv2", "gtpv2");
13301
13302 gtpv2_module = prefs_register_protocol(proto_gtpv2, NULL((void*)0));
13303 prefs_register_enum_preference(gtpv2_module, "decode_srvcc_p2c_trans_cont_target",
13304 "Decode SRVCC PS-to-CS Transparent Containers",
13305 "Use this setting to decode the Transparent Containers in the SRVCC PS-to-CS messages.\n"
13306 "This is needed until there's a reliable way to determine the contents of the transparent containers.",
13307 &pref_decode_srvcc_p2c_trans_cont, decode_srvcc_ps_to_cs_trans_cont_vals, false0);
13308
13309 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);
13310
13311 proto_register_field_array(proto_gtpv2, hf_gtpv2, array_length(hf_gtpv2)(sizeof (hf_gtpv2) / sizeof (hf_gtpv2)[0]));
13312 proto_register_subtree_array(ett_gtpv2_array, array_length(ett_gtpv2_array)(sizeof (ett_gtpv2_array) / sizeof (ett_gtpv2_array)[0]));
13313 expert_gtpv2 = expert_register_protocol(proto_gtpv2);
13314 expert_register_field_array(expert_gtpv2, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
13315
13316 register_dissector("gtpv2", dissect_gtpv2, proto_gtpv2);
13317 /* Dissector table for private extensions */
13318 gtpv2_priv_ext_dissector_table = register_dissector_table("gtpv2.priv_ext", "GTPv2 Private Extension", proto_gtpv2, FT_UINT16, BASE_DEC);
13319
13320 gtpv2_tap = register_tap("gtpv2");
13321
13322 register_srt_table(proto_gtpv2, NULL((void*)0), 1, gtpv2_stat_packet, gtpv2_stat_init, NULL((void*)0));
13323}
13324
13325void
13326proto_reg_handoff_gtpv2(void)
13327{
13328 //static bool Initialized = false;
13329
13330 nas_eps_handle = find_dissector_add_dependency("nas-eps", proto_gtpv2);
13331
13332 radius_register_avp_dissector(VENDOR_THE3GPP10415, 22, dissect_radius_user_loc);
13333
13334 /* AVP Code: 22 3GPP-User-Location-Info */
13335 dissector_add_uint("diameter.3gpp", 22, create_dissector_handle(dissect_diameter_3gpp_uli, proto_gtpv2));
13336
13337 /* AVP Code: 2820 Presence-Reporting-Area-Elements-List */
13338 dissector_add_uint("diameter.3gpp", 2820, create_dissector_handle(dissect_diameter_3gpp_presence_reporting_area_elements_list, proto_gtpv2));
13339
13340}
13341
13342/*
13343 * Editor modelines
13344 *
13345 * Local Variables:
13346 * c-basic-offset: 4
13347 * tab-width: 8
13348 * indent-tabs-mode: nil
13349 * End:
13350 *
13351 * ex: set shiftwidth=4 tabstop=8 expandtab:
13352 * :indentSize=4:tabSize=8:noTabs=true:
13353 */