### 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

Show analyzer invocation
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-10-100353-3604-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-gtpv2.c

Keyboard shortcuts:

- Use 'j/k' keys for keyboard navigation
- Use 'Shift+S' to show/hide relevant lines
- Use '?' to toggle this window

Close
Show only relevant lines Show control flow arrows

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 |
47 | void proto_register_gtpv2(void);
48 | void proto_reg_handoff_gtpv2(void);
49 |
50 | static dissector_handle_t nas_eps_handle;
51 | static dissector_table_t gtpv2_priv_ext_dissector_table;
52 |
53 |
54 | /*GTPv2 Message->GTP Header(SB)*/
55 | static int proto_gtpv2;
56 |
57 | static int hf_gtpv2_response_in;
58 | static int hf_gtpv2_response_to;
59 | static int hf_gtpv2_response_time;
60 | static int hf_gtpv2_spare_half_octet;
61 | //static int hf_gtpv2_spare_b7_b1;
62 | static int hf_gtpv2_spare_b7_b2;
63 | static int hf_gtpv2_spare_b7_b3;
64 | static int hf_gtpv2_spare_b7_b4;
65 | static int hf_gtpv2_spare_b7_b5;
66 |
67 | static int hf_gtpv2_spare_bits;
68 | static int hf_gtpv2_flags;
69 | static int hf_gtpv2_version;
70 | static int hf_gtpv2_p;
71 | static int hf_gtpv2_t;
72 | static int hf_gtpv2_mp;
73 | static int hf_gtpv2_message_type;
74 | static int hf_gtpv2_msg_length;
75 | static int hf_gtpv2_teid;
76 | static int hf_gtpv2_seq;
77 | static int hf_gtpv2_msg_prio;
78 | static int hf_gtpv2_spare;
79 | static int hf_gtpv2_spare_w0;
80 |
81 | static int hf_gtpv2_ie;
82 | static int hf_gtpv2_ie_len;
83 | static int hf_gtpv2_cr;
84 | static int hf_gtpv2_instance;
85 | static int hf_gtpv2_cause;
86 | static int hf_gtpv2_cause_cs;
87 | static int hf_gtpv2_cause_bce;
88 | static int hf_gtpv2_cause_pce;
89 | static int hf_gtpv2_cause_off_ie_t;
90 | static int hf_gtpv2_rec;
91 | /*Start SRVCC Messages*/
92 | static int hf_gtpv2_stn_sr;
93 | static int hf_gtpv2_len_trans_con;
94 | static int hf_gtpv2_eksi;
95 | static int hf_gtpv2_ck;
96 | static int hf_gtpv2_ik;
97 | static int hf_gtpv2_len_ms_classmark2;
98 | static int hf_gtpv2_len_ms_classmark3;
99 | static int hf_gtpv2_len_supp_codec_list;
100 | static int hf_gtpv2_ksi;
101 | /*static int hf_gtpv2_kc; */
102 | static int hf_gtpv2_cksn;
103 | static int hf_gtpv2_srvcc_cause;
104 | static int hf_gtpv2_rac;
105 | static int hf_gtpv2_rnc_id;
106 | static int hf_gtpv2_ext_rnc_id;
107 | static int hf_gtpv2_lac;
108 | static int hf_gtpv2_sac;
109 | static int hf_gtpv2_tgt_g_cell_id;
110 | static int hf_gtpv2_teid_c;
111 | static int hf_gtpv2_sv_sti;
112 | static int hf_gtpv2_sv_ics;
113 | static int hf_gtpv2_sv_emind;
114 | /*End SRVCC Messages*/
115 | static int hf_gtpv2_apn;
116 | static int hf_gtpv2_ebi;
117 | static int hf_gtpv2_daf;
118 | static int hf_gtpv2_dtf;
119 | static int hf_gtpv2_hi;
120 | static int hf_gtpv2_dfi;
121 | static int hf_gtpv2_oi;
122 | static int hf_gtpv2_isrsi;
123 | static int hf_gtpv2_israi;
124 | static int hf_gtpv2_sgwci;
125 | static int hf_gtpv2_sqci;
126 | static int hf_gtpv2_uimsi;
127 | static int hf_gtpv2_cfsi;
128 | static int hf_gtpv2_crsi;
129 | static int hf_gtpv2_pt;
130 | static int hf_gtpv2_ps;
131 | static int hf_gtpv2_si;
132 | static int hf_gtpv2_msv;
133 | static int hf_gtpv2_retloc;
134 | static int hf_gtpv2_pbic;
135 | static int hf_gtpv2_srni;
136 | static int hf_gtpv2_s6af;
137 | static int hf_gtpv2_s4af;
138 | static int hf_gtpv2_mbmdt;
139 | static int hf_gtpv2_israu;
140 | static int hf_gtpv2_ccrsi;
141 | static int hf_gtpv2_cprai;
142 | static int hf_gtpv2_arrl;
143 | static int hf_gtpv2_ppof;
144 | static int hf_gtpv2_ppon_ppei;
145 | static int hf_gtpv2_ppsi;
146 | static int hf_gtpv2_csfbi;
147 | static int hf_gtpv2_clii;
148 | static int hf_gtpv2_cpsr;
149 | static int hf_gtpv2_nsi;
150 | static int hf_gtpv2_uasi;
151 | static int hf_gtpv2_dtci;
152 | static int hf_gtpv2_bdwi;
153 | static int hf_gtpv2_psci;
154 | static int hf_gtpv2_pcri;
155 | static int hf_gtpv2_aosi;
156 | static int hf_gtpv2_aopi;
157 | static int hf_gtpv2_roaai;
158 | static int hf_gtpv2_epcosi;
159 | static int hf_gtpv2_cpopci;
160 | static int hf_gtpv2_pmtsmi;
161 | static int hf_gtpv2_s11tf;
162 | static int hf_gtpv2_pnsi;
163 | static int hf_gtpv2_unaccsi;
164 | static int hf_gtpv2_wpmsi;
165 |
166 | static int hf_gtpv2_5gsnn26;
167 | static int hf_gtpv2_reprefi;
168 | static int hf_gtpv2_5gsiwk;
169 | static int hf_gtpv2_eevrsi;
170 | static int hf_gtpv2_ltemui;
171 | static int hf_gtpv2_ltempi;
172 | static int hf_gtpv2_enbcrsi;
173 | static int hf_gtpv2_tspcmi;
174 | static int hf_gtpv2_ethpdn;
175 |
176 | static int hf_gtpv2_csrmfi;
177 | static int hf_gtpv2_mtedtn;
178 | static int hf_gtpv2_mtedta;
179 | static int hf_gtpv2_n5gnmi;
180 | static int hf_gtpv2_5gcnrs;
181 | static int hf_gtpv2_5gcnri;
182 | static int hf_gtpv2_5srhoi;
183 |
184 | static int hf_gtpv2_nspusi;
185 | static int hf_gtpv2_pgwrnsi;
186 | static int hf_gtpv2_rppcsi;
187 | static int hf_gtpv2_pgwchi;
188 | static int hf_gtpv2_sissme;
189 | static int hf_gtpv2_nsenbi;
190 | static int hf_gtpv2_idfupf;
191 | static int hf_gtpv2_emci;
192 |
193 | static int hf_gtpv2_lapcosi;
194 | static int hf_gtpv2_ltemsai;
195 | static int hf_gtpv2_srtpi;
196 | static int hf_gtpv2_upipsi;
197 |
198 | static int hf_gtpv2_pdn_type;
199 | static int hf_gtpv2_pdn_ipv4;
200 | static int hf_gtpv2_pdn_ipv6_len;
201 | static int hf_gtpv2_pdn_ipv6;
202 | static int hf_gtpv2_pdn_numbers_nsapi;
203 | static int hf_gtpv2_p_tmsi;
204 | static int hf_gtpv2_p_tmsi_sig;
205 | static int hf_gtpv2_mmbr_ul;
206 | static int hf_gtpv2_mmbr_dl;
207 |
208 | static int hf_gtpv2_rat_type;
209 | static int hf_gtpv2_uli_ext_macro_enb_id_flg;
210 | static int hf_gtpv2_uli_macro_enb_id_flg;
211 | static int hf_gtpv2_uli_lai_flg;
212 | static int hf_gtpv2_uli_ecgi_flg;
213 | static int hf_gtpv2_uli_tai_flg;
214 | static int hf_gtpv2_uli_rai_flg;
215 | static int hf_gtpv2_uli_sai_flg;
216 | static int hf_gtpv2_uli_cgi_flg;
217 | static int hf_gtpv2_glt;
218 | static int hf_gtpv2_cng_rep_act;
219 |
220 | static int hf_gtpv2_selec_mode;
221 | static int hf_gtpv2_source_type;
222 | static int hf_gtpv2_f_teid_v4;
223 | static int hf_gtpv2_f_teid_v6;
224 | static int hf_gtpv2_f_teid_interface_type;
225 | static int hf_gtpv2_f_teid_gre_key;
226 | static int hf_gtpv2_f_teid_ipv4;
227 | static int hf_gtpv2_f_teid_ipv6;
228 | static int hf_gtpv2_tmsi;
229 | static int hf_gtpv2_hsgw_addr_f_len;
230 | static int hf_gtpv2_hsgw_addr_ipv4;
231 | static int hf_gtpv2_hsgw_addr_ipv6;
232 | static int hf_gtpv2_gre_key;
233 | static int hf_gtpv2_sgw_addr_ipv4;
234 | static int hf_gtpv2_sgw_addr_ipv6;
235 | static int hf_gtpv2_sgw_s1u_teid;
236 | static int hf_gtpv2_ipv4_addr;
237 |
238 |
239 | static int hf_gtpv2_ambr_up;
240 | static int hf_gtpv2_ambr_down;
241 | static int hf_gtpv2_ip_address_ipv4;
242 | static int hf_gtpv2_ip_address_ipv6;
243 | static int hf_gtpv2_mei;
244 |
245 | /* Trace Information */
246 | /* static int hf_gtpv2_tra_info; */
247 | static int hf_gtpv2_tra_info_msc_momt_calls;
248 | static int hf_gtpv2_tra_info_msc_momt_sms;
249 | static int hf_gtpv2_tra_info_msc_lu_imsi_ad;
250 | static int hf_gtpv2_tra_info_msc_handovers;
251 | static int hf_gtpv2_tra_info_msc_ss;
252 | static int hf_gtpv2_tra_info_mgw_context;
253 | static int hf_gtpv2_tra_info_sgsn_pdp_context;
254 | static int hf_gtpv2_tra_info_sgsn_momt_sms;
255 | static int hf_gtpv2_tra_info_sgsn_rau_gprs_ad;
256 | static int hf_gtpv2_tra_info_sgsn_mbms;
257 | static int hf_gtpv2_tra_info_sgsn_reserved;
258 | static int hf_gtpv2_tra_info_ggsn_pdp;
259 | static int hf_gtpv2_tra_info_ggsn_mbms;
260 | static int hf_gtpv2_tra_info_bm_sc;
261 | static int hf_gtpv2_tra_info_mme_sgw_ss;
262 | static int hf_gtpv2_tra_info_mme_sgw_sr;
263 | static int hf_gtpv2_tra_info_mme_sgw_iataud;
264 | static int hf_gtpv2_tra_info_mme_sgw_ue_init_pdn_disc;
265 | static int hf_gtpv2_tra_info_mme_sgw_bearer_act_mod_del;
266 | static int hf_gtpv2_tra_info_mme_sgw_ho;
267 | static int hf_gtpv2_tra_info_sgw_pdn_con_creat;
268 | static int hf_gtpv2_tra_info_sgw_pdn_con_term;
269 | static int hf_gtpv2_tra_info_sgw_bearer_act_mod_del;
270 | static int hf_gtpv2_tra_info_pgw_pdn_con_creat;
271 | static int hf_gtpv2_tra_info_pgw_pdn_con_term;
272 | static int hf_gtpv2_tra_info_pgw_bearer_act_mod_del;
273 | static int hf_gtpv2_tra_info_lne_msc_s;
274 | static int hf_gtpv2_tra_info_lne_mgw;
275 | static int hf_gtpv2_tra_info_lne_sgsn;
276 | static int hf_gtpv2_tra_info_lne_ggsn;
277 | static int hf_gtpv2_tra_info_lne_rnc;
278 | static int hf_gtpv2_tra_info_lne_bm_sc;
279 | static int hf_gtpv2_tra_info_lne_mme;
280 | static int hf_gtpv2_tra_info_lne_sgw;
281 | static int hf_gtpv2_tra_info_lne_pdn_gw;
282 | static int hf_gtpv2_tra_info_lne_enb;
283 | static int hf_gtpv2_tra_info_lne_amf;
284 | static int hf_gtpv2_tra_info_lne_smf;
285 | static int hf_gtpv2_tra_info_lne_pcf;
286 | static int hf_gtpv2_tra_info_lne_upf;
287 | static int hf_gtpv2_tra_info_tra_info_ng_ran_node;
288 | static int hf_gtpv2_tra_info_tdl;
289 | static int hf_gtpv2_tra_info_lmsc_a;
290 | static int hf_gtpv2_tra_info_lmsc_lu;
291 | static int hf_gtpv2_tra_info_lmsc_mc;
292 | static int hf_gtpv2_tra_info_lmsc_map_g;
293 | static int hf_gtpv2_tra_info_lmsc_map_b;
294 | static int hf_gtpv2_tra_info_lmsc_map_e;
295 | static int hf_gtpv2_tra_info_lmsc_map_f;
296 | static int hf_gtpv2_tra_info_lmsc_cap;
297 | static int hf_gtpv2_tra_info_lmsc_map_d;
298 | static int hf_gtpv2_tra_info_lmsc_map_c;
299 | static int hf_gtpv2_tra_info_lmgw_mc;
300 | static int hf_gtpv2_tra_info_lmgw_nb_up;
301 | static int hf_gtpv2_tra_info_lmgw_lu_up;
302 | static int hf_gtpv2_tra_info_lsgsn_gb;
303 | static int hf_gtpv2_tra_info_lsgsn_lu;
304 | static int hf_gtpv2_tra_info_lsgsn_gn;
305 | static int hf_gtpv2_tra_info_lsgsn_map_gr;
306 | static int hf_gtpv2_tra_info_lsgsn_map_gd;
307 | static int hf_gtpv2_tra_info_lsgsn_map_gf;
308 | static int hf_gtpv2_tra_info_lsgsn_gs;
309 | static int hf_gtpv2_tra_info_lsgsn_ge;
310 | static int hf_gtpv2_tra_info_lggsn_gn;
311 | static int hf_gtpv2_tra_info_lggsn_gi;
312 | static int hf_gtpv2_tra_info_lggsn_gmb;
313 | static int hf_gtpv2_tra_info_lrnc_lu;
314 | static int hf_gtpv2_tra_info_lrnc_lur;
315 | static int hf_gtpv2_tra_info_lrnc_lub;
316 | static int hf_gtpv2_tra_info_lrnc_uu;
317 | static int hf_gtpv2_tra_info_lbm_sc_gmb;
318 | static int hf_gtpv2_tra_info_lmme_s1_mme;
319 | static int hf_gtpv2_tra_info_lmme_s3;
320 | static int hf_gtpv2_tra_info_lmme_s6a;
321 | static int hf_gtpv2_tra_info_lmme_s10;
322 | static int hf_gtpv2_tra_info_lmme_s11;
323 | static int hf_gtpv2_tra_info_lsgw_s4;
324 | static int hf_gtpv2_tra_info_lsgw_s5;
325 | static int hf_gtpv2_tra_info_lsgw_s8b;
326 | static int hf_gtpv2_tra_info_lsgw_s11;
327 | static int hf_gtpv2_tra_info_lpdn_gw_s2a;
328 | static int hf_gtpv2_tra_info_lpdn_gw_s2b;
329 | static int hf_gtpv2_tra_info_lpdn_gw_s2c;
330 | static int hf_gtpv2_tra_info_lpdn_gw_s5;
331 | static int hf_gtpv2_tra_info_lpdn_gw_s6c;
332 | static int hf_gtpv2_tra_info_lpdn_gw_gx;
333 | static int hf_gtpv2_tra_info_lpdn_gw_s8b;
334 | static int hf_gtpv2_tra_info_lpdn_gw_sgi;
335 | static int hf_gtpv2_tra_info_lenb_s1_mme;
336 | static int hf_gtpv2_tra_info_lenb_x2;
337 | static int hf_gtpv2_tra_info_lenb_uu;
338 |
339 | static int hf_gtpv2_ti;
340 |
341 | static int hf_gtpv2_bearer_qos_pci;
342 | static int hf_gtpv2_bearer_qos_pl;
343 | static int hf_gtpv2_bearer_qos_pvi;
344 | static int hf_gtpv2_bearer_qos_label_qci;
345 | static int hf_gtpv2_bearer_qos_mbr_up;
346 | static int hf_gtpv2_bearer_qos_mbr_down;
347 | static int hf_gtpv2_bearer_qos_gbr_up;
348 | static int hf_gtpv2_bearer_qos_gbr_down;
349 | static int hf_gtpv2_flow_qos_label_qci;
350 | static int hf_gtpv2_flow_qos_mbr_up;
351 | static int hf_gtpv2_flow_qos_mbr_down;
352 | static int hf_gtpv2_flow_qos_gbr_up;
353 | static int hf_gtpv2_flow_qos_gbr_down;
354 |
355 | static int hf_gtpv2_delay_value;
356 | static int hf_gtpv2_charging_id;
357 | static int hf_gtpv2_charging_characteristic;
358 | static int hf_gtpv2_bearer_flag_ppc;
359 | static int hf_gtpv2_bearer_flag_vb;
360 | static int hf_gtpv2_ue_time_zone_dst;
361 | static int hf_gtpv2_fq_csid_type;
362 | static int hf_gtpv2_fq_csid_nr;
363 | static int hf_gtpv2_fq_csid_ipv4;
364 | static int hf_gtpv2_fq_csid_ipv6;
365 | static int hf_gtpv2_fq_csid_id;
366 | static int hf_gtpv2_complete_req_msg_type;
367 | static int hf_gtpv2_mme_grp_id;
368 | static int hf_gtpv2_mme_code;
369 | static int hf_gtpv2_m_tmsi;
370 | static int hf_gtpv2_container_type;
371 | static int hf_gtpv2_cause_type;
372 | static int hf_gtpv2_CauseRadioNetwork;
373 | static int hf_gtpv2_CauseTransport;
374 | static int hf_gtpv2_CauseNas;
375 | static int hf_gtpv2_CauseProtocol;
376 | static int hf_gtpv2_CauseMisc;
377 | static int hf_gtpv2_target_type;
378 | static int hf_gtpv2_macro_enodeb_id;
379 | static int hf_gtpv2_smenb;
380 | static int hf_gtpv2_ext_macro_enodeb_id;
381 | static int hf_gtpv2_ext_macro_ng_enodeb_id;
382 | static int hf_gtpv2_enodebid;
383 | static int hf_gtpv2_cellid;
384 |
385 | static int hf_gtpv2_node_type;
386 | static int hf_gtpv2_fqdn;
387 | static int hf_gtpv2_enterprise_id;
388 | static int hf_gtpv2_apn_rest;
389 | static int hf_gtpv2_pti;
390 | static int hf_gtpv2_mm_context_sm;
391 | static int hf_gtpv2_mm_context_nhi;
392 | static int hf_gtpv2_mm_context_drxi;
393 | static int hf_gtpv2_mm_context_cksn;
394 | static int hf_gtpv2_mm_context_cksn_ksi;
395 | static int hf_gtpv2_mm_context_kasme;
396 | static int hf_gtpv2_mm_context_rand;
397 | static int hf_gtpv2_mm_context_xres_len;
398 | static int hf_gtpv2_mm_context_xres;
399 | static int hf_gtpv2_mm_context_autn_len;
400 | static int hf_gtpv2_mm_context_autn;
401 | static int hf_gtpv2_mm_context_drx;
402 | static int hf_gtpv2_mm_context_ue_net_cap_len;
403 | static int hf_gtpv2_mm_context_ms_net_cap_len;
404 | static int hf_gtpv2_mm_context_mei_len;
405 | static int hf_gtpv2_mm_context_vdp_len;
406 | static int hf_gtpv2_mm_contex_nhi_old;
407 | static int hf_gtpv2_mm_context_old_ksiasme;
408 | static int hf_gtpv2_mm_context_old_ncc;
409 | static int hf_gtpv2_mm_context_old_kasme;
410 | static int hf_gtpv2_mm_context_old_nh;
411 | static int hf_gtpv2_mm_context_higher_br_16mb_flg_len;
412 | static int hf_gtpv2_mm_context_higher_br_16mb_flg;
413 | static int hf_gtpv2_vdp_length;
414 | static int hf_gtpv2_mm_context_paging_len;
415 | static int hf_gtpv2_mm_context_ex_access_res_data_len;
416 | static int hf_gtpv2_mm_context_ue_add_sec_cap_len;
417 | static int hf_gtpv2_mm_context_ue_nr_sec_cap_len;
418 | static int hf_gtpv2_mm_context_apn_rte_ctrl_sts_len;
419 | static int hf_gtpv2_mm_context_cnr_len;
420 | static int hf_gtpv2_mm_context_ue_radio_cap_len;
421 | static int hf_gtpv2_uci_csg_id;
422 | static int hf_gtpv2_uci_csg_id_spare;
423 | static int hf_gtpv2_uci_access_mode;
424 | static int hf_gtpv2_uci_lcsg;
425 | static int hf_gtpv2_uci_csg_membership;
426 |
427 | static int hf_gtpv2_una;
428 | static int hf_gtpv2_gena;
429 | static int hf_gtpv2_gana;
430 | static int hf_gtpv2_ina;
431 | static int hf_gtpv2_ena;
432 | static int hf_gtpv2_hnna;
433 | static int hf_gtpv2_hbna;
434 | static int hf_gtpv2_mm_context_ksi_a;
435 | static int hf_gtpv2_mm_context_ksi;
436 | static int hf_gtpv2_mm_context_nr_tri;
437 | static int hf_gtpv2_mm_context_used_cipher;
438 | static int hf_gtpv2_mm_context_nr_qui;
439 | static int hf_gtpv2_mm_context_nr_qua;
440 | static int hf_gtpv2_mm_context_uamb_ri;
441 | static int hf_gtpv2_mm_context_osci;
442 | static int hf_gtpv2_mm_context_nruna;
443 | static int hf_gtpv2_mm_context_nrusrna;
444 | static int hf_gtpv2_mm_context_nrna;
445 | static int hf_gtpv2_mm_context_ussrna;
446 | static int hf_gtpv2_mm_context_nrsrna;
447 | static int hf_gtpv2_mm_context_ensct;
448 |
449 | static int hf_gtpv2_mm_context_samb_ri;
450 | static int hf_gtpv2_mm_context_unipa;
451 | static int hf_gtpv2_mm_context_unc;
452 | static int hf_gtpv2_mm_context_nas_dl_cnt;
453 | static int hf_gtpv2_mm_context_nas_ul_cnt;
454 |
455 | static int hf_gtpv2_uli_cgi_lac;
456 | static int hf_gtpv2_uli_cgi_ci;
457 | static int hf_gtpv2_sai_lac;
458 | static int hf_gtpv2_sai_sac;
459 | static int hf_gtpv2_rai_lac;
460 | static int hf_gtpv2_rai_rac;
461 | static int hf_gtpv2_tai_tac;
462 | static int hf_gtpv2_tai_tac_name;
463 | static int hf_gtpv2_5gs_tai_tac;
464 | static int hf_gtpv2_ecgi_eci;
465 | static int hf_gtpv2_ncgi_nrci;
466 | static int hf_gtpv2_uli_lai_lac;
467 | static int hf_gtpv2_ecgi_eci_spare;
468 | static int hf_gtpv2_nsapi;
469 | static int hf_gtpv2_bearer_control_mode;
470 |
471 | static int hf_gtpv2_bss_container_phx;
472 | static int hf_gtpv2_bss_con_sapi_flg;
473 | static int hf_gtpv2_bss_con_rp_flg;
474 | static int hf_gtpv2_bss_con_pfi_flg;
475 | static int hf_gtpv2_bss_con_pfi;
476 | static int hf_gtpv2_bss_con_rp;
477 | static int hf_gtpv2_bss_con_sapi;
478 | static int hf_gtpv2_bss_con_xid_len;
479 | static int hf_gtpv2_bss_con_xid;
480 | static int hf_gtpv2_home_enodeb_id;
481 | static int hf_gtpv2_tac;
482 |
483 | /* MBMS */
484 | static int hf_gtpv2_mbms_service_area_nr;
485 | static int hf_gtpv2_mbms_service_area_id;
486 | static int hf_gtpv2_mbms_session_id;
487 | static int hf_gtpv2_mbms_flow_id;
488 | static int hf_gtpv2_cteid;
489 | static int hf_gtpv2_ip_addr_type;
490 | static int hf_gtpv2_ip_addr_len;
491 | static int hf_gtpv2_mbms_ip_mc_dist_addrv4;
492 | static int hf_gtpv2_mbms_ip_mc_dist_addrv6;
493 | static int hf_gtpv2_mbms_ip_mc_src_addrv4;
494 | static int hf_gtpv2_mbms_ip_mc_src_addrv6;
495 | static int hf_gtpv2_mbms_hc_indicator;
496 | static int hf_gtpv2_mbms_dist_indication;
497 | static int hf_gtpv2_subscriber_rfsp;
498 | static int hf_gtpv2_rfsp_inuse;
499 | static int hf_gtpv2_mbms_service_id;
500 | static int hf_gtpv2_add_flags_for_srvcc_ics;
501 | static int hf_gtpv2_vsrvcc_flag;
502 | static int hf_gtpv2_abs_time_mbms_data;
503 | static int hf_gtpv2_henb_info_report_fti;
504 | static int hf_gtpv2_ip4cp_subnet_prefix_len;
505 | static int hf_gtpv2_ip4cp_ipv4;
506 | static int hf_gtpv2_change_report_flags_sncr;
507 | static int hf_gtpv2_change_report_flags_tzcr;
508 | static int hf_gtpv2_action_indication_val;
509 | static int hf_gtpv2_uli_timestamp;
510 | static int hf_gtpv2_mbms_session_duration_days;
511 | static int hf_gtpv2_mbms_session_duration_secs;
512 | static int hf_gtpv2_csg_id;
513 | static int hf_gtpv2_cmi;
514 | static int hf_gtpv2_service_indicator;
515 | static int hf_gtpv2_detach_type;
516 | static int hf_gtpv2_ldn;
517 | static int hf_gtpv2_node_features_prn;
518 | static int hf_gtpv2_node_features_mabr;
519 | static int hf_gtpv2_node_features_ntsr;
520 | static int hf_gtpv2_node_features_ciot;
521 | static int hf_gtpv2_node_features_s1un;
522 | static int hf_gtpv2_node_features_eth;
523 | static int hf_gtpv2_node_features_mtedt;
524 | static int hf_gtpv2_node_features_psset;
525 | static int hf_gtpv2_time_to_data_xfer;
526 | static int hf_gtpv2_arp_pvi;
527 | static int hf_gtpv2_arp_pl;
528 | static int hf_gtpv2_arp_pci;
529 | static int hf_gtpv2_timer_unit;
530 | static int hf_gtpv2_throttling_delay_unit;
531 | static int hf_gtpv2_throttling_delay_value;
532 | static int hf_gtpv2_timer_value;
533 | static int hf_gtpv2_lapi;
534 |
535 | static int hf_gtpv2_pres_rep_area_act_inapra;
536 | static int hf_gtpv2_pres_rep_area_action;
537 | static int hf_gtpv2_pres_rep_area_id;
538 | static int hf_gtpv2_pres_rep_area_act_no_tai;
539 | static int hf_gtpv2_pres_rep_area_act_no_rai;
540 | static int hf_gtpv2_pres_rep_area_act_no_m_enodeb;
541 | static int hf_gtpv2_pres_rep_area_act_no_h_enodeb;
542 | static int hf_gtpv2_pres_rep_area_act_no_ecgi;
543 | static int hf_gtpv2_pres_rep_area_act_no_sai;
544 | static int hf_gtpv2_pres_rep_area_act_no_cgi;
545 | static int hf_gtpv2_pres_rep_area_act_no_ext_m_enodeb;
546 | static int hf_gtpv2_ksi_ps;
547 | static int hf_gtpv2_ck_ps;
548 | static int hf_gtpv2_ik_ps;
549 | static int hf_gtpv2_kc_ps;
550 | static int hf_gtpv2_cksn_ps;
551 |
552 | static int hf_gtpv2_pres_rep_area_info_id;
553 | static int hf_gtpv2_pres_rep_area_info_additional_id;
554 | static int hf_gtpv2_pres_rep_area_info_flags;
555 | static int hf_gtpv2_pres_rep_area_info_flags_no_inapra;
556 | static int hf_gtpv2_pres_rep_area_info_flags_b4_b7_spare;
557 | static int hf_gtpv2_pres_rep_area_info_flags_b3_b7_spare;
558 | static int hf_gtpv2_pres_rep_area_info_flags_b3_inapra;
559 | static int hf_gtpv2_pres_rep_area_info_flags_b2_apra;
560 | static int hf_gtpv2_pres_rep_area_info_flags_b1_opra;
561 | static int hf_gtpv2_pres_rep_area_info_flags_b0_ipra;
562 |
563 | /* Generated from convert_proto_tree_add_text.pl */
564 | static int hf_gtpv2_downlink_subscribed_ue_ambr;
565 | static int hf_gtpv2_mm_context_sres;
566 | static int hf_gtpv2_iksrvcc;
567 | static int hf_gtpv2_nsapi08;
568 | static int hf_gtpv2_voice_domain_and_ue_usage_setting;
569 | static int hf_gtpv2_ue_radio_capability_for_paging_information;
570 | static int hf_gtpv2_port_number;
571 | static int hf_gtpv2_uplink_used_ue_ambr;
572 | static int hf_gtpv2_tmsi_bytes;
573 | static int hf_gtpv2_dl_gtp_u_sequence_number;
574 | static int hf_gtpv2_mm_context_nh;
575 | static int hf_gtpv2_teid_c_spare;
576 | static int hf_gtpv2_uplink_subscribed_ue_ambr;
577 | static int hf_gtpv2_transparent_container;
578 | static int hf_gtpv2_packet_flow_id;
579 | static int hf_gtpv2_utran_srvcc_ik_cs;
580 | static int hf_gtpv2_downlink_used_ue_ambr;
581 | static int hf_gtpv2_hop_counter;
582 | static int hf_gtpv2_ul_gtp_u_sequence_number;
583 | static int hf_gtpv2_authentication_quadruplets;
584 | static int hf_gtpv2_utran_srvcc_kc;
585 | static int hf_gtpv2_spare_bytes;
586 | static int hf_gtpv2_metric;
587 | static int hf_gtpv2_throttling_factor;
588 | static int hf_gtpv2_relative_capacity;
589 | static int hf_gtpv2_apn_length;
590 | static int hf_gtpv2_sequence_number;
591 | static int hf_gtpv2_receive_n_pdu_number;
592 | static int hf_gtpv2_trace_id;
593 | static int hf_gtpv2_drx_parameter;
594 | static int hf_gtpv2_charging_characteristic_remaining_octets;
595 | static int hf_gtpv2_mm_context_ncc;
596 | static int hf_gtpv2_proprietary_value;
597 | static int hf_gtpv2_mobile_station_classmark2;
598 | static int hf_gtpv2_rrc_container;
599 | static int hf_gtpv2_send_n_pdu_number;
600 | static int hf_gtpv2_mobile_station_classmark3;
601 | static int hf_gtpv2_eps_bearer_id_number;
602 | static int hf_gtpv2_geographic_location;
603 | static int hf_gtpv2_cn_id;
604 | static int hf_gtpv2_utran_srvcc_ck_cs;
605 | static int hf_gtpv2_authentication_quintuplets;
606 | static int hf_gtpv2_serving_gw_address_length;
607 | static int hf_gtpv2_supported_codec_list;
608 | static int hf_gtpv2_cksrvcc;
609 | static int hf_gtpv2_mm_context_kc;
610 | static int hf_gtpv2_dl_pdcp_sequence_number;
611 | static int hf_gtpv2_ul_pdcp_sequence_number;
612 | static int hf_gtpv2_fq_csid_node_id;
613 | static int hf_gtpv2_fq_csid_mcc_mnc;
614 | static int hf_gtpv2_ppi_value;
615 | static int hf_gtpv2_ppi_flag;
616 | static int hf_gtpv2_session;
617 | static int hf_gtpv2_twan_id_ts;
618 | static int hf_gtpv2_twan_flags;
619 | static int hf_gtpv2_twan_bssidi;
620 | static int hf_gtpv2_twan_civai;
621 | static int hf_gtpv2_twan_plmni;
622 | static int hf_gtpv2_twan_opnai;
623 | static int hf_gtpv2_twan_laii;
624 | static int hf_gtpv2_twan_ssid_len;
625 | static int hf_gtpv2_twan_ssid;
626 | static int hf_gtpv2_twan_bssid;
627 | static int hf_gtpv2_twan_civa_len;
628 | static int hf_gtpv2_twan_civa;
629 | static int hf_gtpv2_twan_plmnid;
630 | static int hf_gtpv2_twan_op_name_len;
631 | static int hf_gtpv2_twan_op_name;
632 | static int hf_gtpv2_twan_relay_id_type;
633 | static int hf_gtpv2_twan_relay_id_len;
634 | static int hf_gtpv2_twan_relay_id;
635 | static int hf_gtpv2_twan_relay_id_ipv4;
636 | static int hf_gtpv2_twan_relay_id_ipv6;
637 | static int hf_gtpv2_twan_circuit_id_len;
638 | static int hf_gtpv2_twan_circuit_id;
639 | static int hf_gtpv2_integer_number_val;
640 | static int hf_gtpv2_maximum_wait_time;
641 | static int hf_gtpv2_dl_buf_sug_pkt_cnt;
642 | static int hf_gtpv2_ue_usage_type;
643 | static int hf_gtpv2_rem_run_serv_gap_t;
644 | static int hf_gtpv2_ran_nas_protocol_type;
645 | static int hf_gtpv2_ran_nas_cause_type;
646 | static int hf_gtpv2_ran_nas_cause_value;
647 | static int hf_gtpv2_emm_cause;
648 | static int hf_gtpv2_esm_cause;
649 | static int hf_gtpv2_diameter_cause;
650 | static int hf_gtpv2_ikev2_cause;
651 |
652 | static int hf_gtpv2_ciot_support_ind;
653 | static int hf_gtpv2_ciot_support_ind_spare_bits;
654 | static int hf_gtpv2_ciot_support_ind_bit4;
655 | static int hf_gtpv2_ciot_support_ind_bit3;
656 | static int hf_gtpv2_ciot_support_ind_bit2;
657 | static int hf_gtpv2_ciot_support_ind_bit1;
658 |
659 | static int hf_gtpv2_length_of_node_name;
660 | static int hf_gtpv2_node_name;
661 | static int hf_gtpv2_length_of_node_realm;
662 | static int hf_gtpv2_node_realm;
663 | static int hf_gtpv2_ms_ts;
664 | static int hf_gtpv2_origination_ts;
665 | static int hf_gtpv2_mon_event_inf_nsur;
666 | static int hf_gtpv2_mon_event_inf_nsui;
667 | static int hf_gtpv2_mon_event_inf_nscf;
668 | static int hf_gtpv2_mon_event_inf_srie;
669 | static int hf_gtpv2_mon_event_inf_scef_reference_id;
670 | static int hf_gtpv2_mon_event_inf_scef_reference_id_ext;
671 | static int hf_gtpv2_mon_event_inf_scef_id_length;
672 | static int hf_gtpv2_mon_event_inf_scef_id;
673 | static int hf_gtpv2_mon_event_inf_remaining_number_of_reports;
674 | static int hf_gtpv2_mon_event_ext_inf_lrtp;
675 | static int hf_gtpv2_mon_event_ext_inf_srie;
676 | static int hf_gtpv2_mon_event_ext_inf_scef_reference_id;
677 | static int hf_gtpv2_mon_event_ext_inf_scef_id_length;
678 | static int hf_gtpv2_mon_event_ext_inf_scef_id;
679 | static int hf_gtpv2_mon_event_ext_inf_remain_min_period_loc_report_type;
680 | static int hf_gtpv2_mon_event_ext_inf_scef_reference_id_ext;
681 | static int hf_gtpv2_rohc_profiles_bit0;
682 | static int hf_gtpv2_rohc_profiles_bit1;
683 | static int hf_gtpv2_rohc_profiles_bit2;
684 | static int hf_gtpv2_rohc_profiles_bit3;
685 | static int hf_gtpv2_rohc_profiles_bit4;
686 | static int hf_gtpv2_rohc_profiles_bit5;
687 | static int hf_gtpv2_rohc_profiles_bit6;
688 | static int hf_gtpv2_rohc_profiles_bit7;
689 | static int hf_gtpv2_max_cid;
690 | static int hf_gtpv2_uplink_rate_limit;
691 | static int hf_gtpv2_downlink_rate_limit;
692 | static int hf_gtpv2_timestamp_value;
693 | static int hf_gtpv2_counter_value;
694 | static int hf_gtpv2_mapped_ue_usage_type;
695 | static int hf_gtpv2_uli_flags;
696 | static int hf_gtpv2_rohc_profile_flags;
697 | static int hf_gtpv2_dcnr;
698 |
699 | static int hf_gtpv2_secondary_rat_usage_data_report;
700 | static int hf_gtpv2_secondary_rat_usage_data_report_spare_bits;
701 | static int hf_gtpv2_secondary_rat_usage_data_report_bit3;
702 | static int hf_gtpv2_secondary_rat_usage_data_report_bit2;
703 | static int hf_gtpv2_secondary_rat_usage_data_report_bit1;
704 | static int hf_gtpv2_secondary_rat_usage_data_report_rat_type;
705 | static int hf_gtpv2_secondary_rat_usage_data_report_start_timestamp;
706 | static int hf_gtpv2_secondary_rat_usage_data_report_end_timestamp;
707 | static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_dl;
708 | static int hf_gtpv2_secondary_rat_usage_data_report_usage_data_ul;
709 | static int hf_gtpv2_secondary_rat_usage_data_report_srudn_length;
710 | static int hf_gtpv2_secondary_rat_usage_data_report_srudn_value;
711 | static int hf_gtpv2_csg_info_rep_action_b0;
712 | static int hf_gtpv2_csg_info_rep_action_b1;
713 | static int hf_gtpv2_csg_info_rep_action_b2;
714 | static int hf_gtpv2_gnodeb_id_len;
715 | static int hf_gtpv2_gnodeb_id;
716 | static int hf_gtpv2_macro_ng_enodeb_id;
717 | static int hf_gtpv2_5gs_tac;
718 | static int hf_gtpv2_en_gnb_id_len;
719 | static int hf_gtpv2_5tac;
720 | static int hf_gtpv2_etac;
721 | static int hf_gtpv2_en_gnb_id;
722 | static int hf_gtpv2_trig_event_len;
723 | static int hf_gtpv2_ne_list_len;
724 | static int hf_gtpv2_ses_trs_depth;
725 | static int hf_gtpv2_list_of_if_len;
726 | static int hf_gtpv2_trs_coll_ip_addr_len;
727 | static int hf_gtpv2_trs_coll_ipv4_addr;
728 | static int hf_gtpv2_trs_coll_ipv6_addr;
729 |
730 | static int hf_gtpv2_ext_tra_info_loi_mscs_cap;
731 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_f;
732 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_e;
733 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_b;
734 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_g;
735 | static int hf_gtpv2_ext_tra_info_loi_mscs_mc;
736 | static int hf_gtpv2_ext_tra_info_loi_mscs_iu;
737 | static int hf_gtpv2_ext_tra_info_loi_mscs_a;
738 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_c;
739 | static int hf_gtpv2_ext_tra_info_loi_mscs_map_d;
740 | static int hf_gtpv2_ext_tra_info_loi_mgw_iuup;
741 | static int hf_gtpv2_ext_tra_info_loi_mgw_nbup;
742 | static int hf_gtpv2_ext_tra_info_loi_mgw_mc;
743 | static int hf_gtpv2_ext_tra_info_loi_sgsn_ge;
744 | static int hf_gtpv2_ext_tra_info_loi_sgsn_gs;
745 | static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gf;
746 | static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gd;
747 | static int hf_gtpv2_ext_tra_info_loi_sgsn_map_gr;
748 | static int hf_gtpv2_ext_tra_info_loi_sgsn_gn;
749 | static int hf_gtpv2_ext_tra_info_loi_sgsn_iu;
750 | static int hf_gtpv2_ext_tra_info_loi_sgsn_gb;
751 | static int hf_gtpv2_ext_tra_info_loi_sgsn_s13;
752 | static int hf_gtpv2_ext_tra_info_loi_sgsn_s3;
753 | static int hf_gtpv2_ext_tra_info_loi_sgsn_s4;
754 | static int hf_gtpv2_ext_tra_info_loi_sgsn_s6d;
755 | static int hf_gtpv2_ext_tra_info_loi_ggsn_gmb;
756 | static int hf_gtpv2_ext_tra_info_loi_ggsn_gi;
757 | static int hf_gtpv2_ext_tra_info_loi_ggsn_gn;
758 | static int hf_gtpv2_ext_tra_info_loi_rnc_uu;
759 | static int hf_gtpv2_ext_tra_info_loi_rnc_iub;
760 | static int hf_gtpv2_ext_tra_info_loi_rnc_iur;
761 | static int hf_gtpv2_ext_tra_info_loi_rnc_iu;
762 | static int hf_gtpv2_ext_tra_info_loi_bm_sc_gmb;
763 | static int hf_gtpv2_ext_tra_info_loi_mme_s13;
764 | static int hf_gtpv2_ext_tra_info_loi_mme_s11;
765 | static int hf_gtpv2_ext_tra_info_loi_mme_s10;
766 | static int hf_gtpv2_ext_tra_info_loi_mme_s6a;
767 | static int hf_gtpv2_ext_tra_info_loi_mme_s3;
768 | static int hf_gtpv2_ext_tra_info_loi_mme_s1_mme;
769 | static int hf_gtpv2_ext_tra_info_loi_sgw_gxc;
770 | static int hf_gtpv2_ext_tra_info_loi_sgw_s11;
771 | static int hf_gtpv2_ext_tra_info_loi_sgw_s8b;
772 | static int hf_gtpv2_ext_tra_info_loi_sgw_s5;
773 | static int hf_gtpv2_ext_tra_info_loi_sgw_s4;
774 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_sgi;
775 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s8b;
776 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_gx;
777 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s6b;
778 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s5;
779 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2c;
780 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2b;
781 | static int hf_gtpv2_ext_tra_info_loi_pdn_gw_s2a;
782 | static int hf_gtpv2_ext_tra_info_loi_enb_uu;
783 | static int hf_gtpv2_ext_tra_info_loi_enb_x2;
784 | static int hf_gtpv2_ext_tra_info_loi_enb_s1_mme;
785 | static int hf_gtpv2_ext_tra_info_loi_hss_sh;
786 | static int hf_gtpv2_ext_tra_info_loi_hss_s6a;
787 | static int hf_gtpv2_ext_tra_info_loi_hss_s6d;
788 | static int hf_gtpv2_ext_tra_info_loi_hss_cx;
789 | static int hf_gtpv2_ext_tra_info_loi_hss_map_gr;
790 | static int hf_gtpv2_ext_tra_info_loi_hss_map_gc;
791 | static int hf_gtpv2_ext_tra_info_loi_hss_map_d;
792 | static int hf_gtpv2_ext_tra_info_loi_hss_map_c;
793 | static int hf_gtpv2_ext_tra_info_loi_eir_map_gf;
794 | static int hf_gtpv2_ext_tra_info_loi_eir_s13p;
795 | static int hf_gtpv2_ext_tra_info_loi_eir_s13;
796 | static int hf_gtpv2_ext_tra_info_loi_eir_map_f;
797 | static int hf_gtpv2_ext_tra_info_loi_amf_n20;
798 | static int hf_gtpv2_ext_tra_info_loi_amf_n15;
799 | static int hf_gtpv2_ext_tra_info_loi_amf_n14;
800 | static int hf_gtpv2_ext_tra_info_loi_amf_n12;
801 | static int hf_gtpv2_ext_tra_info_loi_amf_n11;
802 | static int hf_gtpv2_ext_tra_info_loi_amf_n8;
803 | static int hf_gtpv2_ext_tra_info_loi_amf_n2;
804 | static int hf_gtpv2_ext_tra_info_loi_amf_n1;
805 | static int hf_gtpv2_ext_tra_info_loi_amf_n22;
806 | static int hf_gtpv2_ext_tra_info_loi_amf_n26;
807 | static int hf_gtpv2_ext_tra_info_loi_pcf_n15;
808 | static int hf_gtpv2_ext_tra_info_loi_pcf_n7;
809 | static int hf_gtpv2_ext_tra_info_loi_pcf_n5;
810 | static int hf_gtpv2_ext_tra_info_loi_smf_s5_c;
811 | static int hf_gtpv2_ext_tra_info_loi_smf_n11;
812 | static int hf_gtpv2_ext_tra_info_loi_smf_n10;
813 | static int hf_gtpv2_ext_tra_info_loi_smf_n7;
814 | static int hf_gtpv2_ext_tra_info_loi_smf_n4;
815 | static int hf_gtpv2_ext_tra_info_loi_upf_n4;
816 | static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_e1_c;
817 | static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_f1_c;
818 | static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_Uu;
819 | static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_xn_c;
820 | static int hf_gtpv2_ext_tra_info_loi_ng_ran_node_ng_c;
821 |
822 | static int hf_gtpv2_nr_dl_pkts_all;
823 | static int hf_gtpv2_nr_ul_pkts_all;
824 | static int hf_gtpv2_nr_add_exception_rpts;
825 | static int hf_apn_rte_cntrl_status_val_time;
826 | static int hf_gtpv2_max_pkt_loss_rte_ul_flg;
827 | static int hf_gtpv2_max_pkt_loss_rte_dl_flg;
828 | static int hf_gtpv2_max_pkt_loss_rte_ul;
829 | static int hf_gtpv2_max_pkt_loss_rte_dl;
830 |
831 | static int hf_gtpv2_mm_context_iov_updates_counter;
832 | static int hf_gtpv2_mm_context_ear_len;
833 | static int hf_gtpv2_node_number_len;
834 | static int hf_gtpv2_additional_rrm_policy_index;
835 |
836 | static int hf_gtpv2_group_id;
837 |
838 | static int hf_gtpv2_ie_pscell_id_spare;
839 | static int hf_gtpv2_ie_pscell_id_nr_cgi;
840 | static int hf_gtpv2_ie_up_security_policy_up_ip_policy;
841 | static int hf_gtpv2_ie_up_security_policy_spare;
842 | static int hf_gtpv2_nf_instance_id_nf_instance_id;
843 | static int hf_gtpv2_nf_timer_in_seconds_timer_value;
844 |
845 |
846 | static int ett_gtpv2;
847 | static int ett_gtpv2_flags;
848 | static int ett_gtpv2_uli_flags;
849 | static int ett_gtpv2_uli_field;
850 | static int ett_gtpv2_bearer_ctx;
851 | static int ett_gtpv2_PDN_conn;
852 | static int ett_gtpv2_overload_control_information;
853 | static int ett_gtpv2_mm_context_flag;
854 | static int ett_gtpv2_pdn_numbers_nsapi;
855 | static int ett_gtpv2_tra_info_trigg;
856 | static int ett_gtpv2_tra_info_trigg_msc_server;
857 | static int ett_gtpv2_tra_info_trigg_mgw;
858 | static int ett_gtpv2_tra_info_trigg_sgsn;
859 | static int ett_gtpv2_tra_info_trigg_ggsn;
860 | static int ett_gtpv2_tra_info_trigg_bm_sc;
861 | static int ett_gtpv2_tra_info_trigg_sgw_mme;
862 | static int ett_gtpv2_tra_info_trigg_sgw;
863 | static int ett_gtpv2_tra_info_trigg_pgw;
864 | static int ett_gtpv2_tra_info_interfaces;
865 | static int ett_gtpv2_tra_info_interfaces_imsc_server;
866 | static int ett_gtpv2_tra_info_interfaces_lmgw;
867 | static int ett_gtpv2_tra_info_interfaces_lsgsn;
868 | static int ett_gtpv2_tra_info_interfaces_lggsn;
869 | static int ett_gtpv2_tra_info_interfaces_lrnc;
870 | static int ett_gtpv2_tra_info_interfaces_lbm_sc;
871 | static int ett_gtpv2_tra_info_interfaces_lmme;
872 | static int ett_gtpv2_tra_info_interfaces_lsgw;
873 | static int ett_gtpv2_tra_info_interfaces_lpdn_gw;
874 | static int ett_gtpv2_tra_info_interfaces_lpdn_lenb;
875 | static int ett_gtpv2_tra_info_ne_types;
876 | static int ett_gtpv2_rai;
877 | static int ett_gtpv2_ms_mark;
878 | static int ett_gtpv2_stn_sr;
879 | static int ett_gtpv2_supp_codec_list;
880 | static int ett_gtpv2_bss_con;
881 | static int ett_gtpv2_utran_con;
882 | static int ett_gtpv2_eutran_con;
883 | static int ett_gtpv2_son_con;
884 | static int ett_gtpv2_endc_son_con;
885 | static int ett_gtpv2_intersys_son_con;
886 | static int ett_gtpv2_mm_context_auth_qua;
887 | static int ett_gtpv2_mm_context_auth_qui;
888 | static int ett_gtpv2_mm_context_auth_tri;
889 | static int ett_gtpv2_mm_context_net_cap;
890 | static int ett_gtpv2_ms_network_capability;
891 | static int ett_gtpv2_mm_context_sc;
892 | static int ett_gtpv2_vd_pref;
893 | static int ett_gtpv2_access_rest_data;
894 | static int ett_gtpv2_qua;
895 | static int ett_gtpv2_qui;
896 | static int ett_gtpv2_preaa_tais;
897 | static int ett_gtpv2_preaa_menbs;
898 | static int ett_gtpv2_preaa_henbs;
899 | static int ett_gtpv2_preaa_ecgis;
900 | static int ett_gtpv2_preaa_rais;
901 | static int ett_gtpv2_preaa_sais;
902 | static int ett_gtpv2_preaa_cgis;
903 | static int ett_gtpv2_load_control_inf;
904 | static int ett_gtpv2_eci;
905 | static int ett_gtpv2_twan_flags;
906 | static int ett_gtpv2_ciot_support_ind;
907 | static int ett_gtpv2_rohc_profile_flags;
908 | static int ett_gtpv2_secondary_rat_usage_data_report;
909 | static int ett_gtpv2_pres_rep_area_info;
910 | static int ett_gtpv2_preaa_ext_menbs;
911 | static int ett_gtpv2_ue_nr_sec_cap_len;
912 | static int ett_gtpv2_apn_rte_ctrl_sts_len;
913 | static int ett_gtpv2_if_mgcs;
914 | static int ett_gtpv2_if_mgw;
915 | static int ett_gtpv2_if_sgsn;
916 | static int ett_gtpv2_if_ggsn;
917 | static int ett_gtpv2_if_rnc;
918 | static int ett_gtpv2_if_bm_sc;
919 | static int ett_gtpv2_if_mme;
920 | static int ett_gtpv2_if_sgw;
921 | static int ett_gtpv2_if_pdn_gw;
922 | static int ett_gtpv2_if_enb;
923 | static int ett_gtpv2_if_hss;
924 | static int ett_gtpv2_if_eir;
925 | static int ett_gtpv2_if_amf;
926 | static int ett_gtpv2_if_pcf;
927 | static int ett_gtpv2_if_smf;
928 | static int ett_gtpv2_if_upf;
929 | static int ett_gtpv2_if_ng_ran_node;
930 | static int ett_gtpv2_PGW_change_info;
931 |
932 |
933 | static expert_field ei_gtpv2_ie_data_not_dissected;
934 | static expert_field ei_gtpv2_ie_len_invalid;
935 | static expert_field ei_gtpv2_source_type_unknown;
936 | static expert_field ei_gtpv2_fq_csid_type_bad;
937 | static expert_field ei_gtpv2_mbms_session_duration_days;
938 | static expert_field ei_gtpv2_mbms_session_duration_secs;
939 | static expert_field ei_gtpv2_ie;
940 | static expert_field ei_gtpv2_int_size_not_handled;
941 | static expert_field ei_gtpv2_apn_too_long;
942 |
943 | static 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 */
1005 | static 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 | };
1140 | static 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
1143 | static 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 | /*
1284 | 190 ECGI List
1285 | 191 Remote UE Context
1286 | 192 Remote User ID
1287 | 193 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 | /*
1318 | 220 to 253 Spare. For future use.
1319 | 254 Special IE type for IE Type Extension
1320 | 255 Private Extension
1321 | 256 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
1339 | static int pref_decode_srvcc_p2c_trans_cont = PREF_DECODE_SRVCC_P2C_TRANS_CONT_NO0;
1340 |
1341 | static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1342 |
1343 | /* Table 8.1-1: Information Element types for GTPv2 */
1344 | static 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 | };
1521 | static 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 |
1523 | typedef 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,
1531 | to keep track of request/response-pairs
1532 | */
1533 | typedef 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*/
1539 | typedef 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 |
1549 | static unsigned
1550 | gtpv2_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 |
1557 | static int
1558 | gtpv2_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 |
1583 | static int
1584 | gtpv2_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 |
1601 | static GHashTable *gtpv2_stat_msg_idx_hash;
1602 |
1603 | static void
1604 | gtpv2_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 |
1614 | static tap_packet_status
1615 | gtpv2_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 ???*/
1656 | static void
1657 | value_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 */
1663 | typedef 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 */
1672 | static 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 |
1972 | static void
1973 | dissect_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 |
1987 | static void
1988 | dissect_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 | int 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 */
2010 | static 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 | };
2152 | value_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) */
2155 | static const true_false_string gtpv2_cause_cs = {
2156 | "Originated by remote node",
2157 | "Originated by node sending the message",
2158 | };
2159 |
2160 | static void
2161 | dissect_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 | int 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 | */
2221 | static void
2222 | dissect_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 | int 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 */
2237 | static void
2238 | dissect_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 | int 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 |
2260 | static void
2261 | dissect_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 | int 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 */
2292 | static void
2293 | dissect_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 | int 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 */
2339 | static void
2340 | dissect_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 | int 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 */
2390 | static void
2391 | dissect_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 | int 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 */
2448 | static 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 | };
2463 | static 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 |
2465 | static void
2466 | dissect_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 | int 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 | */
2481 | static void
2482 | dissect_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 | int 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 | */
2542 | static void
2543 | dissect_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 | int 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) */
2583 | static void
2584 | dissect_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 | int 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 */
2597 | static void
2598 | dissect_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 | int 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 |
2616 | static void
2617 | dissect_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 | int 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 */
2642 | static void
2643 | dissect_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 | int 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 | */
2678 | void
2679 | dissect_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 |
2694 | void
2695 | dissect_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 | int 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 | */
2707 | static void
2708 | dissect_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 | int 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 | */
2725 | static void
2726 | dissect_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 |
2752 | void
2753 | dissect_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 | */
2772 | static void
2773 | dissect_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 | */
2797 | void
2798 | dissect_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 | int 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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "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 | */
3012 | static void
3013 | dissect_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 |
3044 | static 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 | };
3052 | value_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 |
3054 | void
3055 | dissect_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 | int 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 |
3132 | void
3133 | dissect_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 | int 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 |
3159 | static void
3160 | dissect_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 | int 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 | */
3177 | static 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 | };
3203 | value_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 |
3206 | static void
3207 | dissect_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 | */
3220 | static void
3221 | dissect_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 |
3233 | static void
3234 | dissect_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 | */
3246 | static void
3247 | dissect_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 | */
3268 | char*
3269 | dissect_gtpv2_tai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3297 | static char*
3298 | dissect_gtpv2_ecgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3337 | static char*
3338 | dissect_gtpv2_rai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3364 | static char*
3365 | dissect_gtpv2_sai_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3387 | static char*
3388 | dissect_gtpv2_cgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3410 | static char*
3411 | dissect_gtpv2_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3432 | static const true_false_string gtpv2_smenb = {
3433 | "Short Macro eNodeB ID",
3434 | "Long Macro eNodeB ID",
3435 | };
3436 |
3437 | static char*
3438 | dissect_gtpv2_ext_macro_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
3460 | static char*
3461 | decode_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 | int 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 |
3582 | void
3583 | dissect_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 | int 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 | */
3613 | static 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 |
3633 | static int
3634 | dissect_3gpp_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, char **avp_str)
3635 | {
3636 | int 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 |
3747 | static const
3748 | char *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 |
3757 | int
3758 | dissect_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 | */
3772 | static 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 | };
3819 | static 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 |
3821 | static const true_false_string gtpv2_f_teid_v4_vals = {
3822 | "IPv4 address present",
3823 | "IPv4 address not present",
3824 | };
3825 |
3826 | static const true_false_string gtpv2_f_teid_v6_vals = {
3827 | "IPv6 address present",
3828 | "IPv6 address not present",
3829 | };
3830 |
3831 | static void
3832 | dissect_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 | int 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 | */
3895 | static void
3896 | dissect_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 |
3914 | static void
3915 | dissect_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 | int 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 | */
3928 | static void
3929 | dissect_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 | int 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 | */
3984 | static void
3985 | dissect_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 | int 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 |
4027 | static void
4028 | dissect_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 | int 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 |
4039 | static void
4040 | dissect_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 | int 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 */
4054 | static void
4055 | dissect_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 | int 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 | */
4069 | static void
4070 | dissect_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 | int 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 | */
4086 | static void
4087 | dissect_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 | int 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 | */
4100 | void
4101 | dissect_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 | int 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 */
4124 | static 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 |
4136 | static 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 |
4147 | static void
4148 | dissect_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 | int 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) */
4464 | static void
4465 | dissect_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 | */
4472 | static void
4473 | dissect_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 | int 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 | */
4486 | static void
4487 | dissect_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 | */
4495 | static 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 |
4505 | static 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 |
4512 | static 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 */
4525 | static 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 */
4538 | static 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 */
4551 | static 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 */
4561 | static int
4562 | dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, int 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 |
4588 | static int
4589 | dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int 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 |
4628 | static int
4629 | dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, int 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 |
4661 | static 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 |
4667 | static int
4668 | dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int 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 |
4740 | static int
4741 | dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, int 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 | */
4763 | static void
4764 | dissect_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 | int 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(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "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 | */
4825 | static void
4826 | dissect_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 | int 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 < (int)length) {
4889 | offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4890 | } else {
4891 | return;
4892 | }
4893 | if (offset == (int)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 == (int)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(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "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 | */
4928 | static void
4929 | dissect_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 | int 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 < (int)length) {
4988 | offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
4989 | } else {
4990 | return;
4991 | }
4992 | if (offset == (int)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 < (int)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(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "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 | */
5027 | static void
5028 | dissect_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 | int 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 < (int)length) {
5092 | offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5093 | } else {
5094 | return;
5095 | }
5096 | if (offset == (int)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 < (int)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 < (int)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 < (int)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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5144 | offset += ear_len - 1;
5145 | }
5146 | } else {
5147 | return;
5148 | }
5149 |
5150 | if (offset == (int)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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "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 | */
5162 | static void
5163 | dissect_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 | int 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 < (int)length) {
5274 | offset = dissect_gtpv2_access_restriction_data(tvb, tree, offset);
5275 | } else {
5276 | return;
5277 | }
5278 |
5279 | if (offset == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 == (int)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 < (int)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 | */
5469 | static void
5470 | dissect_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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
5559 | }
5560 |
5561 | }
5562 |
5563 | /*
5564 | * 8.39 PDN Connection (grouped IE)
5565 | */
5566 | static void
5567 | dissect_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 | int 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 | */
5582 | static void
5583 | dissect_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 | int 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 | */
5613 | static void
5614 | dissect_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 | int 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 | */
5629 | static void
5630 | dissect_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 | int 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 | */
5643 | static void
5644 | dissect_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 | int 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 |
5659 | static 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 | };
5666 | static void
5667 | dissect_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 | int 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 | */
5684 | static void
5685 | dissect_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 | */
5702 | static 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 | };
5707 | static void
5708 | dissect_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 | */
5728 | static void
5729 | dissect_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 | int 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 |
5751 | static 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 |
5762 | static void
5763 | dissect_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 | int 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 |
5921 | static 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 | };
5940 | static 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 |
5942 | static void
5943 | dissect_gtpv2_s1ap_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int 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 | }
5974 | static void
5975 | dissect_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 | int 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 | */
6056 | static void
6057 | dissect_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 |
6069 | static 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 | };
6081 | static 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 |
6083 | static char*
6084 | dissect_gtpv2_home_enodeb_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *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 |
6110 | static char*
6111 | dissect_gtpv2_gnodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int* 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 |
6137 | static char*
6138 | dissect_gtpv2_macro_ng_enodeb_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int* 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 |
6157 | static void
6158 | dissect_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 | int 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 | */
6290 | static void
6291 | dissect_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 | int 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 | */
6307 | static void
6308 | dissect_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 | */
6337 | static void
6338 | dissect_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 | */
6346 | static void
6347 | dissect_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 */
6357 | static 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 | };
6365 | static 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 |
6367 | static void
6368 | dissect_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 | int 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 | */
6388 | static 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 |
6396 | void
6397 | dissect_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 | int 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
6412 | static 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
6419 | static void
6420 | dissect_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 | int 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 | */
6459 | static 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 |
6466 | static 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 |
6473 | static void
6474 | dissect_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 | */
6487 | static 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 |
6498 | static void
6499 | dissect_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
6513 | static 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 |
6521 | void
6522 | dissect_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 | int 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 | */
6579 | static void
6580 | dissect_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 | */
6594 | static void
6595 | dissect_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 | */
6604 | static const value_string gtpv2_node_type_vals[] = {
6605 | {0, "MME"},
6606 | {1, "SGSN"},
6607 | {0, NULL((void*)0)}
6608 | };
6609 |
6610 | static void
6611 | dissect_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 | */
6625 | static int
6626 | decode_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int 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 |
6655 | static void
6656 | dissect_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 | int offset = 0;
6659 | decode_gtpv2_fqdn(tvb, pinfo, tree, item, offset, length);
6660 | }
6661 |
6662 | /*
6663 | * 8.67 Private Extension
6664 | */
6665 | static void
6666 | dissect_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 | */
6694 | static void
6695 | dissect_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 | */
6705 | void
6706 | dissect_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 | */
6756 | void
6757 | dissect_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 | int 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 | */
6789 | static void
6790 | dissect_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 | int 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 | */
6804 | static void
6805 | dissect_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 | int 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 | */
6820 | static const value_string gtpv2_mbms_hc_indicator_vals[] = {
6821 | {0, "Uncompressed header"},
6822 | {1, "Compressed header"},
6823 | {0, NULL((void*)0)}
6824 | };
6825 |
6826 | static void
6827 | dissect_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 | int 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 | */
6875 | static 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 |
6883 | static void
6884 | dissect_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 | int 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 | */
6898 | static const value_string gtpv2_uci_csg_membership_status[] = {
6899 | {0, "Non CSG membership"},
6900 | {1, "CSG membership"},
6901 | {0, NULL((void*)0) }
6902 | };
6903 |
6904 | static 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 |
6912 | static 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 |
6918 | static void
6919 | dissect_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 | int 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 */
6943 | static void
6944 | dissect_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 | int 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 */
6965 | static void
6966 | dissect_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 | int 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 */
6978 | static void
6979 | dissect_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) */
6989 | static void
6990 | dissect_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 */
7000 | static const value_string gtpv2_service_indicator_vals[] = {
7001 | { 1, "CS call indicator" },
7002 | { 2, "SMS indicator" },
7003 | { 0, NULL((void*)0) }
7004 | };
7005 |
7006 | static void
7007 | dissect_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 */
7013 | static const value_string gtpv2_detach_type_vals[] = {
7014 | { 1, "PS Detach" },
7015 | { 2, "Combined PS/CS Detach" },
7016 | { 0, NULL((void*)0) }
7017 | };
7018 |
7019 | static void
7020 | dissect_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) */
7026 | static void
7027 | dissect_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 */
7033 | static void
7034 | dissect_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 | int 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 | */
7058 | void
7059 | dissect_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 |
7075 | static 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 */
7086 | static void
7087 | dissect_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 | int 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) */
7109 | void
7110 | dissect_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 | int 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 */
7124 | static 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 |
7136 | void
7137 | dissect_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 */
7151 | static void
7152 | dissect_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) */
7158 | static void
7159 | dissect_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 | */
7182 | static void
7183 | dissect_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 | int 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 */
7236 | static void
7237 | dissect_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 | int 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) */
7250 | static void
7251 | dissect_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 */
7271 | static void
7272 | dissect_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) */
7278 | static void
7279 | dissect_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 */
7307 | static void
7308 | dissect_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 */
7322 | static 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 |
7327 | static void
7328 | dissect_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 | int 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) */
7340 | static void
7341 | dissect_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 | int 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 */
7355 | static void
7356 | dissect_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 | int 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 */
7369 | static 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 | };
7380 | static 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 |
7382 | static void
7383 | dissect_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 | int 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 | */
7397 | static 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 |
7403 | void
7404 | dissect_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 | int 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 < (int)length) {
7512 | proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
7513 | }
7514 |
7515 | }
7516 | /*
7517 | * 8.101 ULI Timestamp
7518 | */
7519 | static void
7520 | dissect_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 | */
7535 | static void
7536 | dissect_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 | */
7543 | static 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 |
7552 | static void
7553 | dissect_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 | int 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 | */
7592 | static void
7593 | dissect_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 | */
7600 | static void
7601 | dissect_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 | */
7608 | static void
7609 | dissect_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 | int 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 | */
7629 | static void
7630 | dissect_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 |
7702 | static int
7703 | dissect_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 | int 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 >= (int) 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 |
7835 | static 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 |
7842 | static void
7843 | dissect_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 | int 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 | */
7875 | static void
7876 | dissect_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 | int 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 | */
7934 | static void
7935 | dissect_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 | */
7951 | static void
7952 |
7953 | dissect_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 | int 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 | */
7969 | static void
7970 | dissect_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 | int 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 | */
7985 | static void
7986 | dissect_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 | */
8001 | static void
8002 | dissect_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 | */
8011 | static void
8012 | dissect_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 | */
8037 | static void
8038 | dissect_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 | int 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 | */
8067 | static void
8068 | dissect_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 | int 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 |
8124 | static void
8125 | dissect_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 | int 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 | */
8147 | static void
8148 | dissect_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 | int 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 | */
8190 | static void
8191 | dissect_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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8209 | }
8210 | }
8211 |
8212 | /*
8213 | * 8.126 SCEF PDN Connection
8214 | */
8215 | static void
8216 | dissect_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 | int 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 | */
8234 | static void
8235 | dissect_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 | int 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 | */
8266 | static void
8267 | dissect_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 | int 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 | */
8278 | static void
8279 | dissect_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 | int 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 |
8297 | static void
8298 | dissect_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 | int 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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8306 | }
8307 | }
8308 |
8309 | /*
8310 | * 8.132 Secondary RAT Usage Data Report
8311 | */
8312 | static const value_string gtpv2_secondary_rat_type_vals[] = {
8313 | { 0, "NR" },
8314 | { 1, "Unlicensed Spectrum"},
8315 | { 0, NULL((void*)0) }
8316 | };
8317 |
8318 | static void
8319 | dissect_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 | int 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(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet");
8393 | }
8394 | }
8395 |
8396 |
8397 |
8398 | /*
8399 | * 8.133 UP Function Selection Indication Flags
8400 | */
8401 |
8402 | static void
8403 | dissect_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 | int 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 */
8413 | static void
8414 | dissect_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 | int 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 */
8444 | static void
8445 | dissect_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 | int 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 |
8464 | static 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 |
8476 | static 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 |
8482 | static 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 |
8489 | static 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 |
8501 | static 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 |
8509 | static 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 |
8516 | static 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 |
8524 | static 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 |
8529 | static 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 |
8539 | static 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 |
8548 | static 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 |
8560 | static 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 |
8567 | static 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 |
8579 | static 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 |
8587 | static 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 |
8599 | static 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 |
8605 | static 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 |
8612 | static 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 |
8621 | static 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 |
8626 | static 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 */
8636 | static void
8637 | dissect_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 | int 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 */
8797 | static void
8798 | dissect_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 | int 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 */
8835 | static void
8836 | dissect_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 */
8846 | static void
8847 | dissect_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 */
8853 | static void
8854 | dissect_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 */
8860 | static void
8861 | dissect_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 */
8867 | static void
8868 | dissect_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 */
8874 | static void
8875 | dissect_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 */
8881 | static void
8882 | dissect_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 */
8888 | static void
8889 | dissect_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 | int 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 */
8903 | static void
8904 | dissect_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 | int 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 */
8915 | static void
8916 | dissect_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 */
8922 | static void
8923 | dissect_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 | int 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 */
8935 | static 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 |
8943 | static void
8944 | dissect_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 */
8954 | static void
8955 | dissect_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 */
8965 | static void
8966 | dissect_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 */
8980 | static void
8981 | dissect_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 |
8991 | typedef 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 |
8996 | static 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 |
9171 | static gtpv2_msg_hash_t *
9172 | gtpv2_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 |
9371 | static void
9372 | track_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 |
9498 | void
9499 | dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int offset, uint8_t message_type, session_args_t * args, uint8_t parent_ie)
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 | int 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 |
9603 | static int
9604 | // NOLINTNEXTLINE(misc-no-recursion)
9605 | dissect_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 | int 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 |
9804 | void 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 |
13325 | void
13326 | proto_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 | */