2 * Routines for ALCAP (Q.2630.3) dissection
3 * AAL type 2 signalling protocol - Capability set 3
6 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
7 * In association with Telos Technology Inc.
9 * Copyright 2005, Luis E. Garcia Ontanon <luis.ontanon [AT] gmail.com>
11 * Wireshark - Network traffic analyzer
12 * By Gerald Combs <gerald@wireshark.org>
13 * Copyright 1998 Gerald Combs
15 * SPDX-License-Identifier: GPL-2.0-or-later
20 #include <epan/packet.h>
22 #include <epan/prefs.h>
23 #include <epan/expert.h>
25 #include <wsutil/str_util.h>
26 #include "packet-alcap.h"
27 #include "packet-mtp3.h"
28 #include "packet-isup.h"
30 void proto_register_alcap(void);
31 void proto_reg_handoff_alcap(void);
33 #define ALCAP_MSG_HEADER_LEN 6
34 #define ALCAP_PARM_HEADER_LEN 3
35 #define FIELD_NSAP_ADDRESS_LEN 20
37 static const value_string msg_type_strings
[] = {
38 { 1, "Block confirm (BLC)" },
39 { 2, "Block request (BLO)" },
40 { 3, "Confusion (CFN)" },
41 { 4, "Establish confirm (ECF)" },
42 { 5, "Establish request (ERQ)" },
43 { 6, "Release confirm (RLC)" },
44 { 7, "Release request (REL)" },
45 { 8, "Reset confirm (RSC)" },
46 { 9, "Reset request (RES)" },
47 { 10, "Unblock confirm (UBC)" },
48 { 11, "Unblock request (UBL)" },
49 { 12, "Modify Ack (MOA)" },
50 { 13, "Modify Reject (MOR)" },
51 { 14, "Modify Request (MOD)" },
54 static value_string_ext msg_type_strings_ext
= VALUE_STRING_EXT_INIT(msg_type_strings
);
56 static const value_string send_notification
[] = {
57 { 0, "Do Not Send Notification"},
58 { 1, "Send Notification" },
62 static const value_string instruction_indicator
[] = {
63 { 0, "Pass On Message or Parameter"},
64 { 1, "Discard Parameter" },
65 { 2, "Discard Message" },
66 { 3, "Release Connection" },
70 static const value_string msg_parm_strings
[] = {
72 { 2, "Connection element identifier (CEID)" },
73 { 3, "Destination E.164 service endpoint address (DESEA)" },
74 { 4, "Destination NSAP service endpoint address (DNSEA)" },
75 { 5, "Link characteristics (ALC)" },
76 { 6, "Originating signalling association identifier (OSAID)" },
77 { 7, "Served user generated reference (SUGR)" },
78 { 8, "Served user transport (SUT)" },
79 { 9, "Service specific information (audio) (SSIA)" },
80 { 10, "Service specific information (multirate) (SSIM)" },
81 { 11, "Service specific information (SAR-assured) (SSISA)" },
82 { 12, "Service specific information (SAR-unassured) (SSISU)" },
83 { 13, "Test connection identifier (TCI)" },
84 { 14, "Modify Support for Link Characteristics (MSLC)" },
85 { 15, "Modify Support for Service Specific Information (MSSSI)" },
86 { 16, "Path Type (PT)" },
87 { 17, "Preferred Link Characteristics (PLC)" },
88 { 18, "Preferred Service Specific Information - Audio Extended (PSSIAE)" },
89 { 19, "Preferred Service Specific Information - Multirate Extended (PSSIME)" },
90 { 20, "Served User Correlation ID (SUCI)" },
91 { 21, "Origination NSAP Service Endpoint Address (ONSEA)" },
92 { 22, "Service Specific Information - Audio Extended (SSIAE)" },
93 { 23, "Service Specific Information - Multirate Extended (SSIME)" },
94 { 24, "Automatic Congestion Control (ACC)" },
95 { 25, "Connection Priority (CP)" },
96 { 26, "Hop Counter (HC)" },
97 { 27, "Origination E.164 Service Endpoint Address (OESEA)" },
98 { 28, "Preferred Transfer Capability - FBW (PFBW)" },
99 { 29, "Preferred Transfer Capability - VBWS (PVBWS)" },
100 { 30, "Preferred Transfer Capability - VBWT (PVBWT)" },
101 { 31, "TAR Controlled Connection (TCC)" },
102 { 32, "Transfer Capability (FBW)" },
103 { 33, "Transfer Capability (VBWS)" },
104 { 34, "Transfer Capability (VBWT)" },
105 { 35, "Transfer Capability Support (TCS)" },
110 static const value_string enabled_disabled
[] = {
116 static const value_string alaw_ulaw
[] = {
122 static const value_string cause_coding_vals
[] = {
123 {0, "ITU (Q.850 - Q.2610)"},
131 static const value_string cause_values_itu
[] = {
132 { 1, "Unallocated (unassigned) number"},
133 { 3, "No route to destination"},
134 { 31, "Normal, unspecified"},
135 { 34, "No circuit/channel available"},
136 { 38, "Network out of order"},
137 { 41, "Temporary failure"},
138 { 42, "Switching equipment congestion"},
139 { 44, "Requested circuit/channel not available"},
140 { 47, "Resource unavailable, unspecified"},
141 { 93, "AAL parameters cannot be supported"},
142 { 95, "Invalid message, unspecified"},
143 { 96, "Mandatory information element is missing"},
144 { 97, "Message type non-existent or not implemented"},
145 { 99, "Information element/parameter non-existent or not implemented"},
146 { 100, "Invalid information element contents"},
147 { 102, "Recovery on timer expiry"},
148 { 110, "Message with unrecognized parameter, discarded"},
149 { 111, "Protocol error, unspecified"},
153 static const value_string audio_profile_type
[] = {
154 { 0, "From I.366.2" },
155 { 1, "From Organization" },
161 static const value_string congestion_level
[] = {
163 { 1, "Congestion Level 1 exceeded" },
164 { 2, "Congestion Level 2 exceeded" },
168 static const value_string connection_priority
[] = {
169 { 0, "Level 1 (Highest)" },
173 { 4, "Level 5 (Lowest)" },
180 static const char *alcap_proto_name
= "AAL type 2 signalling protocol (Q.2630)";
181 static const char *alcap_proto_name_short
= "ALCAP";
183 static const value_string all_paths_vals
[] = {
184 { 0, "All Paths in association" },
188 static const value_string all_cids_vals
[] = {
189 { 0, "All CIDs in the Path" },
193 /* Initialize the subtree pointers */
194 static int ett_alcap
;
196 static int ett_compat
;
197 static int ett_cau_diag
;
199 /* Initialize the protocol and registered fields */
200 static int proto_alcap
;
202 static int hf_alcap_dsaid
;
203 static int hf_alcap_msg_id
;
204 static int hf_alcap_compat
;
205 static int hf_alcap_compat_pass_on_sni
;
206 static int hf_alcap_compat_pass_on_ii
;
207 static int hf_alcap_compat_general_sni
;
208 static int hf_alcap_compat_general_ii
;
210 static int hf_alcap_param_id
;
211 static int hf_alcap_param_len
;
213 static int hf_alcap_unknown
;
215 static int hf_alcap_cau_coding
;
216 static int hf_alcap_cau_value_itu
;
217 static int hf_alcap_cau_value_non_itu
;
218 static int hf_alcap_cau_diag
;
219 static int hf_alcap_cau_diag_len
;
220 static int hf_alcap_cau_diag_msg
;
221 static int hf_alcap_cau_diag_param_id
;
222 static int hf_alcap_cau_diag_field_num
;
224 static int hf_alcap_ceid_pathid
;
225 static int hf_alcap_ceid_cid
;
227 static int hf_alcap_dnsea
;
229 static int hf_alcap_alc_max_br_fw
;
230 static int hf_alcap_alc_max_br_bw
;
231 static int hf_alcap_alc_avg_br_fw
;
232 static int hf_alcap_alc_avg_br_bw
;
233 static int hf_alcap_alc_max_sdu_fw
;
234 static int hf_alcap_alc_max_sdu_bw
;
235 static int hf_alcap_alc_avg_sdu_fw
;
236 static int hf_alcap_alc_avg_sdu_bw
;
238 static int hf_alcap_osaid
;
240 static int hf_alcap_sugr
;
242 static int hf_alcap_sut_len
;
243 static int hf_alcap_sut
;
245 static int hf_alcap_ssia_pr_type
;
246 static int hf_alcap_ssia_pr_id
;
247 static int hf_alcap_ssia_frm
;
248 static int hf_alcap_ssia_cmd
;
249 static int hf_alcap_ssia_mfr2
;
250 static int hf_alcap_ssia_mfr1
;
251 static int hf_alcap_ssia_dtmf
;
252 static int hf_alcap_ssia_cas
;
253 static int hf_alcap_ssia_fax
;
254 static int hf_alcap_ssia_pcm
;
255 static int hf_alcap_ssia_max_len
;
256 static int hf_alcap_ssia_oui
;
258 static int hf_alcap_ssim_frm
;
259 static int hf_alcap_ssim_mult
;
260 static int hf_alcap_ssim_max
;
262 static int hf_alcap_ssisa_max_sssar_fw
;
263 static int hf_alcap_ssisa_max_sssar_bw
;
264 static int hf_alcap_ssisa_max_sscop_sdu_fw
;
265 static int hf_alcap_ssisa_max_sscop_sdu_bw
;
266 static int hf_alcap_ssisa_max_sscop_uu_fw
;
267 static int hf_alcap_ssisa_max_sscop_uu_bw
;
269 static int hf_alcap_ssisu_max_sssar_fw
;
270 static int hf_alcap_ssisu_max_sssar_bw
;
271 static int hf_alcap_ssisu_ted
;
273 static int hf_alcap_pt
;
275 static int hf_alcap_plc_max_br_fw
;
276 static int hf_alcap_plc_max_br_bw
;
277 static int hf_alcap_plc_avg_br_fw
;
278 static int hf_alcap_plc_avg_br_bw
;
279 static int hf_alcap_plc_max_sdu_fw
;
280 static int hf_alcap_plc_max_sdu_bw
;
281 static int hf_alcap_plc_avg_sdu_fw
;
282 static int hf_alcap_plc_avg_sdu_bw
;
284 static int hf_alcap_pssiae_pr_type
;
285 static int hf_alcap_pssiae_pr_id
;
286 static int hf_alcap_pssiae_lb
;
287 static int hf_alcap_pssiae_rc
;
288 static int hf_alcap_pssiae_syn
;
289 static int hf_alcap_pssiae_frm
;
290 static int hf_alcap_pssiae_cmd
;
291 static int hf_alcap_pssiae_mfr2
;
292 static int hf_alcap_pssiae_mfr1
;
293 static int hf_alcap_pssiae_dtmf
;
294 static int hf_alcap_pssiae_cas
;
295 static int hf_alcap_pssiae_fax
;
296 static int hf_alcap_pssiae_pcm
;
297 static int hf_alcap_pssiae_max_len
;
298 static int hf_alcap_pssiae_oui
;
300 static int hf_alcap_pssime_frm
;
301 static int hf_alcap_pssime_lb
;
302 static int hf_alcap_pssime_mult
;
303 static int hf_alcap_pssime_max
;
305 static int hf_alcap_suci
;
307 static int hf_alcap_onsea
;
309 static int hf_alcap_ssiae_pr_type
;
310 static int hf_alcap_ssiae_pr_id
;
311 static int hf_alcap_ssiae_lb
;
312 static int hf_alcap_ssiae_rc
;
313 static int hf_alcap_ssiae_syn
;
314 static int hf_alcap_ssiae_frm
;
315 static int hf_alcap_ssiae_cmd
;
316 static int hf_alcap_ssiae_mfr2
;
317 static int hf_alcap_ssiae_mfr1
;
318 static int hf_alcap_ssiae_dtmf
;
319 static int hf_alcap_ssiae_cas
;
320 static int hf_alcap_ssiae_fax
;
321 static int hf_alcap_ssiae_pcm
;
322 static int hf_alcap_ssiae_max_len
;
323 static int hf_alcap_ssiae_oui
;
325 static int hf_alcap_ssime_frm
;
326 static int hf_alcap_ssime_lb
;
327 static int hf_alcap_ssime_mult
;
328 static int hf_alcap_ssime_max
;
330 static int hf_alcap_acc_level
;
332 static int hf_alcap_cp
;
334 static int hf_alcap_hc
;
336 static int hf_alcap_pfbw_br_fw
;
337 static int hf_alcap_pfbw_br_bw
;
338 static int hf_alcap_pfbw_bucket_fw
;
339 static int hf_alcap_pfbw_bucket_bw
;
340 static int hf_alcap_pfbw_size_fw
;
341 static int hf_alcap_pfbw_size_bw
;
343 static int hf_alcap_pvbws_br_fw
;
344 static int hf_alcap_pvbws_br_bw
;
345 static int hf_alcap_pvbws_bucket_fw
;
346 static int hf_alcap_pvbws_bucket_bw
;
347 static int hf_alcap_pvbws_size_fw
;
348 static int hf_alcap_pvbws_size_bw
;
349 static int hf_alcap_pvbws_stt
;
351 static int hf_alcap_pvbwt_peak_br_fw
;
352 static int hf_alcap_pvbwt_peak_br_bw
;
353 static int hf_alcap_pvbwt_peak_bucket_fw
;
354 static int hf_alcap_pvbwt_peak_bucket_bw
;
355 static int hf_alcap_pvbwt_sust_br_fw
;
356 static int hf_alcap_pvbwt_sust_br_bw
;
357 static int hf_alcap_pvbwt_sust_bucket_fw
;
358 static int hf_alcap_pvbwt_sust_bucket_bw
;
359 static int hf_alcap_pvbwt_size_fw
;
360 static int hf_alcap_pvbwt_size_bw
;
362 static int hf_alcap_fbw_br_fw
;
363 static int hf_alcap_fbw_br_bw
;
364 static int hf_alcap_fbw_bucket_fw
;
365 static int hf_alcap_fbw_bucket_bw
;
366 static int hf_alcap_fbw_size_fw
;
367 static int hf_alcap_fbw_size_bw
;
369 static int hf_alcap_vbws_br_fw
;
370 static int hf_alcap_vbws_br_bw
;
371 static int hf_alcap_vbws_bucket_fw
;
372 static int hf_alcap_vbws_bucket_bw
;
373 static int hf_alcap_vbws_size_fw
;
374 static int hf_alcap_vbws_size_bw
;
375 static int hf_alcap_vbws_stt
;
377 static int hf_alcap_vbwt_peak_br_fw
;
378 static int hf_alcap_vbwt_peak_br_bw
;
379 static int hf_alcap_vbwt_peak_bucket_fw
;
380 static int hf_alcap_vbwt_peak_bucket_bw
;
381 static int hf_alcap_vbwt_sust_br_fw
;
382 static int hf_alcap_vbwt_sust_br_bw
;
383 static int hf_alcap_vbwt_sust_bucket_fw
;
384 static int hf_alcap_vbwt_sust_bucket_bw
;
385 static int hf_alcap_vbwt_size_fw
;
386 static int hf_alcap_vbwt_size_bw
;
389 static int hf_alcap_leg_osaid
;
390 static int hf_alcap_leg_dsaid
;
391 static int hf_alcap_leg_pathid
;
392 static int hf_alcap_leg_cid
;
393 static int hf_alcap_leg_sugr
;
394 static int hf_alcap_leg_dnsea
;
395 static int hf_alcap_leg_onsea
;
396 static int hf_alcap_leg_frame
;
397 static int hf_alcap_leg_release_cause
;
399 static expert_field ei_alcap_parameter_field_bad_length
;
400 static expert_field ei_alcap_undecoded
;
401 static expert_field ei_alcap_release_cause_not31
;
402 static expert_field ei_alcap_abnormal_release
;
403 static expert_field ei_alcap_response
;
405 static dissector_handle_t alcap_handle
;
407 static bool keep_persistent_info
= true;
409 static wmem_tree_t
* legs_by_dsaid
;
410 static wmem_tree_t
* legs_by_osaid
;
411 static wmem_tree_t
* legs_by_bearer
;
413 static const char* dissect_fields_unknown(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
414 proto_item
* pi
= proto_tree_add_item(tree
,hf_alcap_unknown
,tvb
,offset
,len
,ENC_NA
);
415 expert_add_info(pinfo
, pi
, &ei_alcap_undecoded
);
419 static const char* dissect_fields_cau(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
421 * Q.2630.1 -> 7.3.1 Cause
432 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
436 msg_info
->release_cause
= tvb_get_uint8(tvb
, offset
+1) & 0x7f;
438 coding
= tvb_get_uint8(tvb
, offset
) & 0x3;
440 proto_tree_add_item(tree
, hf_alcap_cau_coding
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
443 pi
= proto_tree_add_item(tree
, hf_alcap_cau_value_itu
, tvb
, offset
+1, 1, ENC_BIG_ENDIAN
);
445 if ( msg_info
->release_cause
&& msg_info
->release_cause
!= 31 )
446 expert_add_info(pinfo
, pi
, &ei_alcap_abnormal_release
);
448 ret_str
= val_to_str(msg_info
->release_cause
, cause_values_itu
, "Unknown(%u)");
450 proto_tree_add_item(tree
, hf_alcap_cau_value_non_itu
, tvb
, offset
+1 , 1, ENC_BIG_ENDIAN
);
451 ret_str
= wmem_strdup_printf(pinfo
->pool
, "%u", msg_info
->release_cause
);
454 if (!tree
) return ret_str
;
459 int diag_len
= tvb_get_uint8(tvb
,offset
);
461 pi
= proto_tree_add_item(tree
,hf_alcap_cau_diag
, tvb
, offset
,len
-2,ENC_NA
);
462 tree
= proto_item_add_subtree(pi
,ett_cau_diag
);
464 proto_tree_add_item(tree
, hf_alcap_cau_diag_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
467 switch (msg_info
->release_cause
) {
471 proto_tree_add_item(tree
, hf_alcap_cau_diag_msg
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
473 while(diag_len
>= 2) {
474 proto_tree_add_item(tree
, hf_alcap_cau_diag_param_id
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
475 proto_tree_add_item(tree
, hf_alcap_cau_diag_field_num
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
480 /* XXX - TODO Q.2610 */
481 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_undecoded
, tvb
, offset
, diag_len
);
489 static const char* dissect_fields_ceid(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
491 * Q.2630.1 -> 7.3.2 Connection Element Identifier
493 * 7.4.3 Path Identifier
494 * 7.4.4 Channel Identifier
497 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
501 proto_tree_add_item_ret_uint(tree
, hf_alcap_ceid_pathid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &msg_info
->pathid
);
503 msg_info
->cid
= tvb_get_uint8(tvb
,offset
+4);
505 if (msg_info
->pathid
== 0) {
506 return "Path: 0 (All Paths)";
509 proto_tree_add_item(tree
,hf_alcap_ceid_cid
,tvb
,offset
+4,1,ENC_BIG_ENDIAN
);
511 if (msg_info
->cid
== 0) {
512 return wmem_strdup_printf(pinfo
->pool
, "Path: %u CID: 0 (Every CID)",msg_info
->pathid
);
514 return wmem_strdup_printf(pinfo
->pool
, "Path: %u CID: %u",msg_info
->pathid
,msg_info
->cid
);
518 static const char* dissect_fields_desea(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
520 * Q.2630.1 -> 7.3.3 Destination E.164 service endpoint address
522 * 7.4.13 Nature of Address
523 * 7.4.14 E.164 Address
528 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
532 e164
= wmem_new(pinfo
->pool
, e164_info_t
);
534 e164
->e164_number_type
= CALLED_PARTY_NUMBER
;
535 e164
->nature_of_address
= tvb_get_uint8(tvb
,offset
) & 0x7f;
537 * XXX - section 7.4.14 "E.164 address" of Q.2630.3 seems to
538 * indicate that this is BCD, not ASCII.
540 e164
->E164_number_str
= (char*)tvb_get_string_enc(pinfo
->pool
,tvb
,offset
+1,len
,ENC_ASCII
|ENC_NA
);
541 e164
->E164_number_length
= len
-1;
543 dissect_e164_number(tvb
, tree
, offset
-1, len
, *e164
);
548 static const char* dissect_fields_oesea(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
550 * Q.2630.3 -> 7.3.23 Origination E.164 service endpoint address
552 * 7.4.13 Nature of Address
553 * 7.4.14 E.164 Address
558 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
562 e164
= wmem_new(pinfo
->pool
, e164_info_t
);
564 e164
->e164_number_type
= CALLING_PARTY_NUMBER
;
565 e164
->nature_of_address
= tvb_get_uint8(tvb
,offset
) & 0x7f;
567 * XXX - section 7.4.14 "E.164 address" of Q.2630.3 seems to
568 * indicate that this is BCD, not ASCII.
570 e164
->E164_number_str
= (char*)tvb_get_string_enc(pinfo
->pool
,tvb
,offset
+1,len
,ENC_ASCII
|ENC_NA
);
571 e164
->E164_number_length
= len
-1;
573 dissect_e164_number(tvb
, tree
, offset
-1, len
, *e164
);
578 static const char* dissect_fields_dnsea(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
580 * Q.2630.1 -> 7.3.4 Destination NSAP service endpoint address
582 * 7.4.15 NSAP Address
586 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
590 msg_info
->dest_nsap
= tvb_bytes_to_str(pinfo
->pool
, tvb
,offset
,20);
592 proto_tree_add_item(tree
, hf_alcap_dnsea
, tvb
, offset
, 20, ENC_NA
);
593 dissect_nsap(tvb
, offset
,20, tree
);
598 static const char* dissect_fields_onsea(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
600 * Q.2630.3 -> 7.3.24 Origination NSAP service endpoint address
602 * 7.4.15 NSAP Address
606 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
610 msg_info
->orig_nsap
= tvb_bytes_to_str(pinfo
->pool
, tvb
,offset
,20);
612 proto_tree_add_item(tree
, hf_alcap_onsea
, tvb
, offset
, 20, ENC_NA
);
613 dissect_nsap(tvb
, offset
,20, tree
);
618 static const char* dissect_fields_alc(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
620 * Q.2630.1 -> 7.3.5 Link characteristics
622 * 7.4.11 CPS-SDU Bit Rate -> Maximum CPS-SDU Bit Rate
623 * 7.4.11 CPS-SDU Bit Rate -> Average CPS-SDU Bit Rate
624 * 7.4.12 CPS-SDU Size -> Maximum CPS-SDU Size
625 * 7.4.12 CPS-SDU Size -> Average CPS-SDU Size
629 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
633 proto_tree_add_item(tree
, hf_alcap_alc_max_br_fw
, tvb
, offset
+0, 2, ENC_BIG_ENDIAN
);
634 proto_tree_add_item(tree
, hf_alcap_alc_max_br_bw
, tvb
, offset
+2, 2, ENC_BIG_ENDIAN
);
635 proto_tree_add_item(tree
, hf_alcap_alc_avg_br_fw
, tvb
, offset
+4, 2, ENC_BIG_ENDIAN
);
636 proto_tree_add_item(tree
, hf_alcap_alc_avg_br_bw
, tvb
, offset
+6, 2, ENC_BIG_ENDIAN
);
637 proto_tree_add_item(tree
, hf_alcap_alc_max_sdu_fw
, tvb
, offset
+8, 1, ENC_BIG_ENDIAN
);
638 proto_tree_add_item(tree
, hf_alcap_alc_max_sdu_bw
, tvb
, offset
+9, 1, ENC_BIG_ENDIAN
);
639 proto_tree_add_item(tree
, hf_alcap_alc_avg_sdu_fw
, tvb
, offset
+10, 1, ENC_BIG_ENDIAN
);
640 proto_tree_add_item(tree
, hf_alcap_alc_avg_sdu_bw
, tvb
, offset
+11, 1, ENC_BIG_ENDIAN
);
645 static const char* dissect_fields_plc(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
647 * Q.2630.2 -> 7.3.19 Preferred Link characteristics
649 * 7.4.11 CPS-SDU Bit Rate -> Maximum CPS-SDU Bit Rate
650 * 7.4.11 CPS-SDU Bit Rate -> Average CPS-SDU Bit Rate
651 * 7.4.12 CPS-SDU Size -> Maximum CPS-SDU Size
652 * 7.4.12 CPS-SDU Size -> Average CPS-SDU Size
656 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
660 proto_tree_add_item(tree
, hf_alcap_plc_max_br_fw
, tvb
, offset
+0, 2, ENC_BIG_ENDIAN
);
661 proto_tree_add_item(tree
, hf_alcap_plc_max_br_bw
, tvb
, offset
+2, 2, ENC_BIG_ENDIAN
);
662 proto_tree_add_item(tree
, hf_alcap_plc_avg_br_fw
, tvb
, offset
+4, 2, ENC_BIG_ENDIAN
);
663 proto_tree_add_item(tree
, hf_alcap_plc_avg_br_bw
, tvb
, offset
+6, 2, ENC_BIG_ENDIAN
);
664 proto_tree_add_item(tree
, hf_alcap_plc_max_sdu_fw
, tvb
, offset
+8, 1, ENC_BIG_ENDIAN
);
665 proto_tree_add_item(tree
, hf_alcap_plc_max_sdu_bw
, tvb
, offset
+9, 1, ENC_BIG_ENDIAN
);
666 proto_tree_add_item(tree
, hf_alcap_plc_avg_sdu_fw
, tvb
, offset
+10, 1, ENC_BIG_ENDIAN
);
667 proto_tree_add_item(tree
, hf_alcap_plc_avg_sdu_bw
, tvb
, offset
+11, 1, ENC_BIG_ENDIAN
);
672 static const char* dissect_fields_osaid(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
674 * Q.2630.1 -> 7.3.6 Originating signalling association identifier
676 * 7.4.2 Signalling Association Identifier -> Originating Signalling Association
679 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
683 msg_info
->osaid
= tvb_get_ntohl(tvb
,offset
);
685 proto_tree_add_item(tree
, hf_alcap_osaid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
690 static const char* dissect_fields_sugr(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
692 * Q.2630.1 -> 7.3.7 Served user generated reference
694 * 7.4.10 Served User Generated Reference
697 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
701 msg_info
->sugr
= tvb_get_ntohl(tvb
,offset
);
703 proto_tree_add_item(tree
, hf_alcap_sugr
, tvb
, offset
, 4, ENC_NA
);
708 static const char* dissect_fields_suci(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
710 * Q.2630.2 -> 7.3.22 Served user correlation ID
712 * 7.4.22 Served user correlation ID
715 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
719 proto_tree_add_item(tree
, hf_alcap_suci
, tvb
, offset
, len
, ENC_BIG_ENDIAN
);
724 static const char* dissect_fields_ssia(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
726 * Q.2630.2 -> 7.3.9 Service specific information (Audio)
728 * 7.4.5 Organizational Unique Identifier
731 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
735 proto_tree_add_item(tree
, hf_alcap_ssia_pr_type
, tvb
, offset
+0,1,ENC_BIG_ENDIAN
);
737 proto_tree_add_item(tree
, hf_alcap_ssia_pr_id
, tvb
, offset
+2,1,ENC_BIG_ENDIAN
);
739 proto_tree_add_item(tree
, hf_alcap_ssia_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
740 proto_tree_add_item(tree
, hf_alcap_ssia_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
741 proto_tree_add_item(tree
, hf_alcap_ssia_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
742 proto_tree_add_item(tree
, hf_alcap_ssia_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
743 proto_tree_add_item(tree
, hf_alcap_ssia_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
744 proto_tree_add_item(tree
, hf_alcap_ssia_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
745 proto_tree_add_item(tree
, hf_alcap_ssia_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
746 proto_tree_add_item(tree
, hf_alcap_ssia_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
748 proto_tree_add_item(tree
, hf_alcap_ssia_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
750 proto_tree_add_item(tree
, hf_alcap_ssia_oui
, tvb
, offset
+5,3,ENC_NA
);
755 static const char* dissect_fields_ssim(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
757 * Q.2630.1 -> 7.3.10 Service specific information (Multirate)
759 * 7.4.7 Multirate Service
762 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
766 proto_tree_add_item(tree
,hf_alcap_ssim_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
767 proto_tree_add_item(tree
,hf_alcap_ssim_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
768 proto_tree_add_item(tree
,hf_alcap_ssim_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
773 static const char* dissect_fields_ssisa(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
775 * Q.2630.1 -> 7.3.11 Service specific information (SAR-assured)
777 * 7.4.8 Segmentation and Reassembly (Assured Data Transfer)
780 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
784 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sssar_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
785 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sssar_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
786 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_sdu_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
787 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_sdu_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
788 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_uu_fw
,tvb
,offset
+10,2,ENC_BIG_ENDIAN
);
789 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_uu_bw
,tvb
,offset
+12,2,ENC_BIG_ENDIAN
);
791 proto_tree_add_expert_format(tree
,pinfo
,&ei_alcap_undecoded
,tvb
,offset
,14,"Not yet decoded: Q.2630.1 7.4.8");
796 static const char* dissect_fields_ssisu(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
798 * Q.2630.1 -> 7.3.12 Service specific information (SAR-unassured)
800 * 7.4.9 Segmentation and Reassembly (Unassured Data Transfer)
803 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
807 proto_tree_add_item(tree
,hf_alcap_ssisu_max_sssar_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
808 proto_tree_add_item(tree
,hf_alcap_ssisu_max_sssar_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
809 proto_tree_add_item(tree
,hf_alcap_ssisu_ted
,tvb
,offset
+6,1,ENC_BIG_ENDIAN
);
810 proto_tree_add_expert_format(tree
,pinfo
,&ei_alcap_undecoded
,tvb
,offset
,7,"Not yet decoded: Q.2630.1 7.4.9");
815 static const char* dissect_fields_none(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
817 * used for parameters that have no fields, just checks if len==0
819 * Q.2630.1 -> 7.3.13 Test connection indicator
820 * Q.2630.2 -> 7.3.20 Modify support for link characteristics
821 * Q.2630.2 -> 7.3.21 Modify support for service specific information
822 * Q.2630.3 -> 7.3.35 Transfer capability support
826 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
833 static const char* dissect_fields_ssiae(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
835 * Q.2630.2 -> 7.3.15 Service specific information (Audio Extended)
837 * 7.4.19 Audio extended service
838 * 7.4.5 Organizational unique identifier
841 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
845 proto_tree_add_item(tree
, hf_alcap_ssiae_pr_type
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
846 proto_tree_add_item(tree
, hf_alcap_ssiae_lb
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
847 proto_tree_add_item(tree
, hf_alcap_ssiae_rc
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
848 proto_tree_add_item(tree
, hf_alcap_ssiae_syn
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
850 proto_tree_add_item(tree
, hf_alcap_ssiae_pr_id
, tvb
, offset
+1,1,ENC_BIG_ENDIAN
);
852 proto_tree_add_item(tree
, hf_alcap_ssiae_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
853 proto_tree_add_item(tree
, hf_alcap_ssiae_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
854 proto_tree_add_item(tree
, hf_alcap_ssiae_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
855 proto_tree_add_item(tree
, hf_alcap_ssiae_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
856 proto_tree_add_item(tree
, hf_alcap_ssiae_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
857 proto_tree_add_item(tree
, hf_alcap_ssiae_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
858 proto_tree_add_item(tree
, hf_alcap_ssiae_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
859 proto_tree_add_item(tree
, hf_alcap_ssiae_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
861 proto_tree_add_item(tree
, hf_alcap_ssiae_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
863 proto_tree_add_item(tree
, hf_alcap_ssiae_oui
, tvb
, offset
+5,3,ENC_NA
);
868 static const char* dissect_fields_pssiae(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
870 * Q.2630.2 -> 7.3.17 Preferred service specific information (Audio Extended)
872 * 7.4.19 Audio extended service
873 * 7.4.5 Organizational unique identifier
876 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
880 proto_tree_add_item(tree
, hf_alcap_pssiae_pr_type
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
881 proto_tree_add_item(tree
, hf_alcap_pssiae_lb
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
882 proto_tree_add_item(tree
, hf_alcap_pssiae_rc
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
883 proto_tree_add_item(tree
, hf_alcap_pssiae_syn
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
885 proto_tree_add_item(tree
, hf_alcap_pssiae_pr_id
, tvb
, offset
+1,1,ENC_BIG_ENDIAN
);
887 proto_tree_add_item(tree
, hf_alcap_pssiae_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
888 proto_tree_add_item(tree
, hf_alcap_pssiae_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
889 proto_tree_add_item(tree
, hf_alcap_pssiae_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
890 proto_tree_add_item(tree
, hf_alcap_pssiae_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
891 proto_tree_add_item(tree
, hf_alcap_pssiae_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
892 proto_tree_add_item(tree
, hf_alcap_pssiae_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
893 proto_tree_add_item(tree
, hf_alcap_pssiae_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
894 proto_tree_add_item(tree
, hf_alcap_pssiae_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
896 proto_tree_add_item(tree
, hf_alcap_pssiae_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
898 proto_tree_add_item(tree
, hf_alcap_pssiae_oui
, tvb
, offset
+5,3,ENC_NA
);
903 static const char* dissect_fields_ssime(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
905 * Q.2630.2 -> 7.3.16 Service specific information (Multirate Extended)
907 * 7.4.20 Multirate extended service
910 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
914 proto_tree_add_item(tree
,hf_alcap_ssime_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
915 proto_tree_add_item(tree
,hf_alcap_ssime_lb
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
916 proto_tree_add_item(tree
,hf_alcap_ssime_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
917 proto_tree_add_item(tree
,hf_alcap_ssime_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
922 static const char* dissect_fields_pssime(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
924 * Q.2630.2 -> 7.3.18 Preferred service specific information (Multirate Extended)
926 * 7.4.20 Multirate extended service
929 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
933 proto_tree_add_item(tree
,hf_alcap_pssime_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
934 proto_tree_add_item(tree
,hf_alcap_pssime_lb
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
935 proto_tree_add_item(tree
,hf_alcap_pssime_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
936 proto_tree_add_item(tree
,hf_alcap_pssime_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
941 static const char* dissect_fields_acc(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
943 * Q.2630.3 -> 7.3.25 Automatic congestion control
945 * 7.4.23 AAL type 2 Node Automatic Congestion Level
948 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
952 proto_tree_add_item(tree
,hf_alcap_acc_level
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
957 static const char* dissect_fields_cp(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
959 * Q.2630.3 -> 7.3.26 Connection Priority
964 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
968 proto_tree_add_item(tree
,hf_alcap_cp
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
972 static const char* dissect_fields_pt(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
974 * Q.2630.2 -> 7.3.14 Path Type
976 * 7.4.21 AAL Type 2 Path QoS Codepoint
979 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
983 proto_tree_add_item(tree
,hf_alcap_pt
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
988 static const char* dissect_fields_hc(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
990 * Q.2630.3 -> 7.3.27 Hop counter
992 * 7.4.25 AAL type 2 Hop Counter
995 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
999 proto_tree_add_item(tree
,hf_alcap_hc
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
1004 static const char* dissect_fields_fbw(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1006 * Q.2630.3 -> 7.3.32 Fixed bandwidth transfer capability
1008 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1009 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1010 * 7.4.28 Maximum allowed CPS packet size
1013 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1017 proto_tree_add_item(tree
,hf_alcap_fbw_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1018 proto_tree_add_item(tree
,hf_alcap_fbw_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1019 proto_tree_add_item(tree
,hf_alcap_fbw_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1020 proto_tree_add_item(tree
,hf_alcap_fbw_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1021 proto_tree_add_item(tree
,hf_alcap_fbw_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1022 proto_tree_add_item(tree
,hf_alcap_fbw_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1027 static const char* dissect_fields_pfbw(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1029 * Q.2630.3 -> 7.3.29 Preferred fixed bandwidth transfer capability
1031 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1032 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1033 * 7.4.28 Maximum allowed CPS packet size
1036 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1040 proto_tree_add_item(tree
,hf_alcap_pfbw_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1041 proto_tree_add_item(tree
,hf_alcap_pfbw_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1042 proto_tree_add_item(tree
,hf_alcap_pfbw_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1043 proto_tree_add_item(tree
,hf_alcap_pfbw_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1044 proto_tree_add_item(tree
,hf_alcap_pfbw_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1045 proto_tree_add_item(tree
,hf_alcap_pfbw_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1050 static const char* dissect_fields_vbws(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1052 * Q.2630.3 -> 7.3.33 Variable bandwidth stringent transfer capability
1054 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1055 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1056 * 7.4.28 Maximum allowed CPS packet size
1057 * 7.4.29 Source Traffic Type
1060 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1064 proto_tree_add_item(tree
,hf_alcap_vbws_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1065 proto_tree_add_item(tree
,hf_alcap_vbws_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1066 proto_tree_add_item(tree
,hf_alcap_vbws_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1067 proto_tree_add_item(tree
,hf_alcap_vbws_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1068 proto_tree_add_item(tree
,hf_alcap_vbws_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1069 proto_tree_add_item(tree
,hf_alcap_vbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1070 proto_tree_add_item(tree
,hf_alcap_vbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1071 proto_tree_add_item(tree
,hf_alcap_vbws_stt
,tvb
,offset
+12,1,ENC_BIG_ENDIAN
);
1076 static const char* dissect_fields_pvbws(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1078 * Q.2630.3 -> 7.3.30 Preferred variable bandwidth stringent transfer capability
1080 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1081 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1082 * 7.4.28 Maximum allowed CPS packet size
1083 * 7.4.29 Source Traffic Type
1086 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1090 proto_tree_add_item(tree
,hf_alcap_pvbws_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1091 proto_tree_add_item(tree
,hf_alcap_pvbws_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1092 proto_tree_add_item(tree
,hf_alcap_pvbws_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1093 proto_tree_add_item(tree
,hf_alcap_pvbws_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1094 proto_tree_add_item(tree
,hf_alcap_pvbws_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1095 proto_tree_add_item(tree
,hf_alcap_pvbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1096 proto_tree_add_item(tree
,hf_alcap_pvbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1097 proto_tree_add_item(tree
,hf_alcap_pvbws_stt
,tvb
,offset
+12,1,ENC_BIG_ENDIAN
);
1103 static const char* dissect_fields_pvbwt(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1105 * Q.2630.3 -> 7.3.31 Preferred variable bandwidth tolerant transfer capability
1107 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1108 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1109 * 7.4.26 CPS Bit rate -> Sustainable CPS bit rate
1110 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Sustainable CPS bit rate
1111 * 7.4.28 Maximum allowed CPS packet size
1115 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1119 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1120 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1122 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1123 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1125 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_br_fw
,tvb
,offset
+10,3,ENC_BIG_ENDIAN
);
1126 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_br_bw
,tvb
,offset
+13,3,ENC_BIG_ENDIAN
);
1128 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_bucket_fw
,tvb
,offset
+16,2,ENC_BIG_ENDIAN
);
1129 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_bucket_bw
,tvb
,offset
+18,2,ENC_BIG_ENDIAN
);
1131 proto_tree_add_item(tree
,hf_alcap_pvbwt_size_fw
,tvb
,offset
+20,1,ENC_BIG_ENDIAN
);
1132 proto_tree_add_item(tree
,hf_alcap_pvbwt_size_bw
,tvb
,offset
+21,1,ENC_BIG_ENDIAN
);
1137 static const char* dissect_fields_vbwt(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1139 * Q.2630.3 -> 7.3.34 Variable bandwidth tolerant transfer capability
1141 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1142 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1143 * 7.4.26 CPS Bit rate -> Sustainable CPS bit rate
1144 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Sustainable CPS bit rate
1145 * 7.4.28 Maximum allowed CPS packet size
1148 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1152 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1153 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1155 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1156 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1158 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_br_fw
,tvb
,offset
+10,3,ENC_BIG_ENDIAN
);
1159 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_br_bw
,tvb
,offset
+13,3,ENC_BIG_ENDIAN
);
1161 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_bucket_fw
,tvb
,offset
+16,2,ENC_BIG_ENDIAN
);
1162 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_bucket_bw
,tvb
,offset
+18,2,ENC_BIG_ENDIAN
);
1164 proto_tree_add_item(tree
,hf_alcap_vbwt_size_fw
,tvb
,offset
+20,1,ENC_BIG_ENDIAN
);
1165 proto_tree_add_item(tree
,hf_alcap_vbwt_size_bw
,tvb
,offset
+21,1,ENC_BIG_ENDIAN
);
1170 static const char* dissect_fields_sut(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1172 * Q.2630.1 -> 7.3.8 Served user transport
1174 * 7.4.18 Served User Transport
1179 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1183 sut_len
= tvb_get_uint8(tvb
,offset
);
1185 proto_tree_add_item(tree
, hf_alcap_sut_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1186 proto_tree_add_item(tree
, hf_alcap_sut
, tvb
, offset
, sut_len
, ENC_NA
);
1191 typedef const char* (*alcap_parameter_dissector_t
) (packet_info
* pinfo
, tvbuff_t
*, proto_tree
*, int, int, alcap_message_info_t
*);
1193 typedef struct _alcap_param_info_t
{
1196 alcap_parameter_dissector_t dissect_fields
;
1198 } alcap_param_info_t
;
1200 static alcap_param_info_t param_infos
[] = {
1201 {-1, "Unknown", dissect_fields_unknown
, false},
1202 {-1, "CAU", dissect_fields_cau
, true},
1203 {-1, "CEID", dissect_fields_ceid
, true},
1204 {-1, "DESEA", dissect_fields_desea
, false},
1205 {-1, "DNSEA", dissect_fields_dnsea
, true},
1206 {-1, "ALC", dissect_fields_alc
, false},
1207 {-1, "OSAID", dissect_fields_osaid
, true},
1208 {-1, "SUGR", dissect_fields_sugr
, true},
1209 {-1, "SUT", dissect_fields_sut
, false},
1210 {-1, "SSIA", dissect_fields_ssia
, false},
1211 {-1, "SSIM", dissect_fields_ssim
, false},
1212 {-1, "SSISA", dissect_fields_ssisa
, false},
1213 {-1, "SSISU", dissect_fields_ssisu
, false},
1214 {-1, "TCI", dissect_fields_none
, false},
1215 {-1, "MSLC", dissect_fields_none
, false},
1216 {-1, "MSSSI", dissect_fields_none
, false},
1217 {-1, "PT", dissect_fields_pt
, false},
1218 {-1, "PLC", dissect_fields_plc
, false},
1219 {-1, "PSSIAE", dissect_fields_pssiae
, false},
1220 {-1, "PSSIME", dissect_fields_pssime
, false},
1221 {-1, "SUCI", dissect_fields_suci
, false},
1222 {-1, "ONSEA", dissect_fields_onsea
, true},
1223 {-1, "SSIAE", dissect_fields_ssiae
, false},
1224 {-1, "SSIME", dissect_fields_ssime
, false},
1225 {-1, "ACC", dissect_fields_acc
, false},
1226 {-1, "CP", dissect_fields_cp
, false},
1227 {-1, "HC", dissect_fields_hc
, false},
1228 {-1, "OESEA", dissect_fields_oesea
, false},
1229 {-1, "PFBW", dissect_fields_pfbw
, false},
1230 {-1, "PVBWS", dissect_fields_pvbws
, false},
1231 {-1, "PVBWT", dissect_fields_pvbwt
, false},
1232 {-1, "TTC", dissect_fields_none
, false},
1233 {-1, "FBW", dissect_fields_fbw
, false},
1234 {-1, "VBWS", dissect_fields_vbws
, false},
1235 {-1, "VBWT", dissect_fields_vbwt
, false},
1236 {-1, "TCS", dissect_fields_none
, false}
1239 #define GET_PARAM_INFO(id) ( array_length(param_infos) <= id ? &(param_infos[0]) : &(param_infos[id]) )
1241 static void alcap_leg_tree(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
*pinfo
, const alcap_leg_info_t
* leg
) {
1244 tree
= proto_tree_add_subtree(tree
,tvb
,0,0,ett_leg
,NULL
,"[ALCAP Leg Info]");
1247 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_dsaid
,tvb
,0,0,leg
->dsaid
);
1248 proto_item_set_generated(pi
);
1252 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_osaid
,tvb
,0,0,leg
->osaid
);
1253 proto_item_set_generated(pi
);
1257 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_pathid
,tvb
,0,0,leg
->pathid
);
1258 proto_item_set_generated(pi
);
1262 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_cid
,tvb
,0,0,leg
->cid
);
1263 proto_item_set_generated(pi
);
1267 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_sugr
,tvb
,0,0,leg
->sugr
);
1268 proto_item_set_generated(pi
);
1271 if (leg
->orig_nsap
) {
1272 pi
= proto_tree_add_string(tree
,hf_alcap_leg_onsea
,tvb
,0,0,leg
->orig_nsap
);
1273 proto_item_set_generated(pi
);
1276 if (leg
->dest_nsap
) {
1277 pi
= proto_tree_add_string(tree
,hf_alcap_leg_dnsea
,tvb
,0,0,leg
->dest_nsap
);
1278 proto_item_set_generated(pi
);
1281 if(leg
->release_cause
) {
1282 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_release_cause
,tvb
,0,0,leg
->release_cause
);
1283 proto_item_set_generated(pi
);
1284 if (leg
->release_cause
&& leg
->release_cause
!= 31)
1285 expert_add_info(pinfo
, pi
, &ei_alcap_release_cause_not31
);
1289 alcap_msg_data_t
* msg
= leg
->msgs
;
1290 proto_item
* pi_local
;
1291 proto_tree
* tree_local
= proto_tree_add_subtree(tree
,tvb
,0,0,ett_leg
,&pi_local
,"[Messages in this leg]");
1294 pi_local
= proto_tree_add_uint(tree_local
,hf_alcap_leg_frame
,tvb
,0,0,msg
->framenum
);
1295 proto_item_set_text(pi_local
,"%s in frame %u",
1296 val_to_str_ext_const(msg
->msg_type
,&msg_type_strings_ext
,"Unknown message"),
1298 proto_item_set_generated(pi_local
);
1299 } while (( msg
= msg
->next
));
1306 extern void alcap_tree_from_bearer_key(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
*pinfo
, const char* key
) {
1307 alcap_leg_info_t
* leg
= (alcap_leg_info_t
*)wmem_tree_lookup_string(legs_by_bearer
,key
,0);
1310 alcap_leg_tree(tree
,tvb
,pinfo
,leg
);
1314 #define GET_MSG_TYPE(id) ( array_length(msg_types) <= id ? &(msg_types[0]) : &(msg_types[id]) )
1316 static int dissect_alcap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
) {
1317 proto_tree
*alcap_tree
= NULL
;
1318 alcap_message_info_t
* msg_info
= wmem_new0(pinfo
->pool
, alcap_message_info_t
);
1319 int len
= tvb_reported_length(tvb
);
1322 proto_tree
* compat_tree
;
1324 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, alcap_proto_name_short
);
1327 proto_item
*alcap_item
= proto_tree_add_item(tree
, proto_alcap
, tvb
, 0, -1, ENC_NA
);
1328 alcap_tree
= proto_item_add_subtree(alcap_item
, ett_alcap
);
1331 proto_tree_add_item(alcap_tree
,hf_alcap_dsaid
,tvb
,0,4,ENC_BIG_ENDIAN
);
1332 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_msg_id
,tvb
,4,1,ENC_BIG_ENDIAN
);
1334 msg_info
->dsaid
= tvb_get_ntohl(tvb
, 0);
1335 msg_info
->msg_type
= tvb_get_uint8(tvb
, 4);
1337 expert_add_info(pinfo
, pi
, &ei_alcap_response
);
1339 col_set_str(pinfo
->cinfo
, COL_INFO
, val_to_str_const(msg_info
->msg_type
, msg_type_strings
, "Unknown Message"));
1341 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_compat
,tvb
,5,1,ENC_NA
);
1342 compat_tree
= proto_item_add_subtree(pi
,ett_compat
);
1343 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_sni
,tvb
,5,1,ENC_BIG_ENDIAN
);
1344 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_ii
,tvb
,5,1,ENC_BIG_ENDIAN
);
1345 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_sni
,tvb
,5,1,ENC_BIG_ENDIAN
);
1346 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_ii
,tvb
,5,1,ENC_BIG_ENDIAN
);
1348 len
-= ALCAP_MSG_HEADER_LEN
;
1349 offset
= ALCAP_MSG_HEADER_LEN
;
1352 unsigned param_id
= tvb_get_uint8(tvb
,offset
);
1353 unsigned param_len
= tvb_get_uint8(tvb
,offset
+2);
1354 const alcap_param_info_t
* param_info
= GET_PARAM_INFO(param_id
);
1355 proto_tree
* param_tree
;
1356 const char* colinfo_str
= NULL
;
1358 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_param_id
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
1359 param_tree
= proto_item_add_subtree(pi
,param_info
->ett
);
1361 pi
= proto_tree_add_item(param_tree
,hf_alcap_compat
,tvb
,offset
+1,1,ENC_NA
);
1362 compat_tree
= proto_item_add_subtree(pi
,ett_compat
);
1363 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_sni
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1364 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_ii
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1365 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_sni
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1366 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_ii
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1368 proto_tree_add_item(param_tree
,hf_alcap_param_len
,tvb
,offset
+2,1,ENC_BIG_ENDIAN
);
1370 if ( alcap_tree
|| param_info
->run_wo_tree
)
1371 colinfo_str
= param_info
->dissect_fields(pinfo
,tvb
,param_tree
,offset
+3,param_len
,msg_info
);
1373 col_append_fstr(pinfo
->cinfo
, COL_INFO
, " %s",colinfo_str
);
1375 len
-= 3 + param_len
;
1376 offset
+= 3 + param_len
;
1379 if (keep_persistent_info
) {
1380 alcap_leg_info_t
* leg
= NULL
;
1381 switch (msg_info
->msg_type
) {
1383 if( ! ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->osaid
) )) {
1384 leg
= wmem_new(wmem_file_scope(), alcap_leg_info_t
);
1387 leg
->osaid
= msg_info
->osaid
;
1388 leg
->pathid
= msg_info
->pathid
;
1389 leg
->cid
= msg_info
->cid
;
1390 leg
->sugr
= msg_info
->sugr
;
1391 leg
->orig_nsap
= NULL
;
1392 leg
->dest_nsap
= NULL
;
1394 if (msg_info
->orig_nsap
) {
1395 char* key
= wmem_strdup_printf(wmem_file_scope(), "%s:%.8X",msg_info
->orig_nsap
,leg
->sugr
);
1396 ascii_strdown_inplace(key
);
1398 leg
->orig_nsap
= wmem_strdup(wmem_file_scope(), msg_info
->orig_nsap
);
1400 if (!wmem_tree_lookup_string(legs_by_bearer
,key
,0)) {
1401 wmem_tree_insert_string(legs_by_bearer
,key
,leg
,0);
1405 if (msg_info
->dest_nsap
) {
1406 char* key
= wmem_strdup_printf(wmem_file_scope(), "%s:%.8X",msg_info
->dest_nsap
,leg
->sugr
);
1407 ascii_strdown_inplace(key
);
1409 leg
->dest_nsap
= wmem_strdup(wmem_file_scope(), msg_info
->dest_nsap
);
1411 if (!wmem_tree_lookup_string(legs_by_bearer
,key
,0)) {
1412 wmem_tree_insert_string(legs_by_bearer
,key
,leg
,0);
1417 leg
->release_cause
= 0;
1419 wmem_tree_insert32(legs_by_osaid
,leg
->osaid
,leg
);
1423 if(( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
) )) {
1424 leg
->dsaid
= msg_info
->osaid
;
1425 wmem_tree_insert32(legs_by_dsaid
,leg
->dsaid
,leg
);
1432 if( ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
) )
1433 || ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_dsaid
,msg_info
->dsaid
) ) ) {
1435 if(msg_info
->release_cause
)
1436 leg
->release_cause
= msg_info
->release_cause
;
1441 leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
);
1444 leg
->release_cause
= msg_info
->release_cause
;
1445 } else if (( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_dsaid
,msg_info
->dsaid
) )) {
1446 leg
->release_cause
= msg_info
->release_cause
;
1453 if (leg
!= NULL
&& ( (! leg
->msgs
) || leg
->msgs
->last
->framenum
< pinfo
->num
) ) {
1454 alcap_msg_data_t
* msg
= wmem_new(wmem_file_scope(), alcap_msg_data_t
);
1455 msg
->msg_type
= msg_info
->msg_type
;
1456 msg
->framenum
= pinfo
->num
;
1461 leg
->msgs
->last
->next
= msg
;
1466 leg
->msgs
->last
= msg
;
1470 if (tree
&& leg
) alcap_leg_tree(alcap_tree
,tvb
,pinfo
,leg
);
1472 return tvb_captured_length(tvb
);
1476 proto_register_alcap(void)
1478 module_t
*alcap_module
;
1479 expert_module_t
*expert_alcap
;
1481 static hf_register_info hf
[] = {
1483 { "DSAID", "alcap.dsaid",
1484 FT_UINT32
, BASE_HEX
, NULL
, 0,
1485 "Destination Service Association ID", HFILL
}
1488 { "Message Type", "alcap.msg_type",
1489 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &msg_type_strings_ext
, 0,
1493 { "Message Compatibility", "alcap.compat",
1494 FT_BYTES
, BASE_NONE
, NULL
, 0,
1497 { &hf_alcap_compat_pass_on_sni
,
1498 { "Pass-On SNI", "alcap.compat.pass.sni",
1499 FT_UINT8
, BASE_DEC
, VALS(send_notification
), 0x40,
1500 "Send Notification Indicator", HFILL
}
1502 { &hf_alcap_compat_pass_on_ii
,
1503 { "Pass-On II", "alcap.compat.pass.ii",
1504 FT_UINT8
, BASE_DEC
, VALS(instruction_indicator
), 0x30,
1505 "Instruction Indicator", HFILL
}
1507 { &hf_alcap_compat_general_sni
,
1508 { "General SNI", "alcap.compat.general.sni",
1509 FT_UINT8
, BASE_DEC
, VALS(send_notification
), 0x04,
1510 "Send Notification Indicator", HFILL
}
1512 { &hf_alcap_compat_general_ii
,
1513 { "General II", "alcap.compat.general.ii",
1514 FT_UINT8
, BASE_DEC
, VALS(instruction_indicator
), 0x03,
1515 "Instruction Indicator", HFILL
}
1518 { &hf_alcap_unknown
,
1519 { "Unknown Field Data", "alcap.unknown.field",
1520 FT_BYTES
, BASE_NONE
, NULL
, 0,
1524 { &hf_alcap_param_id
,
1525 { "Parameter", "alcap.param",
1526 FT_UINT8
, BASE_DEC
, VALS(msg_parm_strings
), 0,
1527 "Parameter Id", HFILL
}
1529 { &hf_alcap_param_len
,
1530 { "Length", "alcap.param.len",
1531 FT_UINT8
, BASE_DEC
, NULL
, 0,
1532 "Parameter Length", HFILL
}
1535 { &hf_alcap_cau_coding
,
1536 { "Cause Coding", "alcap.cau.coding",
1537 FT_UINT8
, BASE_DEC
, VALS(cause_coding_vals
), 0x03,
1540 { &hf_alcap_cau_value_itu
,
1541 { "Cause Value (ITU)", "alcap.cau.value",
1542 FT_UINT8
, BASE_DEC
, VALS(cause_values_itu
), 0x7f,
1545 { &hf_alcap_cau_value_non_itu
,
1546 { "Cause Value (Other)", "alcap.cau.value",
1547 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1550 { &hf_alcap_cau_diag
,
1551 { "Diagnostic", "alcap.cau.diag",
1552 FT_BYTES
, BASE_NONE
, NULL
, 0,
1555 { &hf_alcap_cau_diag_len
,
1556 { "Length", "alcap.cau.diag.len",
1557 FT_UINT8
, BASE_DEC
, NULL
, 0,
1558 "Diagnostics Length", HFILL
}
1560 { &hf_alcap_cau_diag_msg
,
1561 { "Message Identifier", "alcap.cau.diag.msg",
1562 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &msg_type_strings_ext
, 0,
1565 { &hf_alcap_cau_diag_param_id
,
1566 { "Parameter Identifier", "alcap.cau.diag.param",
1567 FT_UINT8
, BASE_DEC
, NULL
, 0,
1570 { &hf_alcap_cau_diag_field_num
,
1571 { "Field Number", "alcap.cau.diag.field_num",
1572 FT_UINT8
, BASE_DEC
, NULL
, 0,
1576 { &hf_alcap_ceid_pathid
,
1577 { "Path ID", "alcap.ceid.pathid",
1578 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(all_paths_vals
), 0,
1581 { &hf_alcap_ceid_cid
,
1582 { "CID", "alcap.ceid.cid",
1583 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(all_cids_vals
), 0,
1588 { "Address", "alcap.dnsea.addr",
1589 FT_BYTES
, BASE_NONE
, NULL
, 0,
1593 { &hf_alcap_alc_max_br_fw
,
1594 { "Maximum Forward Bit Rate", "alcap.alc.bitrate.max.fw",
1595 FT_UINT16
, BASE_DEC
, NULL
, 0,
1598 { &hf_alcap_alc_max_br_bw
,
1599 { "Maximum Backwards Bit Rate", "alcap.alc.bitrate.max.bw",
1600 FT_UINT16
, BASE_DEC
, NULL
, 0,
1603 { &hf_alcap_alc_avg_br_fw
,
1604 { "Average Forward Bit Rate", "alcap.alc.bitrate.avg.fw",
1605 FT_UINT16
, BASE_DEC
, NULL
, 0,
1608 { &hf_alcap_alc_avg_br_bw
,
1609 { "Average Backwards Bit Rate", "alcap.alc.bitrate.avg.bw",
1610 FT_UINT16
, BASE_DEC
, NULL
, 0,
1613 { &hf_alcap_alc_max_sdu_fw
,
1614 { "Maximum Forward CPS SDU Size", "alcap.alc.sdusize.max.fw",
1615 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1618 { &hf_alcap_alc_max_sdu_bw
,
1619 { "Maximum Backwards CPS SDU Size", "alcap.alc.sdusize.max.bw",
1620 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1623 { &hf_alcap_alc_avg_sdu_fw
,
1624 { "Average Forward CPS SDU Size", "alcap.alc.sdusize.avg.fw",
1625 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1628 { &hf_alcap_alc_avg_sdu_bw
,
1629 { "Average Backwards CPS SDU Size", "alcap.alc.sdusize.avg.bw",
1630 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1635 { "OSAID", "alcap.osaid",
1636 FT_UINT32
, BASE_HEX
, NULL
, 0,
1637 "Originating Service Association ID", HFILL
}
1641 { "SUGR", "alcap.sugr",
1642 FT_BYTES
, BASE_NONE
, NULL
, 0,
1643 "Served User Generated Reference", HFILL
}
1646 { &hf_alcap_sut_len
,
1647 { "SUT Length", "alcap.sut.sut_len",
1648 FT_UINT8
, BASE_HEX
, NULL
, 0,
1652 { "SUT", "alcap.sut.transport",
1653 FT_BYTES
, BASE_NONE
, NULL
, 0,
1654 "Served User Transport", HFILL
}
1657 { &hf_alcap_ssia_pr_type
,
1658 { "Profile Type", "alcap.ssia.profile.type",
1659 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1660 "I.366.2 Profile Type", HFILL
}
1662 { &hf_alcap_ssia_pr_id
,
1663 { "Profile Id", "alcap.ssia.profile.id",
1664 FT_UINT8
, BASE_DEC
, NULL
, 0,
1667 { &hf_alcap_ssia_frm
,
1668 { "Frame Mode", "alcap.ssia.frm",
1669 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1672 { &hf_alcap_ssia_cmd
,
1673 { "Circuit Mode", "alcap.ssia.cmd",
1674 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
1677 { &hf_alcap_ssia_mfr2
,
1678 { "Multi-Frequency R2", "alcap.ssia.mfr2",
1679 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x20,
1682 { &hf_alcap_ssia_mfr1
,
1683 { "Multi-Frequency R1", "alcap.ssia.mfr1",
1684 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x10,
1687 { &hf_alcap_ssia_dtmf
,
1688 { "DTMF", "alcap.ssia.dtmf",
1689 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x08,
1692 { &hf_alcap_ssia_cas
,
1693 { "CAS", "alcap.ssia.cas",
1694 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x04,
1695 "Channel Associated Signalling", HFILL
}
1697 { &hf_alcap_ssia_fax
,
1698 { "Fax", "alcap.ssia.fax",
1699 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x02,
1700 "Facsimile", HFILL
}
1702 { &hf_alcap_ssia_pcm
,
1703 { "PCM Mode", "alcap.ssia.pcm",
1704 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
1707 { &hf_alcap_ssia_max_len
,
1708 { "Max Len of FM Data", "alcap.ssia.max_fmdata_len",
1709 FT_UINT16
, BASE_DEC
, NULL
, 0,
1712 { &hf_alcap_ssia_oui
,
1713 { "OUI", "alcap.ssia.oui",
1714 FT_BYTES
, BASE_NONE
, NULL
, 0,
1715 "Organizational Unique Identifier", HFILL
}
1718 { &hf_alcap_ssim_frm
,
1719 { "Frame Mode", "alcap.ssim.frm",
1720 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1723 { &hf_alcap_ssim_mult
,
1724 { "Multiplier", "alcap.ssim.mult",
1725 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
1728 { &hf_alcap_ssim_max
,
1729 { "Max Len", "alcap.ssim.max",
1730 FT_UINT16
, BASE_DEC
, NULL
, 0,
1734 { &hf_alcap_ssisa_max_sssar_fw
,
1735 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sssar.max_len.fw",
1736 FT_UINT24
, BASE_DEC
, NULL
, 0,
1739 { &hf_alcap_ssisa_max_sssar_bw
,
1740 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sssar.max_len.bw",
1741 FT_UINT24
, BASE_DEC
, NULL
, 0,
1744 { &hf_alcap_ssisa_max_sscop_sdu_fw
,
1745 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sscop.max_sdu_len.fw",
1746 FT_UINT16
, BASE_DEC
, NULL
, 0,
1749 { &hf_alcap_ssisa_max_sscop_sdu_bw
,
1750 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sscop.max_sdu_len.bw",
1751 FT_UINT16
, BASE_DEC
, NULL
, 0,
1754 { &hf_alcap_ssisa_max_sscop_uu_fw
,
1755 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sscop.max_uu_len.fw",
1756 FT_UINT16
, BASE_DEC
, NULL
, 0,
1759 { &hf_alcap_ssisa_max_sscop_uu_bw
,
1760 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sscop.max_uu_len.bw",
1761 FT_UINT16
, BASE_DEC
, NULL
, 0,
1765 { &hf_alcap_ssisu_max_sssar_fw
,
1766 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisu.sssar.max_len.fw",
1767 FT_UINT24
, BASE_DEC
, NULL
, 0,
1770 { &hf_alcap_ssisu_max_sssar_bw
,
1771 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisu.sssar.max_len.bw",
1772 FT_UINT24
, BASE_DEC
, NULL
, 0,
1775 { &hf_alcap_ssisu_ted
,
1776 { "Transmission Error Detection", "alcap.ssisu.ted",
1777 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1782 { "QoS Codepoint", "alcap.pt.codepoint",
1783 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
1787 { &hf_alcap_plc_max_br_fw
,
1788 { "Maximum Forward Bit Rate", "alcap.plc.bitrate.max.fw",
1789 FT_UINT16
, BASE_DEC
, NULL
, 0,
1792 { &hf_alcap_plc_max_br_bw
,
1793 { "Maximum Backwards Bit Rate", "alcap.plc.bitrate.max.bw",
1794 FT_UINT16
, BASE_DEC
, NULL
, 0,
1797 { &hf_alcap_plc_avg_br_fw
,
1798 { "Average Forward Bit Rate", "alcap.plc.bitrate.avg.fw",
1799 FT_UINT16
, BASE_DEC
, NULL
, 0,
1802 { &hf_alcap_plc_avg_br_bw
,
1803 { "Average Backwards Bit Rate", "alcap.plc.bitrate.avg.bw",
1804 FT_UINT16
, BASE_DEC
, NULL
, 0,
1807 { &hf_alcap_plc_max_sdu_fw
,
1808 { "Maximum Forward CPS SDU Size", "alcap.plc.sdusize.max.fw",
1809 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1812 { &hf_alcap_plc_max_sdu_bw
,
1813 { "Maximum Backwards CPS SDU Size", "alcap.plc.sdusize.max.bw",
1814 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1817 { &hf_alcap_plc_avg_sdu_fw
,
1818 { "Maximum Forward CPS SDU Size", "alcap.plc.sdusize.max.fw",
1819 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1822 { &hf_alcap_plc_avg_sdu_bw
,
1823 { "Maximum Backwards CPS SDU Size", "alcap.plc.sdusize.max.bw",
1824 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1828 { &hf_alcap_pssiae_pr_type
,
1829 { "Profile Type", "alcap.pssiae.profile.type",
1830 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1831 "I.366.2 Profile Type", HFILL
}
1833 { &hf_alcap_pssiae_pr_id
,
1834 { "Profile Id", "alcap.pssiae.profile.id",
1835 FT_UINT8
, BASE_DEC
, NULL
, 0,
1838 { &hf_alcap_pssiae_lb
,
1839 { "Loopback", "alcap.pssiae.lb",
1840 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1843 { &hf_alcap_pssiae_rc
,
1844 { "Rate Control", "alcap.pssiae.rc",
1845 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1848 { &hf_alcap_pssiae_syn
,
1849 { "Synchronization", "alcap.pssiae.syn",
1850 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1851 "Transport of synchronization of change in SSCS operation", HFILL
}
1853 { &hf_alcap_pssiae_frm
,
1854 { "Frame Mode", "alcap.pssiae.frm",
1855 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1858 { &hf_alcap_pssiae_cmd
,
1859 { "Circuit Mode", "alcap.pssiae.cmd",
1860 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
1863 { &hf_alcap_pssiae_mfr2
,
1864 { "Multi-Frequency R2", "alcap.pssiae.mfr2",
1865 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x20,
1868 { &hf_alcap_pssiae_mfr1
,
1869 { "Multi-Frequency R1", "alcap.pssiae.mfr1",
1870 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x10,
1873 { &hf_alcap_pssiae_dtmf
,
1874 { "DTMF", "alcap.pssiae.dtmf",
1875 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x08,
1878 { &hf_alcap_pssiae_cas
,
1879 { "CAS", "alcap.pssiae.cas",
1880 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x04,
1881 "Channel Associated Signalling", HFILL
}
1883 { &hf_alcap_pssiae_fax
,
1884 { "Fax", "alcap.pssiae.fax",
1885 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x02,
1886 "Facsimile", HFILL
}
1888 { &hf_alcap_pssiae_pcm
,
1889 { "PCM Mode", "alcap.pssiae.pcm",
1890 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
1893 { &hf_alcap_pssiae_max_len
,
1894 { "Max Len of FM Data", "alcap.pssiae.max_fmdata_len",
1895 FT_UINT16
, BASE_DEC
, NULL
, 0,
1898 { &hf_alcap_pssiae_oui
,
1899 { "OUI", "alcap.pssiae.oui",
1900 FT_BYTES
, BASE_NONE
, NULL
, 0,
1901 "Organizational Unique Identifier", HFILL
}
1904 { &hf_alcap_pssime_frm
,
1905 { "Frame Mode", "alcap.pssime.frm",
1906 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1909 { &hf_alcap_pssime_lb
,
1910 { "Loopback", "alcap.pssime.lb",
1911 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
1914 { &hf_alcap_pssime_mult
,
1915 { "Multiplier", "alcap.pssime.mult",
1916 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
1919 { &hf_alcap_pssime_max
,
1920 { "Max Len", "alcap.pssime.max",
1921 FT_UINT16
, BASE_DEC
, NULL
, 0,
1926 { "SUCI", "alcap.suci",
1927 FT_UINT8
, BASE_HEX
, NULL
, 0,
1928 "Served User Correlation Id", HFILL
}
1932 { "Address", "alcap.onsea.addr",
1933 FT_BYTES
, BASE_NONE
, NULL
, 0,
1937 { &hf_alcap_ssiae_pr_type
,
1938 { "Profile Type", "alcap.ssiae.profile.type",
1939 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1940 "I.366.2 Profile Type", HFILL
}
1942 { &hf_alcap_ssiae_lb
,
1943 { "Loopback", "alcap.ssiae.lb",
1944 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1947 { &hf_alcap_ssiae_rc
,
1948 { "Rate Control", "alcap.ssiae.rc",
1949 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1952 { &hf_alcap_ssiae_syn
,
1953 { "Synchronization", "alcap.ssiae.syn",
1954 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1955 "Transport of synchronization of change in SSCS operation", HFILL
}
1957 { &hf_alcap_ssiae_pr_id
,
1958 { "Profile Id", "alcap.ssiae.profile.id",
1959 FT_UINT8
, BASE_DEC
, NULL
, 0,
1962 { &hf_alcap_ssiae_frm
,
1963 { "Frame Mode", "alcap.ssiae.frm",
1964 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
1967 { &hf_alcap_ssiae_cmd
,
1968 { "Circuit Mode", "alcap.ssiae.cmd",
1969 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
1972 { &hf_alcap_ssiae_mfr2
,
1973 { "Multi-Frequency R2", "alcap.ssiae.mfr2",
1974 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x20,
1977 { &hf_alcap_ssiae_mfr1
,
1978 { "Multi-Frequency R1", "alcap.ssiae.mfr1",
1979 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x10,
1982 { &hf_alcap_ssiae_dtmf
,
1983 { "DTMF", "alcap.ssiae.dtmf",
1984 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x08,
1987 { &hf_alcap_ssiae_cas
,
1988 { "CAS", "alcap.ssiae.cas",
1989 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x04,
1990 "Channel Associated Signalling", HFILL
}
1992 { &hf_alcap_ssiae_fax
,
1993 { "Fax", "alcap.ssiae.fax",
1994 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x02,
1995 "Facsimile", HFILL
}
1997 { &hf_alcap_ssiae_pcm
,
1998 { "PCM Mode", "alcap.ssiae.pcm",
1999 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
2002 { &hf_alcap_ssiae_max_len
,
2003 { "Max Len of FM Data", "alcap.ssiae.max_fmdata_len",
2004 FT_UINT16
, BASE_DEC
, NULL
, 0,
2007 { &hf_alcap_ssiae_oui
,
2008 { "OUI", "alcap.ssiae.oui",
2009 FT_BYTES
, BASE_NONE
, NULL
, 0,
2010 "Organizational Unique Identifier", HFILL
}
2013 { &hf_alcap_ssime_frm
,
2014 { "Frame Mode", "alcap.ssime.frm",
2015 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
2018 { &hf_alcap_ssime_lb
,
2019 { "Loopback", "alcap.ssime.lb",
2020 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
2023 { &hf_alcap_ssime_mult
,
2024 { "Multiplier", "alcap.ssime.mult",
2025 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
2028 { &hf_alcap_ssime_max
,
2029 { "Max Len", "alcap.ssime.max",
2030 FT_UINT16
, BASE_DEC
, NULL
, 0,
2034 { &hf_alcap_acc_level
,
2035 { "Congestion Level", "alcap.acc.level",
2036 FT_UINT8
, BASE_DEC
, VALS(congestion_level
), 0,
2041 { "Level", "alcap.cp.level",
2042 FT_UINT8
, BASE_DEC
, VALS(connection_priority
), 0x07,
2047 { "Codepoint", "alcap.hc.codepoint",
2048 FT_UINT8
, BASE_DEC
, NULL
, 0,
2052 { &hf_alcap_pfbw_br_fw
,
2053 { "CPS Forward Bitrate", "alcap.pfbw.bitrate.fw",
2054 FT_UINT24
, BASE_DEC
, NULL
, 0,
2057 { &hf_alcap_pfbw_br_bw
,
2058 { "CPS Backwards Bitrate", "alcap.pfbw.bitrate.bw",
2059 FT_UINT24
, BASE_DEC
, NULL
, 0,
2062 { &hf_alcap_pfbw_bucket_fw
,
2063 { "Forward CPS Bucket Size", "alcap.pfbw.bucket_size.fw",
2064 FT_UINT16
, BASE_DEC
, NULL
, 0,
2067 { &hf_alcap_pfbw_bucket_bw
,
2068 { "Backwards CPS Bucket Size", "alcap.pfbw.bucket_size.bw",
2069 FT_UINT16
, BASE_DEC
, NULL
, 0,
2072 { &hf_alcap_pfbw_size_fw
,
2073 { "Forward CPS Packet Size", "alcap.pfbw.max_size.fw",
2074 FT_UINT8
, BASE_DEC
, NULL
, 0,
2077 { &hf_alcap_pfbw_size_bw
,
2078 { "Backwards CPS Packet Size", "alcap.pfbw.max_size.bw",
2079 FT_UINT8
, BASE_DEC
, NULL
, 0,
2083 { &hf_alcap_pvbws_br_fw
,
2084 { "Peak CPS Forward Bitrate", "alcap.pvbws.bitrate.fw",
2085 FT_UINT24
, BASE_DEC
, NULL
, 0,
2088 { &hf_alcap_pvbws_br_bw
,
2089 { "Peak CPS Backwards Bitrate", "alcap.pvbws.bitrate.bw",
2090 FT_UINT24
, BASE_DEC
, NULL
, 0,
2093 { &hf_alcap_pvbws_bucket_fw
,
2094 { "Peak Forward CPS Bucket Size", "alcap.pvbws.bucket_size.fw",
2095 FT_UINT16
, BASE_DEC
, NULL
, 0,
2098 { &hf_alcap_pvbws_bucket_bw
,
2099 { "Peak Backwards CPS Bucket Size", "alcap.pvbws.bucket_size.bw",
2100 FT_UINT16
, BASE_DEC
, NULL
, 0,
2103 { &hf_alcap_pvbws_size_fw
,
2104 { "Forward CPS Packet Size", "alcap.pvbws.max_size.fw",
2105 FT_UINT8
, BASE_DEC
, NULL
, 0,
2108 { &hf_alcap_pvbws_size_bw
,
2109 { "Backwards CPS Packet Size", "alcap.pvbws.max_size.bw",
2110 FT_UINT8
, BASE_DEC
, NULL
, 0,
2113 { &hf_alcap_pvbws_stt
,
2114 { "Source Traffic Type", "alcap.pvbws.stt",
2115 FT_UINT8
, BASE_DEC
, NULL
, 0,
2119 { &hf_alcap_pvbwt_peak_br_fw
,
2120 { "Peak CPS Forward Bitrate", "alcap.pvbwt.bitrate.fw",
2121 FT_UINT24
, BASE_DEC
, NULL
, 0,
2124 { &hf_alcap_pvbwt_peak_br_bw
,
2125 { "Peak CPS Backwards Bitrate", "alcap.pvbwt.bitrate.bw",
2126 FT_UINT24
, BASE_DEC
, NULL
, 0,
2129 { &hf_alcap_pvbwt_peak_bucket_fw
,
2130 { "Peak Forward CPS Bucket Size", "alcap.pvbwt.bucket_size.fw",
2131 FT_UINT16
, BASE_DEC
, NULL
, 0,
2134 { &hf_alcap_pvbwt_peak_bucket_bw
,
2135 { "Peak Backwards CPS Bucket Size", "alcap.pvbwt.bucket_size.bw",
2136 FT_UINT16
, BASE_DEC
, NULL
, 0,
2139 { &hf_alcap_pvbwt_sust_br_fw
,
2140 { "Sustainable CPS Forward Bitrate", "alcap.pvbwt.bitrate.fw",
2141 FT_UINT24
, BASE_DEC
, NULL
, 0,
2144 { &hf_alcap_pvbwt_sust_br_bw
,
2145 { "Sustainable CPS Backwards Bitrate", "alcap.pvbwt.bitrate.bw",
2146 FT_UINT24
, BASE_DEC
, NULL
, 0,
2149 { &hf_alcap_pvbwt_sust_bucket_fw
,
2150 { "Sustainable Forward CPS Bucket Size", "alcap.pvbwt.bucket_size.fw",
2151 FT_UINT16
, BASE_DEC
, NULL
, 0,
2154 { &hf_alcap_pvbwt_sust_bucket_bw
,
2155 { "Sustainable Backwards CPS Bucket Size", "alcap.pvbwt.bucket_size.bw",
2156 FT_UINT16
, BASE_DEC
, NULL
, 0,
2159 { &hf_alcap_pvbwt_size_fw
,
2160 { "Forward CPS Packet Size", "alcap.pvbwt.max_size.fw",
2161 FT_UINT8
, BASE_DEC
, NULL
, 0,
2164 { &hf_alcap_pvbwt_size_bw
,
2165 { "Backwards CPS Packet Size", "alcap.pvbwt.max_size.bw",
2166 FT_UINT8
, BASE_DEC
, NULL
, 0,
2170 { &hf_alcap_fbw_br_fw
,
2171 { "CPS Forward Bitrate", "alcap.fbw.bitrate.fw",
2172 FT_UINT24
, BASE_DEC
, NULL
, 0,
2175 { &hf_alcap_fbw_br_bw
,
2176 { "CPS Backwards Bitrate", "alcap.fbw.bitrate.bw",
2177 FT_UINT24
, BASE_DEC
, NULL
, 0,
2180 { &hf_alcap_fbw_bucket_fw
,
2181 { "Forward CPS Bucket Size", "alcap.fbw.bucket_size.fw",
2182 FT_UINT16
, BASE_DEC
, NULL
, 0,
2185 { &hf_alcap_fbw_bucket_bw
,
2186 { "Backwards CPS Bucket Size", "alcap.fbw.bucket_size.bw",
2187 FT_UINT16
, BASE_DEC
, NULL
, 0,
2190 { &hf_alcap_fbw_size_fw
,
2191 { "Forward CPS Packet Size", "alcap.fbw.max_size.fw",
2192 FT_UINT8
, BASE_DEC
, NULL
, 0,
2195 { &hf_alcap_fbw_size_bw
,
2196 { "Backwards CPS Packet Size", "alcap.fbw.max_size.bw",
2197 FT_UINT8
, BASE_DEC
, NULL
, 0,
2201 { &hf_alcap_vbws_br_fw
,
2202 { "CPS Forward Bitrate", "alcap.vbws.bitrate.fw",
2203 FT_UINT24
, BASE_DEC
, NULL
, 0,
2206 { &hf_alcap_vbws_br_bw
,
2207 { "CPS Backwards Bitrate", "alcap.vbws.bitrate.bw",
2208 FT_UINT24
, BASE_DEC
, NULL
, 0,
2211 { &hf_alcap_vbws_bucket_fw
,
2212 { "Forward CPS Bucket Size", "alcap.vbws.bucket_size.fw",
2213 FT_UINT16
, BASE_DEC
, NULL
, 0,
2216 { &hf_alcap_vbws_bucket_bw
,
2217 { "Backwards CPS Bucket Size", "alcap.vbws.bucket_size.bw",
2218 FT_UINT16
, BASE_DEC
, NULL
, 0,
2221 { &hf_alcap_vbws_size_fw
,
2222 { "Forward CPS Packet Size", "alcap.vbws.max_size.fw",
2223 FT_UINT8
, BASE_DEC
, NULL
, 0,
2226 { &hf_alcap_vbws_size_bw
,
2227 { "Backwards CPS Packet Size", "alcap.vbws.max_size.bw",
2228 FT_UINT8
, BASE_DEC
, NULL
, 0,
2231 { &hf_alcap_vbws_stt
,
2232 { "Source Traffic Type", "alcap.vbws.stt",
2233 FT_UINT8
, BASE_DEC
, NULL
, 0,
2237 { &hf_alcap_vbwt_peak_br_fw
,
2238 { "Peak CPS Forward Bitrate", "alcap.vbwt.bitrate.fw",
2239 FT_UINT24
, BASE_DEC
, NULL
, 0,
2242 { &hf_alcap_vbwt_peak_br_bw
,
2243 { "Peak CPS Backwards Bitrate", "alcap.vbwt.bitrate.bw",
2244 FT_UINT24
, BASE_DEC
, NULL
, 0,
2247 { &hf_alcap_vbwt_peak_bucket_fw
,
2248 { "Peak Forward CPS Bucket Size", "alcap.vbwt.bucket_size.fw",
2249 FT_UINT16
, BASE_DEC
, NULL
, 0,
2252 { &hf_alcap_vbwt_peak_bucket_bw
,
2253 { "Peak Backwards CPS Bucket Size", "alcap.vbwt.bucket_size.bw",
2254 FT_UINT16
, BASE_DEC
, NULL
, 0,
2257 { &hf_alcap_vbwt_sust_br_fw
,
2258 { "Sustainable CPS Forward Bitrate", "alcap.vbwt.bitrate.fw",
2259 FT_UINT24
, BASE_DEC
, NULL
, 0,
2262 { &hf_alcap_vbwt_sust_br_bw
,
2263 { "Sustainable CPS Backwards Bitrate", "alcap.vbwt.bitrate.bw",
2264 FT_UINT24
, BASE_DEC
, NULL
, 0,
2267 { &hf_alcap_vbwt_sust_bucket_fw
,
2268 { "Sustainable Forward CPS Bucket Size", "alcap.vbwt.bucket_size.fw",
2269 FT_UINT16
, BASE_DEC
, NULL
, 0,
2272 { &hf_alcap_vbwt_sust_bucket_bw
,
2273 { "Sustainable Backwards CPS Bucket Size", "alcap.vbwt.bucket_size.bw",
2274 FT_UINT16
, BASE_DEC
, NULL
, 0,
2277 { &hf_alcap_vbwt_size_fw
,
2278 { "Forward CPS Packet Size", "alcap.vbwt.max_size.fw",
2279 FT_UINT8
, BASE_DEC
, NULL
, 0,
2282 { &hf_alcap_vbwt_size_bw
,
2283 { "Backwards CPS Packet Size", "alcap.vbwt.max_size.bw",
2284 FT_UINT8
, BASE_DEC
, NULL
, 0,
2288 { &hf_alcap_leg_osaid
,
2289 { "Leg's ERQ OSA id", "alcap.leg.osaid",
2290 FT_UINT32
, BASE_HEX
, NULL
, 0,
2293 { &hf_alcap_leg_dsaid
,
2294 { "Leg's ECF OSA id", "alcap.leg.dsaid",
2295 FT_UINT32
, BASE_HEX
, NULL
, 0,
2298 { &hf_alcap_leg_pathid
,
2299 { "Leg's path id", "alcap.leg.pathid",
2300 FT_UINT32
, BASE_DEC
, NULL
, 0,
2303 { &hf_alcap_leg_cid
,
2304 { "Leg's channel id", "alcap.leg.cid",
2305 FT_UINT32
, BASE_DEC
, NULL
, 0,
2308 { &hf_alcap_leg_sugr
,
2309 { "Leg's SUGR", "alcap.leg.sugr",
2310 FT_UINT32
, BASE_HEX
, NULL
, 0,
2313 { &hf_alcap_leg_dnsea
,
2314 { "Leg's destination NSAP", "alcap.leg.dnsea",
2315 FT_STRING
, BASE_NONE
, NULL
, 0,
2318 { &hf_alcap_leg_onsea
,
2319 { "Leg's originating NSAP", "alcap.leg.onsea",
2320 FT_STRING
, BASE_NONE
, NULL
, 0,
2323 { &hf_alcap_leg_frame
,
2324 { "a message of this leg", "alcap.leg.msg",
2325 FT_FRAMENUM
, BASE_NONE
, NULL
, 0,
2328 { &hf_alcap_leg_release_cause
,
2329 { "Leg's cause value in REL", "alcap.leg.cause",
2330 FT_UINT8
, BASE_DEC
, VALS(cause_values_itu
), 0,
2341 ¶m_infos
[0].ett
,
2342 ¶m_infos
[1].ett
,
2343 ¶m_infos
[2].ett
,
2344 ¶m_infos
[3].ett
,
2345 ¶m_infos
[4].ett
,
2346 ¶m_infos
[5].ett
,
2347 ¶m_infos
[6].ett
,
2348 ¶m_infos
[7].ett
,
2349 ¶m_infos
[8].ett
,
2350 ¶m_infos
[9].ett
,
2351 ¶m_infos
[10].ett
,
2352 ¶m_infos
[11].ett
,
2353 ¶m_infos
[12].ett
,
2354 ¶m_infos
[13].ett
,
2355 ¶m_infos
[14].ett
,
2356 ¶m_infos
[15].ett
,
2357 ¶m_infos
[16].ett
,
2358 ¶m_infos
[17].ett
,
2359 ¶m_infos
[18].ett
,
2360 ¶m_infos
[19].ett
,
2361 ¶m_infos
[20].ett
,
2362 ¶m_infos
[21].ett
,
2363 ¶m_infos
[22].ett
,
2364 ¶m_infos
[23].ett
,
2365 ¶m_infos
[24].ett
,
2366 ¶m_infos
[25].ett
,
2367 ¶m_infos
[26].ett
,
2368 ¶m_infos
[27].ett
,
2369 ¶m_infos
[28].ett
,
2370 ¶m_infos
[29].ett
,
2371 ¶m_infos
[30].ett
,
2372 ¶m_infos
[31].ett
,
2373 ¶m_infos
[32].ett
,
2374 ¶m_infos
[33].ett
,
2375 ¶m_infos
[34].ett
,
2376 ¶m_infos
[35].ett
,
2379 static ei_register_info ei
[] = {
2380 { &ei_alcap_parameter_field_bad_length
, { "alcap.parameter_field_bad_length", PI_MALFORMED
, PI_WARN
, "Wrong length for parameter fields", EXPFILL
}},
2381 { &ei_alcap_undecoded
, { "alcap.undecoded", PI_UNDECODED
, PI_WARN
, "Undecoded", EXPFILL
}},
2382 { &ei_alcap_release_cause_not31
, { "alcap.leg.cause.not31", PI_RESPONSE_CODE
, PI_WARN
, "Leg Release cause != 31", EXPFILL
}},
2383 { &ei_alcap_abnormal_release
, { "alcap.abnormal_release", PI_RESPONSE_CODE
, PI_WARN
, "Abnormal Release", EXPFILL
}},
2384 { &ei_alcap_response
, { "alcap.response", PI_RESPONSE_CODE
, PI_NOTE
, "Response", EXPFILL
}},
2387 proto_alcap
= proto_register_protocol(alcap_proto_name
, alcap_proto_name_short
, "alcap");
2389 alcap_handle
= register_dissector("alcap", dissect_alcap
, proto_alcap
);
2391 proto_register_field_array(proto_alcap
, hf
, array_length(hf
));
2392 proto_register_subtree_array(ett
, array_length(ett
));
2393 expert_alcap
= expert_register_protocol(proto_alcap
);
2394 expert_register_field_array(expert_alcap
, ei
, array_length(ei
));
2396 alcap_module
= prefs_register_protocol(proto_alcap
, NULL
);
2398 prefs_register_bool_preference(alcap_module
, "leg_info",
2399 "Keep Leg Information",
2400 "Whether persistent call leg information is to be kept",
2401 &keep_persistent_info
);
2403 legs_by_dsaid
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2404 legs_by_osaid
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2405 legs_by_bearer
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2410 proto_reg_handoff_alcap(void)
2412 dissector_add_uint("mtp3.service_indicator", MTP_SI_AAL2
, alcap_handle
);
2416 * Editor modelines - https://www.wireshark.org/tools/modelines.html
2421 * indent-tabs-mode: nil
2424 * vi: set shiftwidth=4 tabstop=8 expandtab:
2425 * :indentSize=4:tabSize=8:noTabs=true: