epan/dissectors/pidl/ C99 drsuapi
[wireshark-sm.git] / epan / dissectors / packet-h248_3gpp.c
blob08b45b44558adb6b996940753065a4c919745b92
1 /*
2 * packet-h248_3gpp.c
3 * 3GPP H.248 Packages
5 * (c) 2006, Luis E. Garcia Ontanon <luis@ontanon.org>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
14 #include "config.h"
16 #include <epan/packet.h>
17 #include <epan/asn1.h>
19 #include "packet-ber.h"
20 #include "packet-isup.h"
21 #include "packet-h248.h"
23 void proto_register_h248_3gpp(void);
25 #define PNAME "H.248 3GPP"
26 #define PSNAME "H2483GPP"
27 #define PFNAME "h248.3gpp"
29 #include "packet-gsm_a_common.h"
32 * 3GUP Package
33 * 3GPP TS 29.232 -- 15.1.1
35 static int proto_h248_package_3GUP;
37 static int hf_h248_package_3GUP_Mode;
38 static int hf_h248_package_3GUP_UPversions;
39 static int hf_h248_package_3GUP_delerrsdu;
40 static int hf_h248_package_3GUP_interface;
41 static int hf_h248_package_3GUP_initdir;
43 static int ett_h248_package_3GUP;
45 static bool implicit;
47 static const value_string h248_3GUP_properties_vals[] = {
48 { 0x0000, "threegup (3G User Plane)" },
49 { 0x0001, "Mode" },
50 { 0x0002, "Versions" },
51 { 0x0003, "delerrsdu" },
52 { 0x0004, "interface" },
53 { 0x0005, "initdir" },
54 {0, NULL}
57 static const value_string h248_3GUP_Mode_vals[] = {
58 { 0x00000001, "Transparent mode" },
59 { 0x00000002, "Support mode for predefined SDU sizes" },
60 {0, NULL}
63 static const value_string h248_3GUP_upversions_vals[] = {
64 { 0x01, "Version 1" },
65 { 0x02, "Version 2" },
66 { 0x03, "Version 3" },
67 { 0x04, "Version 4" },
68 { 0x05, "Version 5" },
69 { 0x06, "Version 6" },
70 { 0x07, "Version 7" },
71 { 0x08, "Version 8" },
72 { 0x09, "Version 9" },
73 { 0x0A, "Version 10" },
74 { 0x0B, "Version 11" },
75 { 0x0C, "Version 12" },
76 { 0x0D, "Version 13" },
77 { 0x0E, "Version 14" },
78 { 0x0F, "Version 15" },
79 { 0x10, "Version 16" },
80 {0, NULL}
83 static const value_string h248_3GUP_delerrsdu_vals[] = {
84 { 0x0001, "Yes" },
85 { 0x0002, "No" },
86 { 0x0003, "Not Applicable" },
87 {0, NULL}
90 static const value_string h248_3GUP_interface_vals[] = {
91 { 0x0001, "RAN (Iu interface)" },
92 { 0x0002, "CN (Nb interface)" },
93 {0, NULL}
96 static const value_string h248_3GUP_initdir_vals[] = {
97 { 0x0001, "Incoming" },
98 { 0x0002, "Outgoing" },
99 {0, NULL}
102 static const value_string h248_3GUP_parameters[] _U_ = {
103 { 0x0001, "Mode" },
104 { 0x0002, "UPversions" },
105 { 0x0003, "Delivery of erroneous SDUs" },
106 { 0x0004, "Interface" },
107 { 0x0005, "Initialisation Direction" },
108 {0, NULL}
111 static const h248_pkg_param_t h248_package_3GUP_properties[] = {
112 { 0x0001, &hf_h248_package_3GUP_Mode, h248_param_ber_integer, &implicit },
113 { 0x0002, &hf_h248_package_3GUP_UPversions, h248_param_ber_integer, &implicit },
114 { 0x0003, &hf_h248_package_3GUP_delerrsdu, h248_param_ber_integer, &implicit },
115 { 0x0004, &hf_h248_package_3GUP_interface, h248_param_ber_integer, &implicit },
116 { 0x0005, &hf_h248_package_3GUP_initdir, h248_param_ber_integer, &implicit },
117 { 0x0000, NULL, NULL, NULL }
120 static h248_package_t h248_package_3GUP = {
121 0x002f,
122 &proto_h248_package_3GUP,
123 &ett_h248_package_3GUP,
124 h248_3GUP_properties_vals,
125 NULL,
126 NULL,
127 NULL,
128 h248_package_3GUP_properties,
129 NULL,
130 NULL,
131 NULL
136 * Circuit Switched Data package
137 * 3GPP TS 29.232 -- 15.2.1
140 static int hf_h248_package_3GCSD;
142 static int hf_h248_package_3GCSD_plmnbc;
143 static int hf_h248_package_3GCSD_gsmchancod;
144 static int hf_h248_pkg_3GCSD_evt_protres;
145 static int hf_h248_pkg_3GCSD_evt_protres_result;
146 static int hf_h248_pkg_3GCSD_evt_protres_cause;
147 static int hf_h248_pkg_3GCSD_evt_ratechg;
148 static int hf_h248_pkg_3GCSD_evt_ratechg_rate;
149 static int hf_h248_pkg_3GCSD_sig_actprot;
150 static int hf_h248_pkg_3GCSD_actprot_sig_localpeer;
152 static int ett_h248_package_3GCSD;
153 static int ett_h248_3GCSD_evt_protres;
154 static int ett_h248_3GCSD_evt_ratechg;
155 static int ett_pkg_3GCSD_sig_actprot;
157 static void dissect_3gcsd_plmnbc(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* cu _U_, void* implicit_param) {
158 asn1_ctx_t asn1_ctx;
160 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
161 dissect_ber_octet_string(implicit_param ? *((bool*)implicit_param) : false, &asn1_ctx, tree, tvb, 0, hfid, NULL);
162 de_bearer_cap(tvb, tree, pinfo, 4, tvb_reported_length(tvb)-4, NULL, 0);
165 static const value_string h248_3GCSD_properties_vals[] = {
166 { 0x0000, "Circuit Switched Data (threegcsd)"},
167 { 0x0001, "plmnbc"},
168 { 0x0002, "gsmchancod"},
169 {0, NULL}
172 static const value_string h248_3GCSD_signals_vals[] = {
173 { 0x0001, "actprot" },
174 {0, NULL}
177 static const value_string h248_3GCSD_signal_actprot_vals[] = {
178 { 0x0001, "localpeer" },
179 {0, NULL}
182 static const value_string h248_3GCSD_events_vals[] = {
183 { 0x0001, "protres"},
184 { 0x0002, "ratechg"},
185 {0, NULL}
188 static const value_string h248_3GCSD_event_protres_vals[] = {
189 { 0x0001, "result"},
190 { 0x0002, "cause"},
191 {0, NULL}
194 static const value_string h248_3GCSD_event_ratechg_vals[] = {
195 { 0x0001, "rate"},
196 {0, NULL}
199 static const value_string h248_3GCSD_evt_protres_result_vals[] = {
200 {1,"Success"},
201 {0,"Failure"},
202 {0,NULL}
205 static const value_string h248_3GCSD_evt_protres_cause_vals[] = {
206 {1,"Unsp"},
207 {2,"V8V34"},
208 {0,NULL}
211 static const value_string h248_3GCSD_actprot_sig_localpeer_vals[] = {
212 {0,"Orig"},
213 {1,"Term"},
214 {0,NULL}
217 static const h248_pkg_param_t h248_package_3GCSD_props[] = {
218 { 0x0001, &hf_h248_package_3GCSD_plmnbc, dissect_3gcsd_plmnbc, &implicit},
219 { 0x0002, &hf_h248_package_3GCSD_gsmchancod, h248_param_ber_octetstring, &implicit },
220 { 0x0000, NULL, NULL, NULL }
223 static const h248_pkg_param_t h248_pkg_3GCSD_evt_protres_params[] = {
224 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres_result, h248_param_ber_integer, &implicit },
225 { 0x0002, &hf_h248_pkg_3GCSD_evt_protres_cause, h248_param_ber_integer, &implicit },
226 { 0, NULL, NULL, NULL}
229 static const h248_pkg_param_t h248_pkg_3GCSD_evt_ratechg_params[] = {
230 { 0x0001, &hf_h248_pkg_3GCSD_evt_ratechg_rate, h248_param_ber_integer, &implicit },
231 { 0, NULL, NULL, NULL}
234 static const h248_pkg_evt_t h248_package_3GCSD_evts[] = {
235 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres, &ett_h248_3GCSD_evt_protres, h248_pkg_3GCSD_evt_protres_params, h248_3GCSD_event_protres_vals},
236 { 0x0002, &hf_h248_pkg_3GCSD_evt_ratechg, &ett_h248_3GCSD_evt_ratechg, h248_pkg_3GCSD_evt_ratechg_params, h248_3GCSD_event_ratechg_vals},
237 { 0, NULL, NULL, NULL,NULL}
240 static const h248_pkg_param_t h248_pkg_3GCSD_actprot_sig_params[] = {
241 { 0x0001, &hf_h248_pkg_3GCSD_actprot_sig_localpeer, h248_param_ber_integer, &implicit },
242 { 0, NULL, NULL, NULL}
245 static const h248_pkg_sig_t h248_package_3GCSD_sigs[] = {
246 { 0x0010, &hf_h248_pkg_3GCSD_sig_actprot, &ett_pkg_3GCSD_sig_actprot, h248_pkg_3GCSD_actprot_sig_params, h248_3GCSD_signal_actprot_vals },
247 { 0, NULL, NULL, NULL,NULL}
250 static h248_package_t h248_package_3GCSD = {
251 0x0030,
252 &hf_h248_package_3GCSD,
253 &ett_h248_package_3GCSD,
254 h248_3GCSD_properties_vals,
255 h248_3GCSD_signals_vals,
256 h248_3GCSD_events_vals,
257 NULL,
258 h248_package_3GCSD_props,
259 h248_package_3GCSD_sigs,
260 h248_package_3GCSD_evts,
261 NULL
266 * TFO package
267 * 3GPP TS 29.232 -- 15.2.2
269 static int hf_h248_package_3GTFO;
271 static int hf_h248_pkg_3GTFO_evt_codec_modify;
272 static int hf_h248_pkg_3GTFO_evt_distant_codec_list;
273 static int hf_h248_pkg_3GTFO_evt_status;
274 static int hf_h248_pkg_3GTFO_enable;
275 static int hf_h248_pkg_3GTFO_codeclist;
276 static int hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec;
277 static int hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist;
278 static int hf_h248_pkg_3GTFO_evt_status_tfostatus;
280 static int ett_h248_package_3GTFO;
281 static int ett_h248_3GTFO_evt_status;
282 static int ett_h248_3GTFO_evt_distant_codec_list;
283 static int ett_h248_3GTFO_evt_codec_modify;
284 static int ett_h248_3GTFO_codec_list;
285 static int ett_h248_3GTFO_codec;
288 static void dissect_3GTFO_codec_mode(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* cu _U_, void* ignored _U_) {
289 tvbuff_t* sub_tvb = NULL;
290 int8_t appclass;
291 bool pc;
292 int32_t tag;
293 asn1_ctx_t asn1_ctx;
295 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
297 get_ber_identifier(tvb, 0, &appclass, &pc, &tag);
299 /* XXX: is this enough to guess it? */
300 if (tag==BER_UNI_TAG_OCTETSTRING) {
301 dissect_ber_octet_string(false, &asn1_ctx, tree, tvb, 0, hfid, &sub_tvb );
303 if (sub_tvb) {
304 proto_tree* pt = proto_item_add_subtree(asn1_ctx.created_item, ett_h248_3GTFO_codec);
305 dissect_codec_mode(pt, sub_tvb, 0, tvb_reported_length(tvb));
307 } else {
308 proto_tree_add_item(tree,hfid,tvb,0,-1,ENC_NA);
313 static void dissect_3GTFO_codec_list(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* cu _U_, void* ignored _U_) {
314 tvbuff_t* sub_tvb = NULL;
315 int8_t appclass;
316 bool pc;
317 int32_t tag;
318 asn1_ctx_t asn1_ctx;
320 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
322 get_ber_identifier(tvb, 0, &appclass, &pc, &tag);
324 if (tag==BER_UNI_TAG_OCTETSTRING) {
325 dissect_ber_octet_string(false, &asn1_ctx, tree, tvb, 0, hfid, &sub_tvb );
327 if (sub_tvb) {
328 proto_tree* pt = proto_item_add_subtree(asn1_ctx.created_item,ett_h248_3GTFO_codec_list);
329 int len = tvb_reported_length(sub_tvb);
330 int offset = 0;
331 do {
332 offset = dissect_codec_mode(pt, sub_tvb, offset, len);
333 } while(offset < len);
335 } else {
336 proto_tree_add_item(tree,hfid,tvb,0,-1,ENC_NA);
341 static const value_string h248_package_3GTFO_props_vals[] = {
342 {0,"3G Tandem Free Operation (3gtfo)"},
343 {1,"enable"},
344 {2,"codeclist"},
345 {0,NULL}
348 static const value_string h248_pkg_3GTFO_evt_codec_modify_params_vals[] = {
349 {11,"optimalcodec"},
350 {0,NULL}
354 static const value_string h248_pkg_3GTFO_evt_distant_codec_list_params_vals[] = {
355 {13,"distlist"},
356 {0,NULL}
359 static const value_string h248_pkg_3GTFO_evt_status_params_vals[] = {
360 {1,"tfostatus"},
361 {0,NULL}
365 static const value_string h248_package_3GTFO_evts_vals[] = {
366 {10,"codec_modify"},
367 {12,"distant_codec_list"},
368 {14,"status"},
369 {0,NULL}
372 static const value_string tfoenable_vals[] = {
373 {1,"On"},
374 {2,"Off"},
375 {0,NULL}
378 static const h248_pkg_param_t h248_package_3GTFO_props[] = {
379 { 0x0001, &hf_h248_pkg_3GTFO_enable, h248_param_ber_integer, &implicit },
380 { 0x0002, &hf_h248_pkg_3GTFO_codeclist, dissect_3GTFO_codec_list, NULL }, /* Sub-list of Octet string Q.765.5 + TS 26.103 .*/
381 { 0, NULL, NULL, NULL}
385 static const h248_pkg_param_t h248_pkg_3GTFO_evt_codec_modify_params[] = {
386 { 0x0011, &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec, dissect_3GTFO_codec_mode, NULL }, /* Q.765.5 + TS 26.103 .*/
387 { 0, NULL, NULL, NULL}
391 static const h248_pkg_param_t h248_pkg_3GTFO_evt_distant_codec_list_params[] = {
392 { 0x0013, &hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist, dissect_3GTFO_codec_list, NULL }, /* Sub-list of Octet string Q.765.5 + TS 26.103 .*/
393 { 0, NULL, NULL, NULL}
396 static const h248_pkg_param_t h248_pkg_3GTFO_evt_status_params[] = {
397 { 0x0001, &hf_h248_pkg_3GTFO_evt_status_tfostatus, h248_param_ber_boolean, &implicit },
398 { 0, NULL, NULL, NULL}
401 static const h248_pkg_evt_t h248_package_3GTFO_evts[] = {
402 { 0x0010, &hf_h248_pkg_3GTFO_evt_codec_modify, &ett_h248_3GTFO_evt_codec_modify, h248_pkg_3GTFO_evt_codec_modify_params, h248_pkg_3GTFO_evt_codec_modify_params_vals},
403 { 0x0012, &hf_h248_pkg_3GTFO_evt_distant_codec_list, &ett_h248_3GTFO_evt_distant_codec_list, h248_pkg_3GTFO_evt_distant_codec_list_params, h248_pkg_3GTFO_evt_distant_codec_list_params_vals},
404 { 0x0014, &hf_h248_pkg_3GTFO_evt_status, &ett_h248_3GTFO_evt_status, h248_pkg_3GTFO_evt_status_params, h248_pkg_3GTFO_evt_status_params_vals},
405 { 0, NULL, NULL, NULL,NULL}
408 static h248_package_t h248_package_3GTFO = {
409 0x0031,
410 &hf_h248_package_3GTFO,
411 &ett_h248_package_3GTFO,
412 h248_package_3GTFO_props_vals,
413 NULL,
414 h248_package_3GTFO_evts_vals,
415 NULL,
416 h248_package_3GTFO_props,
417 NULL,
418 h248_package_3GTFO_evts,
419 NULL};
422 * 3G Expanded Call Progress Tones Generator Package
423 * 3GPP TS 29.232 -- 15.2.3
426 * Modification Of Link Characteristics Bearer Capability
427 * 3GPP TS 29.232 -- 15.2.4
430 * Enhanced Circuit Switched Data package
431 * 3GPP TS 29.232 -- 15.2.5
434 * Cellular Text telephone Modem Text Transport
435 * 3GPP TS 29.232 -- 15.2.6
438 * IP transport package
439 * 3GPP TS 29.232 -- 15.2.7
441 static int hf_h248_package_threegiptra;
442 static int hf_h248_package_threegiptra_ipv4trans;
443 static int hf_h248_package_threegiptra_ipv6trans;
444 static int hf_h248_package_threegiptra_UDport;
446 static int ett_h248_package_threegiptra;
448 static const value_string h248_threegiptra_properties_vals[] = {
449 { 0x0000, "threegiptra (3G IP transport)" },
450 { 0001, "IP V4 transport address" },
451 { 0002, "IP V6 transport address" },
452 { 0003, "UDP port" },
453 { 0, NULL }
456 static const h248_pkg_param_t h248_package_threegiptra_properties[] = {
457 { 0x0001, &hf_h248_package_threegiptra_ipv4trans, h248_param_ber_octetstring, &implicit },
458 { 0x0002, &hf_h248_package_threegiptra_ipv6trans, h248_param_ber_octetstring, &implicit },
459 { 0x0003, &hf_h248_package_threegiptra_UDport, h248_param_ber_integer, &implicit },
460 { 0x0000, NULL, NULL, NULL }
463 static h248_package_t h248_package_threegiptra = {
464 0x0083, /* Package ID = threegiptra */
465 &hf_h248_package_threegiptra, /* hf_id */
466 &ett_h248_package_threegiptra,
467 h248_threegiptra_properties_vals,
468 NULL, /* signal_names */
469 NULL, /* event_names */
470 NULL, /* stats_names */
471 h248_package_threegiptra_properties, /* h248_pkg_param_t */
472 NULL,
473 NULL,
474 NULL
478 * Flexible Tone Generator Package
479 * 3GPP TS 29.232 -- 15.2.8
482 * Trace Package
483 * 3GPP TS 29.232 -- 15.2.9
486 * ASCI Group call package
487 * 3GPP TS 29.232 -- 15.2.10
490 * 3G Interface Type package
491 * 3GPP TS 29.232 -- 15.2.11
493 static int hf_h248_package_threegint;
494 static int hf_h248_package_threegint_ipint;
496 static int ett_h248_package_threegint;
498 static const value_string h248_threegint_properties_vals[] = {
499 {0000, "3G Interface Type"},
500 {0001, "IP Interface Type"},
501 {0, NULL}
504 static const value_string h248_threegint_ipint_vals[] = {
505 {1, "NboIP (Nb over IP with SIP-I based Nc,)"},
506 {2, "AoIP (A interface over IP)"},
507 {3, "MboIP (Mb interface)"},
508 {4, "ExtSIPI (External SIP-I based network)"},
509 {0, NULL}
512 static const h248_pkg_param_t h248_package_threegint_properties[] = {
513 { 0x0001, &hf_h248_package_threegint_ipint, h248_param_ber_integer, &implicit },
514 { 0x0000, NULL, NULL, NULL }
517 static h248_package_t h248_package_threegint = {
518 0x00e3, /* Package ID = threegint */
519 &hf_h248_package_threegint, /* hf_id */
520 &ett_h248_package_threegint,
521 h248_threegint_properties_vals,
522 NULL, /* signal_names */
523 NULL, /* event_names */
524 NULL, /* stats_names */
525 h248_package_threegint_properties, /* h248_pkg_param_t */
526 NULL,
527 NULL,
528 NULL
531 void proto_register_h248_3gpp(void) {
532 static hf_register_info hf[] = {
533 { &hf_h248_package_3GUP_Mode,
534 { "Mode", "h248.package_3GUP.Mode",
535 FT_UINT32, BASE_DEC, VALS(h248_3GUP_Mode_vals), 0,
536 NULL, HFILL }},
537 { &hf_h248_package_3GUP_UPversions,
538 { "UPversions", "h248.package_3GUP.upversions",
539 FT_UINT32, BASE_DEC, VALS(h248_3GUP_upversions_vals), 0,
540 NULL, HFILL }},
541 { &hf_h248_package_3GUP_delerrsdu,
542 { "Delivery of erroneous SDUs", "h248.package_3GUP.delerrsdu",
543 FT_UINT32, BASE_DEC, VALS(h248_3GUP_delerrsdu_vals), 0,
544 NULL, HFILL }},
545 { &hf_h248_package_3GUP_interface,
546 { "Interface", "h248.package_3GUP.interface",
547 FT_UINT32, BASE_DEC, VALS(h248_3GUP_interface_vals), 0,
548 NULL, HFILL }},
549 { &hf_h248_package_3GUP_initdir,
550 { "Initialisation Direction", "h248.package_3GUP.initdir",
551 FT_UINT32, BASE_DEC, VALS(h248_3GUP_initdir_vals), 0,
552 NULL, HFILL }},
555 { &hf_h248_package_3GCSD,
556 { "CSD Package", "h248.package_3GCSD",
557 FT_BYTES, BASE_NONE, NULL, 0,
558 "Circuit Switched Data Package", HFILL }},
559 { &hf_h248_package_3GCSD_plmnbc,
560 { "PLMN Bearer Capability", "h248.package_3GCSD.plmnbc",
561 FT_BYTES, BASE_NONE, NULL, 0,
562 "The PLMN Bearer Capability", HFILL }},
563 { &hf_h248_package_3GCSD_gsmchancod,
564 { "GSM channel coding", "h248.package_3GCSD.gsmchancod",
565 FT_BYTES, BASE_NONE, NULL, 0,
566 "Channel information needed for GSM", HFILL }},
567 { &hf_h248_pkg_3GCSD_evt_protres,
568 { "Protocol Negotiation Result", "h248.package_3GCSD.protres",
569 FT_BYTES, BASE_NONE, NULL, 0,
570 "This event is used to report the result of the protocol negotiation", HFILL }},
571 { &hf_h248_pkg_3GCSD_evt_protres_result,
572 { "Negotiation Result", "h248.package_3GCSD.protres.result",
573 FT_UINT32, BASE_DEC, VALS(h248_3GCSD_evt_protres_result_vals), 0,
574 "reports whether the protocol negotiation has been successful", HFILL }},
575 { &hf_h248_pkg_3GCSD_evt_protres_cause,
576 { "Possible Failure Cause", "h248.package_3GCSD.protres.cause",
577 FT_UINT32, BASE_DEC, VALS(h248_3GCSD_evt_protres_cause_vals), 0,
578 "indicates the possible failure cause", HFILL }},
579 { &hf_h248_pkg_3GCSD_evt_ratechg,
580 { "Rate Change", "h248.package_3GCSD.ratechg",
581 FT_BYTES, BASE_NONE, NULL, 0,
582 "This event is used to report a rate change", HFILL }},
583 { &hf_h248_pkg_3GCSD_evt_ratechg_rate,
584 { "New Rate", "h248.package_3GCSD.ratechg.rate",
585 FT_UINT32, BASE_DEC, NULL, 0,
586 "reports the new rate for the termination", HFILL }},
587 { &hf_h248_pkg_3GCSD_sig_actprot,
588 { "Activate Protocol", "h248.package_3GCSD.actprot",
589 FT_BYTES, BASE_NONE, NULL, 0,
590 "Activate the higher layer protocol", HFILL }},
591 { &hf_h248_pkg_3GCSD_actprot_sig_localpeer,
592 { "Local Peer Role", "h248.package_3GCSD.actprot.localpeer",
593 FT_UINT32, BASE_DEC, VALS(h248_3GCSD_actprot_sig_localpeer_vals), 0,
594 "It is used to inform the modem whether it should act as originating or terminating peer", HFILL }},
597 { &hf_h248_package_3GTFO,
598 { "Tandem Free Operation", "h248.package_3GTFO",
599 FT_BYTES, BASE_NONE, NULL, 0,
600 "This package defines events and properties for Tandem Free Operation (TFO) control", HFILL }},
601 { &hf_h248_pkg_3GTFO_enable,
602 { "TFO Activity Control", "h248.package_3GTFO.tfoenable",
603 FT_UINT32, BASE_DEC, VALS(tfoenable_vals), 0,
604 "Defines if TFO is enabled or not", HFILL }},
605 { &hf_h248_pkg_3GTFO_codeclist,
606 { "TFO Codec List", "h248.package_3GTFO.codeclist",
607 FT_BYTES, BASE_NONE, NULL, 0,
608 "List of codecs for use in TFO protocol", HFILL }},
610 { &hf_h248_pkg_3GTFO_evt_codec_modify,
611 { "Optimal Codec Event", "h248.package_3GTFO.codec_modify",
612 FT_BYTES, BASE_NONE, NULL, 0,
613 "The event is used to notify the MGC that TFO negotiation has resulted in an optimal codec type being proposed", HFILL }},
614 { &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec,
615 { "Optimal Codec Type", "h248.package_3GTFO.codec_modify.optimalcodec",
616 FT_BYTES, BASE_NONE, NULL, 0,
617 "indicates which is the proposed codec type for TFO", HFILL }},
619 { &hf_h248_pkg_3GTFO_evt_distant_codec_list,
620 { "Codec List Event", "h248.package_3GTFO.distant_codec_list",
621 FT_BYTES, BASE_NONE, NULL, 0,
622 "The event is used to notify the MGC of the distant TFO partner's supported codec list", HFILL }},
624 { &hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist,
625 { "Distant Codec List", "h248.package_3GTFO.distant_codec_list.distlist",
626 FT_BYTES, BASE_NONE, NULL, 0,
627 "indicates the codec list for TFO", HFILL }},
629 { &hf_h248_pkg_3GTFO_evt_status,
630 { "TFO Status Event", "h248.package_3GTFO.status",
631 FT_BYTES, BASE_NONE, NULL, 0,
632 "The event is used to notify the MGC that a TFO link has been established or broken", HFILL }},
633 { &hf_h248_pkg_3GTFO_evt_status_tfostatus,
634 { "TFO Status", "h248.package_3GTFO.status.tfostatus",
635 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
636 "reports whether TFO has been established or broken", HFILL }},
637 { &hf_h248_package_threegint,
638 { "3G Interface Type", "h248.package_threegint",
639 FT_BYTES, BASE_NONE, NULL, 0,
640 "This package contains a property to specify the used interface type for IP terminations", HFILL }},
641 { &hf_h248_package_threegint_ipint,
642 { "IP Interface Type", "h248.package_threegint.ipint",
643 FT_UINT32, BASE_DEC, VALS(h248_threegint_ipint_vals), 0,
644 NULL, HFILL }},
647 { &hf_h248_package_threegiptra,
648 { "IP transport", "h248.package_threegiptra",
649 FT_BYTES, BASE_NONE, NULL, 0,
650 "This package contains the information needed to be able to support IP transport from RAN to the media gateway", HFILL }},
651 { &hf_h248_package_threegiptra_ipv4trans,
652 { "IPv4 Address", "h248.package_threegiptra.ipv4trans",
653 FT_BYTES, BASE_NONE, NULL, 0,
654 NULL, HFILL }},
655 { &hf_h248_package_threegiptra_ipv6trans,
656 { "IPv6 Address", "h248.package_threegiptra.ipv6trans",
657 FT_BYTES, BASE_NONE, NULL, 0,
658 NULL, HFILL }},
659 { &hf_h248_package_threegiptra_UDport,
660 { "UDP Port", "h248.package_threegiptra.udport",
661 FT_UINT32, BASE_DEC, NULL, 0,
662 NULL, HFILL }},
666 static int *ett[] = {
667 &ett_h248_package_3GUP,
668 &ett_h248_package_3GCSD,
669 &ett_h248_3GCSD_evt_protres,
670 &ett_h248_3GCSD_evt_ratechg,
671 &ett_h248_package_3GTFO,
672 &ett_h248_3GTFO_evt_status,
673 &ett_h248_3GTFO_evt_distant_codec_list,
674 &ett_h248_3GTFO_evt_codec_modify,
675 &ett_h248_3GTFO_codec_list,
676 &ett_h248_3GTFO_codec,
677 &ett_pkg_3GCSD_sig_actprot,
678 &ett_h248_package_threegiptra,
679 &ett_h248_package_threegint
682 proto_h248_package_3GUP = proto_register_protocol(PNAME, PSNAME, PFNAME);
684 proto_register_field_array(proto_h248_package_3GUP, hf, array_length(hf));
686 proto_register_subtree_array(ett, array_length(ett));
688 h248_register_package(&h248_package_3GUP,REPLACE_PKG);
689 h248_register_package(&h248_package_3GCSD, REPLACE_PKG);
690 h248_register_package(&h248_package_3GTFO, REPLACE_PKG);
691 h248_register_package(&h248_package_threegint, REPLACE_PKG);
692 h248_register_package(&h248_package_threegiptra, REPLACE_PKG);
697 * Editor modelines - https://www.wireshark.org/tools/modelines.html
699 * Local variables:
700 * c-basic-offset: 8
701 * tab-width: 8
702 * indent-tabs-mode: t
703 * End:
705 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
706 * :indentSize=8:tabSize=8:noTabs=false: