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>
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License
19 * as published by the Free Software Foundation; either version 2
20 * of the License, or (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
36 #include <wsutil/str_util.h>
38 #include <epan/packet.h>
39 #include <epan/wmem/wmem.h>
40 #include <epan/prefs.h>
41 #include "packet-alcap.h"
42 #include "packet-mtp3.h"
43 #include <epan/dissectors/packet-isup.h>
44 #include <epan/expert.h>
46 void proto_register_alcap(void);
47 void proto_reg_handoff_alcap(void);
49 #define ALCAP_MSG_HEADER_LEN 6
50 #define ALCAP_PARM_HEADER_LEN 3
51 #define FIELD_NSAP_ADDRESS_LEN 20
53 static const value_string msg_type_strings
[] = {
54 { 1, "Block confirm (BLC)" },
55 { 2, "Block request (BLO)" },
56 { 3, "Confusion (CFN)" },
57 { 4, "Establish confirm (ECF)" },
58 { 5, "Establish request (ERQ)" },
59 { 6, "Release confirm (RLC)" },
60 { 7, "Release request (REL)" },
61 { 8, "Reset confirm (RSC)" },
62 { 9, "Reset request (RES)" },
63 { 10, "Unblock confirm (UBC)" },
64 { 11, "Unblock request (UBL)" },
65 { 12, "Modify Ack (MOA)" },
66 { 13, "Modify Reject (MOR)" },
67 { 14, "Modify Request (MOD)" },
70 static value_string_ext msg_type_strings_ext
= VALUE_STRING_EXT_INIT(msg_type_strings
);
72 static const value_string send_notification
[] = {
73 { 0, "Do Not Send Notification"},
74 { 1, "Send Notification" },
78 static const value_string instruction_indicator
[] = {
79 { 0, "Pass On Message or Parameter"},
80 { 1, "Discard Parameter" },
81 { 2, "Discard Message" },
82 { 3, "Release Connection" },
86 static const value_string msg_parm_strings
[] = {
88 { 2, "Connection element identifier (CEID)" },
89 { 3, "Destination E.164 service endpoint address (DESEA)" },
90 { 4, "Destination NSAP service endpoint address (DNSEA)" },
91 { 5, "Link characteristics (ALC)" },
92 { 6, "Originating signalling association identifier (OSAID)" },
93 { 7, "Served user generated reference (SUGR)" },
94 { 8, "Served user transport (SUT)" },
95 { 9, "Service specific information (audio) (SSIA)" },
96 { 10, "Service specific information (multirate) (SSIM)" },
97 { 11, "Service specific information (SAR-assured) (SSISA)" },
98 { 12, "Service specific information (SAR-unassured) (SSISU)" },
99 { 13, "Test connection identifier (TCI)" },
100 { 14, "Modify Support for Link Characteristics (MSLC)" },
101 { 15, "Modify Support for Service Specific Information (MSSSI)" },
102 { 16, "Path Type (PT)" },
103 { 17, "Preferred Link Characteristics (PLC)" },
104 { 18, "Preferred Service Specific Information - Audio Extended (PSSIAE)" },
105 { 19, "Preferred Service Specific Information - Multirate Extended (PSSIME)" },
106 { 20, "Served User Correlation ID (SUCI)" },
107 { 21, "Origination NSAP Service Endpoint Address (ONSEA)" },
108 { 22, "Service Specific Information - Audio Extended (SSIAE)" },
109 { 23, "Service Specific Information - Multirate Extended (SSIME)" },
110 { 24, "Automatic Congestion Control (ACC)" },
111 { 25, "Connection Priority (CP)" },
112 { 26, "Hop Counter (HC)" },
113 { 27, "Origination E.164 Service Endpoint Address (OESEA)" },
114 { 28, "Preferred Transfer Capability - FBW (PFBW)" },
115 { 29, "Preferred Transfer Capability - VBWS (PVBWS)" },
116 { 30, "Preferred Transfer Capability - VBWT (PVBWT)" },
117 { 31, "TAR Controlled Connection (TCC)" },
118 { 32, "Transfer Capability (FBW)" },
119 { 33, "Transfer Capability (VBWS)" },
120 { 34, "Transfer Capability (VBWT)" },
121 { 35, "Transfer Capability Support (TCS)" },
126 static const value_string enabled_disabled
[] = {
132 static const value_string alaw_ulaw
[] = {
138 static const value_string cause_coding_vals
[] = {
139 {0, "ITU (Q.850 - Q.2610)"},
147 static const value_string cause_values_itu
[] = {
148 { 1, "Unallocated (unassigned) number"},
149 { 3, "No route to destination"},
150 { 31, "Normal, unspecified"},
151 { 34, "No circuit/channel available"},
152 { 38, "Network out of order"},
153 { 41, "Temporary failure"},
154 { 42, "Switching equipment congestion"},
155 { 44, "Requested circuit/channel not available"},
156 { 47, "Resource unavailable, unspecified"},
157 { 93, "AAL parameters cannot be supported"},
158 { 95, "Invalid message, unspecified"},
159 { 96, "Mandatory information element is missing"},
160 { 97, "Message type non-existent or not implemented"},
161 { 99, "Information element/parameter non-existent or not implemented"},
162 { 100, "Invalid information element contents"},
163 { 102, "Recovery on timer expiry"},
164 { 110, "Message with unrecognized parameter, discarded"},
165 { 111, "Protocol error, unspecified"},
169 static const value_string audio_profile_type
[] = {
170 { 0, "From I.366.2" },
171 { 1, "From Organization" },
177 static const value_string congestion_level
[] = {
179 { 1, "Congestion Level 1 exceeded" },
180 { 2, "Congestion Level 2 exceeded" },
184 static const value_string connection_priority
[] = {
185 { 0, "Level 1 (Highest)" },
189 { 4, "Level 5 (Lowest)" },
198 static const char *alcap_proto_name
= "AAL type 2 signalling protocol (Q.2630)";
199 static const char *alcap_proto_name_short
= "ALCAP";
201 /* Initialize the subtree pointers */
202 static gint ett_alcap
= -1;
203 static gint ett_leg
= -1;
204 static gint ett_compat
= -1;
205 static gint ett_cau_diag
= -1;
207 /* Initialize the protocol and registered fields */
208 static int proto_alcap
= -1;
210 static int hf_alcap_dsaid
= -1;
211 static int hf_alcap_msg_id
= -1;
212 static int hf_alcap_compat
= -1;
213 static int hf_alcap_compat_pass_on_sni
= -1;
214 static int hf_alcap_compat_pass_on_ii
= -1;
215 static int hf_alcap_compat_general_sni
= -1;
216 static int hf_alcap_compat_general_ii
= -1;
218 static int hf_alcap_param_id
= -1;
219 static int hf_alcap_param_len
= -1;
221 static int hf_alcap_unknown
= -1;
223 static int hf_alcap_cau_coding
= -1;
224 static int hf_alcap_cau_value_itu
= -1;
225 static int hf_alcap_cau_value_non_itu
= -1;
226 static int hf_alcap_cau_diag
= -1;
227 static int hf_alcap_cau_diag_len
= -1;
228 static int hf_alcap_cau_diag_msg
= -1;
229 static int hf_alcap_cau_diag_param_id
= -1;
230 static int hf_alcap_cau_diag_field_num
= -1;
232 static int hf_alcap_ceid_pathid
= -1;
233 static int hf_alcap_ceid_cid
= -1;
235 static int hf_alcap_dnsea
= -1;
237 static int hf_alcap_alc_max_br_fw
= -1;
238 static int hf_alcap_alc_max_br_bw
= -1;
239 static int hf_alcap_alc_avg_br_fw
= -1;
240 static int hf_alcap_alc_avg_br_bw
= -1;
241 static int hf_alcap_alc_max_sdu_fw
= -1;
242 static int hf_alcap_alc_max_sdu_bw
= -1;
243 static int hf_alcap_alc_avg_sdu_fw
= -1;
244 static int hf_alcap_alc_avg_sdu_bw
= -1;
246 static int hf_alcap_osaid
= -1;
248 static int hf_alcap_sugr
= -1;
250 static int hf_alcap_sut_len
= -1;
251 static int hf_alcap_sut
= -1;
253 static int hf_alcap_ssia_pr_type
= -1;
254 static int hf_alcap_ssia_pr_id
= -1;
255 static int hf_alcap_ssia_frm
= -1;
256 static int hf_alcap_ssia_cmd
= -1;
257 static int hf_alcap_ssia_mfr2
= -1;
258 static int hf_alcap_ssia_mfr1
= -1;
259 static int hf_alcap_ssia_dtmf
= -1;
260 static int hf_alcap_ssia_cas
= -1;
261 static int hf_alcap_ssia_fax
= -1;
262 static int hf_alcap_ssia_pcm
= -1;
263 static int hf_alcap_ssia_max_len
= -1;
264 static int hf_alcap_ssia_oui
= -1;
266 static int hf_alcap_ssim_frm
= -1;
267 static int hf_alcap_ssim_mult
= -1;
268 static int hf_alcap_ssim_max
= -1;
270 static int hf_alcap_ssisa_max_sssar_fw
= -1;
271 static int hf_alcap_ssisa_max_sssar_bw
= -1;
272 static int hf_alcap_ssisa_max_sscop_sdu_fw
= -1;
273 static int hf_alcap_ssisa_max_sscop_sdu_bw
= -1;
274 static int hf_alcap_ssisa_max_sscop_uu_fw
= -1;
275 static int hf_alcap_ssisa_max_sscop_uu_bw
= -1;
277 static int hf_alcap_ssisu_max_sssar_fw
= -1;
278 static int hf_alcap_ssisu_max_sssar_bw
= -1;
279 static int hf_alcap_ssisu_ted
= -1;
281 static int hf_alcap_pt
= -1;
283 static int hf_alcap_plc_max_br_fw
= -1;
284 static int hf_alcap_plc_max_br_bw
= -1;
285 static int hf_alcap_plc_avg_br_fw
= -1;
286 static int hf_alcap_plc_avg_br_bw
= -1;
287 static int hf_alcap_plc_max_sdu_fw
= -1;
288 static int hf_alcap_plc_max_sdu_bw
= -1;
289 static int hf_alcap_plc_avg_sdu_fw
= -1;
290 static int hf_alcap_plc_avg_sdu_bw
= -1;
292 static int hf_alcap_pssiae_pr_type
= -1;
293 static int hf_alcap_pssiae_pr_id
= -1;
294 static int hf_alcap_pssiae_lb
= -1;
295 static int hf_alcap_pssiae_rc
= -1;
296 static int hf_alcap_pssiae_syn
= -1;
297 static int hf_alcap_pssiae_frm
= -1;
298 static int hf_alcap_pssiae_cmd
= -1;
299 static int hf_alcap_pssiae_mfr2
= -1;
300 static int hf_alcap_pssiae_mfr1
= -1;
301 static int hf_alcap_pssiae_dtmf
= -1;
302 static int hf_alcap_pssiae_cas
= -1;
303 static int hf_alcap_pssiae_fax
= -1;
304 static int hf_alcap_pssiae_pcm
= -1;
305 static int hf_alcap_pssiae_max_len
= -1;
306 static int hf_alcap_pssiae_oui
= -1;
308 static int hf_alcap_pssime_frm
= -1;
309 static int hf_alcap_pssime_lb
= -1;
310 static int hf_alcap_pssime_mult
= -1;
311 static int hf_alcap_pssime_max
= -1;
313 static int hf_alcap_suci
= -1;
315 static int hf_alcap_onsea
= -1;
317 static int hf_alcap_ssiae_pr_type
= -1;
318 static int hf_alcap_ssiae_pr_id
= -1;
319 static int hf_alcap_ssiae_lb
= -1;
320 static int hf_alcap_ssiae_rc
= -1;
321 static int hf_alcap_ssiae_syn
= -1;
322 static int hf_alcap_ssiae_frm
= -1;
323 static int hf_alcap_ssiae_cmd
= -1;
324 static int hf_alcap_ssiae_mfr2
= -1;
325 static int hf_alcap_ssiae_mfr1
= -1;
326 static int hf_alcap_ssiae_dtmf
= -1;
327 static int hf_alcap_ssiae_cas
= -1;
328 static int hf_alcap_ssiae_fax
= -1;
329 static int hf_alcap_ssiae_pcm
= -1;
330 static int hf_alcap_ssiae_max_len
= -1;
331 static int hf_alcap_ssiae_oui
= -1;
333 static int hf_alcap_ssime_frm
= -1;
334 static int hf_alcap_ssime_lb
= -1;
335 static int hf_alcap_ssime_mult
= -1;
336 static int hf_alcap_ssime_max
= -1;
338 static int hf_alcap_acc_level
= -1;
340 static int hf_alcap_cp
= -1;
342 static int hf_alcap_hc
= -1;
344 static int hf_alcap_pfbw_br_fw
= -1;
345 static int hf_alcap_pfbw_br_bw
= -1;
346 static int hf_alcap_pfbw_bucket_fw
= -1;
347 static int hf_alcap_pfbw_bucket_bw
= -1;
348 static int hf_alcap_pfbw_size_fw
= -1;
349 static int hf_alcap_pfbw_size_bw
= -1;
351 static int hf_alcap_pvbws_br_fw
= -1;
352 static int hf_alcap_pvbws_br_bw
= -1;
353 static int hf_alcap_pvbws_bucket_fw
= -1;
354 static int hf_alcap_pvbws_bucket_bw
= -1;
355 static int hf_alcap_pvbws_size_fw
= -1;
356 static int hf_alcap_pvbws_size_bw
= -1;
357 static int hf_alcap_pvbws_stt
= -1;
359 static int hf_alcap_pvbwt_peak_br_fw
= -1;
360 static int hf_alcap_pvbwt_peak_br_bw
= -1;
361 static int hf_alcap_pvbwt_peak_bucket_fw
= -1;
362 static int hf_alcap_pvbwt_peak_bucket_bw
= -1;
363 static int hf_alcap_pvbwt_sust_br_fw
= -1;
364 static int hf_alcap_pvbwt_sust_br_bw
= -1;
365 static int hf_alcap_pvbwt_sust_bucket_fw
= -1;
366 static int hf_alcap_pvbwt_sust_bucket_bw
= -1;
367 static int hf_alcap_pvbwt_size_fw
= -1;
368 static int hf_alcap_pvbwt_size_bw
= -1;
370 static int hf_alcap_fbw_br_fw
= -1;
371 static int hf_alcap_fbw_br_bw
= -1;
372 static int hf_alcap_fbw_bucket_fw
= -1;
373 static int hf_alcap_fbw_bucket_bw
= -1;
374 static int hf_alcap_fbw_size_fw
= -1;
375 static int hf_alcap_fbw_size_bw
= -1;
377 static int hf_alcap_vbws_br_fw
= -1;
378 static int hf_alcap_vbws_br_bw
= -1;
379 static int hf_alcap_vbws_bucket_fw
= -1;
380 static int hf_alcap_vbws_bucket_bw
= -1;
381 static int hf_alcap_vbws_size_fw
= -1;
382 static int hf_alcap_vbws_size_bw
= -1;
383 static int hf_alcap_vbws_stt
= -1;
385 static int hf_alcap_vbwt_peak_br_fw
= -1;
386 static int hf_alcap_vbwt_peak_br_bw
= -1;
387 static int hf_alcap_vbwt_peak_bucket_fw
= -1;
388 static int hf_alcap_vbwt_peak_bucket_bw
= -1;
389 static int hf_alcap_vbwt_sust_br_fw
= -1;
390 static int hf_alcap_vbwt_sust_br_bw
= -1;
391 static int hf_alcap_vbwt_sust_bucket_fw
= -1;
392 static int hf_alcap_vbwt_sust_bucket_bw
= -1;
393 static int hf_alcap_vbwt_size_fw
= -1;
394 static int hf_alcap_vbwt_size_bw
= -1;
397 static int hf_alcap_leg_osaid
= -1;
398 static int hf_alcap_leg_dsaid
= -1;
399 static int hf_alcap_leg_pathid
= -1;
400 static int hf_alcap_leg_cid
= -1;
401 static int hf_alcap_leg_sugr
= -1;
402 static int hf_alcap_leg_dnsea
= -1;
403 static int hf_alcap_leg_onsea
= -1;
404 static int hf_alcap_leg_frame
= -1;
405 static int hf_alcap_leg_release_cause
= -1;
407 static expert_field ei_alcap_parameter_field_bad_length
= EI_INIT
;
408 static expert_field ei_alcap_undecoded
= EI_INIT
;
409 static expert_field ei_alcap_release_cause_not31
= EI_INIT
;
410 static expert_field ei_alcap_abnormal_release
= EI_INIT
;
411 static expert_field ei_alcap_response
= EI_INIT
;
413 static gboolean keep_persistent_info
= TRUE
;
415 static wmem_tree_t
* legs_by_dsaid
= NULL
;
416 static wmem_tree_t
* legs_by_osaid
= NULL
;
417 static wmem_tree_t
* legs_by_bearer
= NULL
;
419 static const gchar
* dissect_fields_unknown(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
420 proto_item
* pi
= proto_tree_add_item(tree
,hf_alcap_unknown
,tvb
,offset
,len
,ENC_NA
);
421 expert_add_info(pinfo
, pi
, &ei_alcap_undecoded
);
425 static const gchar
* dissect_fields_cau(packet_info
* pinfo
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
427 * Q.2630.1 -> 7.3.1 Cause
434 const gchar
* ret_str
;
438 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
442 msg_info
->release_cause
= tvb_get_guint8(tvb
, offset
+1) & 0x7f;
444 coding
= tvb_get_guint8(tvb
, offset
) & 0x3;
446 proto_tree_add_item(tree
, hf_alcap_cau_coding
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
449 pi
= proto_tree_add_item(tree
, hf_alcap_cau_value_itu
, tvb
, offset
+1, 1, ENC_BIG_ENDIAN
);
451 if ( msg_info
->release_cause
&& msg_info
->release_cause
!= 31 )
452 expert_add_info(pinfo
, pi
, &ei_alcap_abnormal_release
);
454 ret_str
= val_to_str(msg_info
->release_cause
, cause_values_itu
, "Unknown(%u)");
456 proto_tree_add_item(tree
, hf_alcap_cau_value_non_itu
, tvb
, offset
+1 , 1, ENC_BIG_ENDIAN
);
457 ret_str
= wmem_strdup_printf(wmem_packet_scope(), "%u", msg_info
->release_cause
);
460 if (!tree
) return ret_str
;
465 int diag_len
= tvb_get_guint8(tvb
,offset
);
467 pi
= proto_tree_add_item(tree
,hf_alcap_cau_diag
, tvb
, offset
,len
-2,ENC_NA
);
468 tree
= proto_item_add_subtree(pi
,ett_cau_diag
);
470 proto_tree_add_item(tree
, hf_alcap_cau_diag_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
473 switch (msg_info
->release_cause
) {
477 proto_tree_add_item(tree
, hf_alcap_cau_diag_msg
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
479 while(diag_len
>= 2) {
480 proto_tree_add_item(tree
, hf_alcap_cau_diag_param_id
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
481 proto_tree_add_item(tree
, hf_alcap_cau_diag_field_num
, tvb
, ++offset
, 1, ENC_BIG_ENDIAN
);
486 /* XXX - TODO Q.2610 */
487 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_undecoded
, tvb
, offset
, diag_len
);
495 static const gchar
* dissect_fields_ceid(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info
) {
497 * Q.2630.1 -> 7.3.2 Connection Element Identifier
499 * 7.4.3 Path Identifier
500 * 7.4.4 Channel Identifier
505 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
509 pi
= proto_tree_add_item(tree
,hf_alcap_ceid_pathid
,tvb
,offset
,4,ENC_BIG_ENDIAN
);
511 msg_info
->pathid
= tvb_get_ntohl(tvb
,offset
);
512 msg_info
->cid
= tvb_get_guint8(tvb
,offset
+4);
514 if (msg_info
->pathid
== 0) {
515 proto_item_append_text(pi
," (All Paths in association)");
516 return "Path: 0 (All Paths)";
519 pi
= proto_tree_add_item(tree
,hf_alcap_ceid_cid
,tvb
,offset
+4,1,ENC_BIG_ENDIAN
);
521 if (msg_info
->cid
== 0) {
522 proto_item_append_text(pi
," (All CIDs in the Path)");
523 return wmem_strdup_printf(wmem_packet_scope(), "Path: %u CID: 0 (Every CID)",msg_info
->pathid
);
525 return wmem_strdup_printf(wmem_packet_scope(), "Path: %u CID: %u",msg_info
->pathid
,msg_info
->cid
);
529 static const gchar
* dissect_fields_desea(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
531 * Q.2630.1 -> 7.3.3 Destination E.164 service endpoint address
533 * 7.4.13 Nature of Address
534 * 7.4.14 E.164 Address
539 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
543 e164
= wmem_new(wmem_packet_scope(), e164_info_t
);
545 e164
->e164_number_type
= CALLED_PARTY_NUMBER
;
546 e164
->nature_of_address
= tvb_get_guint8(tvb
,offset
) & 0x7f;
547 e164
->E164_number_str
= (gchar
*)tvb_get_string(wmem_packet_scope(),tvb
,offset
+1,len
);
548 e164
->E164_number_length
= len
-1;
550 dissect_e164_number(tvb
, tree
, offset
-1, len
, *e164
);
555 static const gchar
* dissect_fields_oesea(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
557 * Q.2630.3 -> 7.3.23 Origination E.164 service endpoint address
559 * 7.4.13 Nature of Address
560 * 7.4.14 E.164 Address
565 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
569 e164
= wmem_new(wmem_packet_scope(), e164_info_t
);
571 e164
->e164_number_type
= CALLING_PARTY_NUMBER
;
572 e164
->nature_of_address
= tvb_get_guint8(tvb
,offset
) & 0x7f;
573 e164
->E164_number_str
= (gchar
*)tvb_get_string(wmem_packet_scope(),tvb
,offset
+1,len
);
574 e164
->E164_number_length
= len
-1;
576 dissect_e164_number(tvb
, tree
, offset
-1, len
, *e164
);
581 static const gchar
* dissect_fields_dnsea(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
583 * Q.2630.1 -> 7.3.4 Destination NSAP service endpoint address
585 * 7.4.15 NSAP Address
589 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
593 msg_info
->dest_nsap
= tvb_bytes_to_str(tvb
,offset
,20);
595 proto_tree_add_item(tree
, hf_alcap_dnsea
, tvb
, offset
, 20, ENC_NA
);
596 dissect_nsap(tvb
, offset
,20, tree
);
601 static const gchar
* dissect_fields_onsea(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
603 * Q.2630.3 -> 7.3.24 Origination NSAP service endpoint address
605 * 7.4.15 NSAP Address
609 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
613 msg_info
->orig_nsap
= tvb_bytes_to_str(tvb
,offset
,20);
615 proto_tree_add_item(tree
, hf_alcap_onsea
, tvb
, offset
, 20, ENC_NA
);
616 dissect_nsap(tvb
, offset
,20, tree
);
621 static const gchar
* dissect_fields_alc(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
623 * Q.2630.1 -> 7.3.5 Link characteristics
625 * 7.4.11 CPS-SDU Bit Rate -> Maximum CPS-SDU Bit Rate
626 * 7.4.11 CPS-SDU Bit Rate -> Average CPS-SDU Bit Rate
627 * 7.4.12 CPS-SDU Size -> Maximum CPS-SDU Size
628 * 7.4.12 CPS-SDU Size -> Average CPS-SDU Size
632 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
636 proto_tree_add_item(tree
, hf_alcap_alc_max_br_fw
, tvb
, offset
+0, 2, ENC_BIG_ENDIAN
);
637 proto_tree_add_item(tree
, hf_alcap_alc_max_br_bw
, tvb
, offset
+2, 2, ENC_BIG_ENDIAN
);
638 proto_tree_add_item(tree
, hf_alcap_alc_avg_br_fw
, tvb
, offset
+4, 2, ENC_BIG_ENDIAN
);
639 proto_tree_add_item(tree
, hf_alcap_alc_avg_br_bw
, tvb
, offset
+6, 2, ENC_BIG_ENDIAN
);
640 proto_tree_add_item(tree
, hf_alcap_alc_max_sdu_fw
, tvb
, offset
+8, 1, ENC_BIG_ENDIAN
);
641 proto_tree_add_item(tree
, hf_alcap_alc_max_sdu_bw
, tvb
, offset
+9, 1, ENC_BIG_ENDIAN
);
642 proto_tree_add_item(tree
, hf_alcap_alc_avg_sdu_fw
, tvb
, offset
+10, 1, ENC_BIG_ENDIAN
);
643 proto_tree_add_item(tree
, hf_alcap_alc_avg_sdu_bw
, tvb
, offset
+11, 1, ENC_BIG_ENDIAN
);
648 static const gchar
* dissect_fields_plc(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
650 * Q.2630.2 -> 7.3.19 Preferred Link characteristics
652 * 7.4.11 CPS-SDU Bit Rate -> Maximum CPS-SDU Bit Rate
653 * 7.4.11 CPS-SDU Bit Rate -> Average CPS-SDU Bit Rate
654 * 7.4.12 CPS-SDU Size -> Maximum CPS-SDU Size
655 * 7.4.12 CPS-SDU Size -> Average CPS-SDU Size
659 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
663 proto_tree_add_item(tree
, hf_alcap_plc_max_br_fw
, tvb
, offset
+0, 2, ENC_BIG_ENDIAN
);
664 proto_tree_add_item(tree
, hf_alcap_plc_max_br_bw
, tvb
, offset
+2, 2, ENC_BIG_ENDIAN
);
665 proto_tree_add_item(tree
, hf_alcap_plc_avg_br_fw
, tvb
, offset
+4, 2, ENC_BIG_ENDIAN
);
666 proto_tree_add_item(tree
, hf_alcap_plc_avg_br_bw
, tvb
, offset
+6, 2, ENC_BIG_ENDIAN
);
667 proto_tree_add_item(tree
, hf_alcap_plc_max_sdu_fw
, tvb
, offset
+8, 1, ENC_BIG_ENDIAN
);
668 proto_tree_add_item(tree
, hf_alcap_plc_max_sdu_bw
, tvb
, offset
+9, 1, ENC_BIG_ENDIAN
);
669 proto_tree_add_item(tree
, hf_alcap_plc_avg_sdu_fw
, tvb
, offset
+10, 1, ENC_BIG_ENDIAN
);
670 proto_tree_add_item(tree
, hf_alcap_plc_avg_sdu_bw
, tvb
, offset
+11, 1, ENC_BIG_ENDIAN
);
675 static const gchar
* dissect_fields_osaid(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
677 * Q.2630.1 -> 7.3.6 Originating signalling association identifier
679 * 7.4.2 Signalling Association Identifier -> Originating Signalling Association
682 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
686 msg_info
->osaid
= tvb_get_ntohl(tvb
,offset
);
688 proto_tree_add_item(tree
, hf_alcap_osaid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
693 static const gchar
* dissect_fields_sugr(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
695 * Q.2630.1 -> 7.3.7 Served user generated reference
697 * 7.4.10 Served User Generated Reference
700 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
704 msg_info
->sugr
= tvb_get_ntohl(tvb
,offset
);
706 proto_tree_add_item(tree
, hf_alcap_sugr
, tvb
, offset
, 4, ENC_NA
);
711 static const gchar
* dissect_fields_suci(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
713 * Q.2630.2 -> 7.3.22 Served user correlation ID
715 * 7.4.22 Served user correlation ID
718 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
722 proto_tree_add_item(tree
, hf_alcap_suci
, tvb
, offset
, len
, ENC_BIG_ENDIAN
);
727 static const gchar
* dissect_fields_ssia(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
729 * Q.2630.2 -> 7.3.9 Service specific information (Audio)
731 * 7.4.5 Organizational Unique Identifier
734 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
738 proto_tree_add_item(tree
, hf_alcap_ssia_pr_type
, tvb
, offset
+0,1,ENC_BIG_ENDIAN
);
740 proto_tree_add_item(tree
, hf_alcap_ssia_pr_id
, tvb
, offset
+2,1,ENC_BIG_ENDIAN
);
742 proto_tree_add_item(tree
, hf_alcap_ssia_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
743 proto_tree_add_item(tree
, hf_alcap_ssia_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
744 proto_tree_add_item(tree
, hf_alcap_ssia_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
745 proto_tree_add_item(tree
, hf_alcap_ssia_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
746 proto_tree_add_item(tree
, hf_alcap_ssia_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
747 proto_tree_add_item(tree
, hf_alcap_ssia_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
748 proto_tree_add_item(tree
, hf_alcap_ssia_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
749 proto_tree_add_item(tree
, hf_alcap_ssia_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
751 proto_tree_add_item(tree
, hf_alcap_ssia_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
753 proto_tree_add_item(tree
, hf_alcap_ssia_oui
, tvb
, offset
+5,3,ENC_NA
);
758 static const gchar
* dissect_fields_ssim(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
760 * Q.2630.1 -> 7.3.10 Service specific information (Multirate)
762 * 7.4.7 Multirate Service
765 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
769 proto_tree_add_item(tree
,hf_alcap_ssim_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
770 proto_tree_add_item(tree
,hf_alcap_ssim_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
771 proto_tree_add_item(tree
,hf_alcap_ssim_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
776 static const gchar
* dissect_fields_ssisa(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
778 * Q.2630.1 -> 7.3.11 Service specific information (SAR-assured)
780 * 7.4.8 Segmentation and Reassembly (Assured Data Transfer)
783 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
787 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sssar_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
788 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sssar_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
789 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_sdu_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
790 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_sdu_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
791 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_uu_fw
,tvb
,offset
+10,2,ENC_BIG_ENDIAN
);
792 proto_tree_add_item(tree
,hf_alcap_ssisa_max_sscop_uu_bw
,tvb
,offset
+12,2,ENC_BIG_ENDIAN
);
794 proto_tree_add_text(tree
,tvb
,offset
,14,"Not yet decoded: Q.2630.1 7.4.8");
799 static const gchar
* dissect_fields_ssisu(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
801 * Q.2630.1 -> 7.3.12 Service specific information (SAR-unassured)
803 * 7.4.9 Segmentation and Reassembly (Unassured Data Transfer)
806 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
810 proto_tree_add_item(tree
,hf_alcap_ssisu_max_sssar_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
811 proto_tree_add_item(tree
,hf_alcap_ssisu_max_sssar_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
812 proto_tree_add_item(tree
,hf_alcap_ssisu_ted
,tvb
,offset
+6,1,ENC_BIG_ENDIAN
);
813 proto_tree_add_text(tree
,tvb
,offset
,7,"Not yet decoded: Q.2630.1 7.4.9");
818 static const gchar
* dissect_fields_none(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
820 * used for parameters that have no fields, just checks if len==0
822 * Q.2630.1 -> 7.3.13 Test connection indicator
823 * Q.2630.2 -> 7.3.20 Modify support for link characteristics
824 * Q.2630.2 -> 7.3.21 Modify support for service specific information
825 * Q.2630.3 -> 7.3.35 Transfer capability support
829 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
836 static const gchar
* dissect_fields_ssiae(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
838 * Q.2630.2 -> 7.3.15 Service specific information (Audio Extended)
840 * 7.4.19 Audio extended service
841 * 7.4.5 Organizational unique identifier
844 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
848 proto_tree_add_item(tree
, hf_alcap_ssiae_pr_type
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
849 proto_tree_add_item(tree
, hf_alcap_ssiae_lb
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
850 proto_tree_add_item(tree
, hf_alcap_ssiae_rc
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
851 proto_tree_add_item(tree
, hf_alcap_ssiae_syn
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
853 proto_tree_add_item(tree
, hf_alcap_ssiae_pr_id
, tvb
, offset
+1,1,ENC_BIG_ENDIAN
);
855 proto_tree_add_item(tree
, hf_alcap_ssiae_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
856 proto_tree_add_item(tree
, hf_alcap_ssiae_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
857 proto_tree_add_item(tree
, hf_alcap_ssiae_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
858 proto_tree_add_item(tree
, hf_alcap_ssiae_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
859 proto_tree_add_item(tree
, hf_alcap_ssiae_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
860 proto_tree_add_item(tree
, hf_alcap_ssiae_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
861 proto_tree_add_item(tree
, hf_alcap_ssiae_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
862 proto_tree_add_item(tree
, hf_alcap_ssiae_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
864 proto_tree_add_item(tree
, hf_alcap_ssiae_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
866 proto_tree_add_item(tree
, hf_alcap_ssiae_oui
, tvb
, offset
+5,3,ENC_NA
);
871 static const gchar
* dissect_fields_pssiae(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
873 * Q.2630.2 -> 7.3.17 Preferred service specific information (Audio Extended)
875 * 7.4.19 Audio extended service
876 * 7.4.5 Organizational unique identifier
879 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
883 proto_tree_add_item(tree
, hf_alcap_pssiae_pr_type
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
884 proto_tree_add_item(tree
, hf_alcap_pssiae_lb
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
885 proto_tree_add_item(tree
, hf_alcap_pssiae_rc
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
886 proto_tree_add_item(tree
, hf_alcap_pssiae_syn
, tvb
, offset
,1,ENC_BIG_ENDIAN
);
888 proto_tree_add_item(tree
, hf_alcap_pssiae_pr_id
, tvb
, offset
+1,1,ENC_BIG_ENDIAN
);
890 proto_tree_add_item(tree
, hf_alcap_pssiae_frm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
891 proto_tree_add_item(tree
, hf_alcap_pssiae_cmd
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
892 proto_tree_add_item(tree
, hf_alcap_pssiae_mfr2
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
893 proto_tree_add_item(tree
, hf_alcap_pssiae_mfr1
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
894 proto_tree_add_item(tree
, hf_alcap_pssiae_dtmf
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
895 proto_tree_add_item(tree
, hf_alcap_pssiae_cas
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
896 proto_tree_add_item(tree
, hf_alcap_pssiae_fax
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
897 proto_tree_add_item(tree
, hf_alcap_pssiae_pcm
, tvb
, offset
+3,1,ENC_BIG_ENDIAN
);
899 proto_tree_add_item(tree
, hf_alcap_pssiae_max_len
, tvb
, offset
+4,2,ENC_BIG_ENDIAN
);
901 proto_tree_add_item(tree
, hf_alcap_pssiae_oui
, tvb
, offset
+5,3,ENC_NA
);
906 static const gchar
* dissect_fields_ssime(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
908 * Q.2630.2 -> 7.3.16 Service specific information (Multirate Extended)
910 * 7.4.20 Multirate extended service
913 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
917 proto_tree_add_item(tree
,hf_alcap_ssime_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
918 proto_tree_add_item(tree
,hf_alcap_ssime_lb
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
919 proto_tree_add_item(tree
,hf_alcap_ssime_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
920 proto_tree_add_item(tree
,hf_alcap_ssime_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
925 static const gchar
* dissect_fields_pssime(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
927 * Q.2630.2 -> 7.3.18 Preferred service specific information (Multirate Extended)
929 * 7.4.20 Multirate extended service
932 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
936 proto_tree_add_item(tree
,hf_alcap_pssime_frm
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
937 proto_tree_add_item(tree
,hf_alcap_pssime_lb
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
938 proto_tree_add_item(tree
,hf_alcap_pssime_mult
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
939 proto_tree_add_item(tree
,hf_alcap_pssime_max
,tvb
,offset
+1,2,ENC_BIG_ENDIAN
);
944 static const gchar
* dissect_fields_acc(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
946 * Q.2630.3 -> 7.3.25 Automatic congestion control
948 * 7.4.23 AAL type 2 Node Automatic Congestion Level
951 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
955 proto_tree_add_item(tree
,hf_alcap_acc_level
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
960 static const gchar
* dissect_fields_cp(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
962 * Q.2630.3 -> 7.3.26 Connection Priority
967 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
971 proto_tree_add_item(tree
,hf_alcap_cp
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
975 static const gchar
* dissect_fields_pt(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
977 * Q.2630.2 -> 7.3.14 Path Type
979 * 7.4.21 AAL Type 2 Path QoS Codepoint
982 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
986 proto_tree_add_item(tree
,hf_alcap_pt
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
991 static const gchar
* dissect_fields_hc(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
993 * Q.2630.3 -> 7.3.27 Hop counter
995 * 7.4.25 AAL type 2 Hop Counter
998 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1002 proto_tree_add_item(tree
,hf_alcap_hc
,tvb
,offset
,len
,ENC_BIG_ENDIAN
);
1007 static const gchar
* dissect_fields_fbw(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1009 * Q.2630.3 -> 7.3.32 Fixed bandwidth transfer capability
1011 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1012 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1013 * 7.4.28 Maximum allowed CPS packet size
1016 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1020 proto_tree_add_item(tree
,hf_alcap_fbw_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1021 proto_tree_add_item(tree
,hf_alcap_fbw_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1022 proto_tree_add_item(tree
,hf_alcap_fbw_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1023 proto_tree_add_item(tree
,hf_alcap_fbw_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1024 proto_tree_add_item(tree
,hf_alcap_fbw_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1025 proto_tree_add_item(tree
,hf_alcap_fbw_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1030 static const gchar
* dissect_fields_pfbw(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1032 * Q.2630.3 -> 7.3.29 Preferred fixed bandwidth transfer capability
1034 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1035 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1036 * 7.4.28 Maximum allowed CPS packet size
1039 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1043 proto_tree_add_item(tree
,hf_alcap_pfbw_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1044 proto_tree_add_item(tree
,hf_alcap_pfbw_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1045 proto_tree_add_item(tree
,hf_alcap_pfbw_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1046 proto_tree_add_item(tree
,hf_alcap_pfbw_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1047 proto_tree_add_item(tree
,hf_alcap_pfbw_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1048 proto_tree_add_item(tree
,hf_alcap_pfbw_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1053 static const gchar
* dissect_fields_vbws(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1055 * Q.2630.3 -> 7.3.33 Variable bandwidth stringent transfer capability
1057 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1058 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1059 * 7.4.28 Maximum allowed CPS packet size
1060 * 7.4.29 Source Traffic Type
1063 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1067 proto_tree_add_item(tree
,hf_alcap_vbws_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1068 proto_tree_add_item(tree
,hf_alcap_vbws_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1069 proto_tree_add_item(tree
,hf_alcap_vbws_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1070 proto_tree_add_item(tree
,hf_alcap_vbws_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1071 proto_tree_add_item(tree
,hf_alcap_vbws_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1072 proto_tree_add_item(tree
,hf_alcap_vbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1073 proto_tree_add_item(tree
,hf_alcap_vbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1074 proto_tree_add_item(tree
,hf_alcap_vbws_stt
,tvb
,offset
+12,1,ENC_BIG_ENDIAN
);
1079 static const gchar
* dissect_fields_pvbws(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1081 * Q.2630.3 -> 7.3.30 Preferred variable bandwidth stringent transfer capability
1083 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1084 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1085 * 7.4.28 Maximum allowed CPS packet size
1086 * 7.4.29 Source Traffic Type
1089 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1093 proto_tree_add_item(tree
,hf_alcap_pvbws_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1094 proto_tree_add_item(tree
,hf_alcap_pvbws_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1095 proto_tree_add_item(tree
,hf_alcap_pvbws_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1096 proto_tree_add_item(tree
,hf_alcap_pvbws_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1097 proto_tree_add_item(tree
,hf_alcap_pvbws_size_fw
,tvb
,offset
+10,1,ENC_BIG_ENDIAN
);
1098 proto_tree_add_item(tree
,hf_alcap_pvbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1099 proto_tree_add_item(tree
,hf_alcap_pvbws_size_bw
,tvb
,offset
+11,1,ENC_BIG_ENDIAN
);
1100 proto_tree_add_item(tree
,hf_alcap_pvbws_stt
,tvb
,offset
+12,1,ENC_BIG_ENDIAN
);
1106 static const gchar
* dissect_fields_pvbwt(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1108 * Q.2630.3 -> 7.3.31 Preferred variable bandwidth tolerant transfer capability
1110 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1111 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1112 * 7.4.26 CPS Bit rate -> Sustainable CPS bit rate
1113 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Sustainable CPS bit rate
1114 * 7.4.28 Maximum allowed CPS packet size
1118 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1122 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1123 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1125 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1126 proto_tree_add_item(tree
,hf_alcap_pvbwt_peak_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1128 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_br_fw
,tvb
,offset
+10,3,ENC_BIG_ENDIAN
);
1129 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_br_bw
,tvb
,offset
+13,3,ENC_BIG_ENDIAN
);
1131 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_bucket_fw
,tvb
,offset
+16,2,ENC_BIG_ENDIAN
);
1132 proto_tree_add_item(tree
,hf_alcap_pvbwt_sust_bucket_bw
,tvb
,offset
+18,2,ENC_BIG_ENDIAN
);
1134 proto_tree_add_item(tree
,hf_alcap_pvbwt_size_fw
,tvb
,offset
+20,1,ENC_BIG_ENDIAN
);
1135 proto_tree_add_item(tree
,hf_alcap_pvbwt_size_bw
,tvb
,offset
+21,1,ENC_BIG_ENDIAN
);
1140 static const gchar
* dissect_fields_vbwt(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1142 * Q.2630.3 -> 7.3.34 Variable bandwidth tolerant transfer capability
1144 * 7.4.26 CPS Bit rate -> Peak CPS bit rate
1145 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Peak CPS bit rate
1146 * 7.4.26 CPS Bit rate -> Sustainable CPS bit rate
1147 * 7.4.27 CPS Token Bucket Size -> CPS token bucket size associated with Sustainable CPS bit rate
1148 * 7.4.28 Maximum allowed CPS packet size
1151 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1155 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_br_fw
,tvb
,offset
,3,ENC_BIG_ENDIAN
);
1156 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_br_bw
,tvb
,offset
+3,3,ENC_BIG_ENDIAN
);
1158 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_bucket_fw
,tvb
,offset
+6,2,ENC_BIG_ENDIAN
);
1159 proto_tree_add_item(tree
,hf_alcap_vbwt_peak_bucket_bw
,tvb
,offset
+8,2,ENC_BIG_ENDIAN
);
1161 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_br_fw
,tvb
,offset
+10,3,ENC_BIG_ENDIAN
);
1162 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_br_bw
,tvb
,offset
+13,3,ENC_BIG_ENDIAN
);
1164 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_bucket_fw
,tvb
,offset
+16,2,ENC_BIG_ENDIAN
);
1165 proto_tree_add_item(tree
,hf_alcap_vbwt_sust_bucket_bw
,tvb
,offset
+18,2,ENC_BIG_ENDIAN
);
1167 proto_tree_add_item(tree
,hf_alcap_vbwt_size_fw
,tvb
,offset
+20,1,ENC_BIG_ENDIAN
);
1168 proto_tree_add_item(tree
,hf_alcap_vbwt_size_bw
,tvb
,offset
+21,1,ENC_BIG_ENDIAN
);
1173 static const gchar
* dissect_fields_sut(packet_info
* pinfo _U_
, tvbuff_t
*tvb
, proto_tree
*tree
, int offset
, int len
, alcap_message_info_t
* msg_info _U_
) {
1175 * Q.2630.1 -> 7.3.8 Served user transport
1177 * 7.4.18 Served User Transport
1182 proto_tree_add_expert(tree
, pinfo
, &ei_alcap_parameter_field_bad_length
, tvb
, offset
, len
);
1186 sut_len
= tvb_get_guint8(tvb
,offset
);
1188 proto_tree_add_item(tree
, hf_alcap_sut_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1189 proto_tree_add_item(tree
, hf_alcap_sut
, tvb
, offset
, sut_len
, ENC_NA
);
1194 typedef const gchar
* (*alcap_parameter_dissector_t
) (packet_info
* pinfo
, tvbuff_t
*, proto_tree
*, int, int, alcap_message_info_t
*);
1196 typedef struct _alcap_param_info_t
{
1199 alcap_parameter_dissector_t dissect_fields
;
1200 gboolean run_wo_tree
;
1201 } alcap_param_info_t
;
1203 static alcap_param_info_t param_infos
[] = {
1204 {-1, "Unknown", dissect_fields_unknown
, FALSE
},
1205 {-1, "CAU", dissect_fields_cau
, TRUE
},
1206 {-1, "CEID", dissect_fields_ceid
, TRUE
},
1207 {-1, "DESEA", dissect_fields_desea
, FALSE
},
1208 {-1, "DNSEA", dissect_fields_dnsea
, TRUE
},
1209 {-1, "ALC", dissect_fields_alc
, FALSE
},
1210 {-1, "OSAID", dissect_fields_osaid
, TRUE
},
1211 {-1, "SUGR", dissect_fields_sugr
, TRUE
},
1212 {-1, "SUT", dissect_fields_sut
, FALSE
},
1213 {-1, "SSIA", dissect_fields_ssia
, FALSE
},
1214 {-1, "SSIM", dissect_fields_ssim
, FALSE
},
1215 {-1, "SSISA", dissect_fields_ssisa
, FALSE
},
1216 {-1, "SSISU", dissect_fields_ssisu
, FALSE
},
1217 {-1, "TCI", dissect_fields_none
, FALSE
},
1218 {-1, "MSLC", dissect_fields_none
, FALSE
},
1219 {-1, "MSSSI", dissect_fields_none
, FALSE
},
1220 {-1, "PT", dissect_fields_pt
, FALSE
},
1221 {-1, "PLC", dissect_fields_plc
, FALSE
},
1222 {-1, "PSSIAE", dissect_fields_pssiae
, FALSE
},
1223 {-1, "PSSIME", dissect_fields_pssime
, FALSE
},
1224 {-1, "SUCI", dissect_fields_suci
, FALSE
},
1225 {-1, "ONSEA", dissect_fields_onsea
, TRUE
},
1226 {-1, "SSIAE", dissect_fields_ssiae
, FALSE
},
1227 {-1, "SSIME", dissect_fields_ssime
, FALSE
},
1228 {-1, "ACC", dissect_fields_acc
, FALSE
},
1229 {-1, "CP", dissect_fields_cp
, FALSE
},
1230 {-1, "HC", dissect_fields_hc
, FALSE
},
1231 {-1, "OESEA", dissect_fields_oesea
, FALSE
},
1232 {-1, "PFBW", dissect_fields_pfbw
, FALSE
},
1233 {-1, "PVBWS", dissect_fields_pvbws
, FALSE
},
1234 {-1, "PVBWT", dissect_fields_pvbwt
, FALSE
},
1235 {-1, "TTC", dissect_fields_none
, FALSE
},
1236 {-1, "FBW", dissect_fields_fbw
, FALSE
},
1237 {-1, "VBWS", dissect_fields_vbws
, FALSE
},
1238 {-1, "VBWT", dissect_fields_vbwt
, FALSE
},
1239 {-1, "TCS", dissect_fields_none
, FALSE
}
1242 #define GET_PARAM_INFO(id) ( array_length(param_infos) <= id ? &(param_infos[0]) : &(param_infos[id]) )
1244 typedef struct _alcap_msg_type_info_t
{
1246 int severity
; /* XXX - not used */
1247 } alcap_msg_type_info_t
;
1249 static const alcap_msg_type_info_t msg_types
[] = {
1250 { "Unknown Message ", PI_ERROR
},
1251 { "BLC ", PI_NOTE
},
1252 { "BLO ", PI_NOTE
},
1253 { "CFN ", PI_WARN
},
1254 { "ECF ", PI_CHAT
},
1255 { "ERQ ", PI_CHAT
},
1256 { "RLC ", PI_CHAT
},
1257 { "REL ", PI_CHAT
},
1258 { "RSC ", PI_NOTE
},
1259 { "RES ", PI_NOTE
},
1260 { "UBC ", PI_NOTE
},
1261 { "UBL ", PI_NOTE
},
1262 { "MOA ", PI_CHAT
},
1263 { "MOR ", PI_CHAT
},
1264 { "MOD ", PI_CHAT
},
1267 static void alcap_leg_tree(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
*pinfo
, const alcap_leg_info_t
* leg
) {
1268 proto_item
* pi
= proto_tree_add_text(tree
,tvb
,0,0,"[ALCAP Leg Info]");
1270 tree
= proto_item_add_subtree(pi
,ett_leg
);
1273 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_dsaid
,tvb
,0,0,leg
->dsaid
);
1274 PROTO_ITEM_SET_GENERATED(pi
);
1278 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_osaid
,tvb
,0,0,leg
->osaid
);
1279 PROTO_ITEM_SET_GENERATED(pi
);
1283 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_pathid
,tvb
,0,0,leg
->pathid
);
1284 PROTO_ITEM_SET_GENERATED(pi
);
1288 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_cid
,tvb
,0,0,leg
->cid
);
1289 PROTO_ITEM_SET_GENERATED(pi
);
1293 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_sugr
,tvb
,0,0,leg
->sugr
);
1294 PROTO_ITEM_SET_GENERATED(pi
);
1297 if (leg
->orig_nsap
) {
1298 pi
= proto_tree_add_string(tree
,hf_alcap_leg_onsea
,tvb
,0,0,leg
->orig_nsap
);
1299 PROTO_ITEM_SET_GENERATED(pi
);
1302 if (leg
->dest_nsap
) {
1303 pi
= proto_tree_add_string(tree
,hf_alcap_leg_dnsea
,tvb
,0,0,leg
->dest_nsap
);
1304 PROTO_ITEM_SET_GENERATED(pi
);
1307 if(leg
->release_cause
) {
1308 pi
= proto_tree_add_uint(tree
,hf_alcap_leg_release_cause
,tvb
,0,0,leg
->release_cause
);
1309 PROTO_ITEM_SET_GENERATED(pi
);
1310 if (leg
->release_cause
&& leg
->release_cause
!= 31)
1311 expert_add_info(pinfo
, pi
, &ei_alcap_release_cause_not31
);
1315 alcap_msg_data_t
* msg
= leg
->msgs
;
1316 proto_item
* pi_local
= proto_tree_add_text(tree
,tvb
,0,0,"[Messages in this leg]");
1317 proto_tree
* tree_local
= proto_item_add_subtree(pi_local
,ett_leg
);
1321 pi_local
= proto_tree_add_uint(tree_local
,hf_alcap_leg_frame
,tvb
,0,0,msg
->framenum
);
1322 proto_item_set_text(pi_local
,"%s in frame %u",
1323 val_to_str_ext_const(msg
->msg_type
,&msg_type_strings_ext
,"Unknown message"),
1325 PROTO_ITEM_SET_GENERATED(pi_local
);
1326 } while (( msg
= msg
->next
));
1333 extern void alcap_tree_from_bearer_key(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
*pinfo
, const gchar
* key
) {
1334 alcap_leg_info_t
* leg
= (alcap_leg_info_t
*)wmem_tree_lookup_string(legs_by_bearer
,key
,0);
1337 alcap_leg_tree(tree
,tvb
,pinfo
,leg
);
1341 #define GET_MSG_TYPE(id) ( array_length(msg_types) <= id ? &(msg_types[0]) : &(msg_types[id]) )
1343 static void dissect_alcap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
) {
1344 proto_tree
*alcap_tree
= NULL
;
1345 alcap_message_info_t
* msg_info
= wmem_new0(wmem_packet_scope(), alcap_message_info_t
);
1346 int len
= tvb_length(tvb
);
1349 proto_tree
* compat_tree
;
1350 const alcap_msg_type_info_t
* msg_type
;
1352 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, alcap_proto_name_short
);
1355 proto_item
*alcap_item
= proto_tree_add_item(tree
, proto_alcap
, tvb
, 0, -1, ENC_NA
);
1356 alcap_tree
= proto_item_add_subtree(alcap_item
, ett_alcap
);
1359 proto_tree_add_item(alcap_tree
,hf_alcap_dsaid
,tvb
,0,4,ENC_BIG_ENDIAN
);
1360 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_msg_id
,tvb
,4,1,ENC_BIG_ENDIAN
);
1362 msg_info
->dsaid
= tvb_get_ntohl(tvb
, 0);
1363 msg_info
->msg_type
= tvb_get_guint8(tvb
, 4);
1365 msg_type
= GET_MSG_TYPE(msg_info
->msg_type
);
1367 expert_add_info(pinfo
, pi
, &ei_alcap_response
);
1369 col_set_str(pinfo
->cinfo
, COL_INFO
, msg_type
->abbr
);
1371 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_compat
,tvb
,5,1,ENC_NA
);
1372 compat_tree
= proto_item_add_subtree(pi
,ett_compat
);
1373 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_sni
,tvb
,5,1,ENC_BIG_ENDIAN
);
1374 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_ii
,tvb
,5,1,ENC_BIG_ENDIAN
);
1375 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_sni
,tvb
,5,1,ENC_BIG_ENDIAN
);
1376 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_ii
,tvb
,5,1,ENC_BIG_ENDIAN
);
1378 len
-= ALCAP_MSG_HEADER_LEN
;
1379 offset
= ALCAP_MSG_HEADER_LEN
;
1382 guint param_id
= tvb_get_guint8(tvb
,offset
);
1383 guint param_len
= tvb_get_guint8(tvb
,offset
+2);
1384 const alcap_param_info_t
* param_info
= GET_PARAM_INFO(param_id
);
1385 proto_tree
* param_tree
;
1386 const gchar
* colinfo_str
= NULL
;
1388 pi
= proto_tree_add_item(alcap_tree
,hf_alcap_param_id
,tvb
,offset
,1,ENC_BIG_ENDIAN
);
1389 param_tree
= proto_item_add_subtree(pi
,param_info
->ett
);
1391 pi
= proto_tree_add_item(param_tree
,hf_alcap_compat
,tvb
,offset
+1,1,ENC_NA
);
1392 compat_tree
= proto_item_add_subtree(pi
,ett_compat
);
1393 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_sni
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1394 proto_tree_add_item(compat_tree
,hf_alcap_compat_pass_on_ii
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1395 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_sni
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1396 proto_tree_add_item(compat_tree
,hf_alcap_compat_general_ii
,tvb
,offset
+1,1,ENC_BIG_ENDIAN
);
1398 proto_tree_add_item(param_tree
,hf_alcap_param_len
,tvb
,offset
+2,1,ENC_BIG_ENDIAN
);
1400 if ( alcap_tree
|| param_info
->run_wo_tree
)
1401 colinfo_str
= param_info
->dissect_fields(pinfo
,tvb
,param_tree
,offset
+3,param_len
,msg_info
);
1403 col_append_fstr(pinfo
->cinfo
, COL_INFO
, " %s",colinfo_str
);
1405 len
-= 3 + param_len
;
1406 offset
+= 3 + param_len
;
1409 if (keep_persistent_info
) {
1410 alcap_leg_info_t
* leg
= NULL
;
1411 switch (msg_info
->msg_type
) {
1413 if( ! ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->osaid
) )) {
1414 leg
= wmem_new(wmem_file_scope(), alcap_leg_info_t
);
1417 leg
->osaid
= msg_info
->osaid
;
1418 leg
->pathid
= msg_info
->pathid
;
1419 leg
->cid
= msg_info
->cid
;
1420 leg
->sugr
= msg_info
->sugr
;
1421 leg
->orig_nsap
= NULL
;
1422 leg
->dest_nsap
= NULL
;
1424 if (msg_info
->orig_nsap
) {
1425 gchar
* key
= wmem_strdup_printf(wmem_file_scope(), "%s:%.8X",msg_info
->orig_nsap
,leg
->sugr
);
1426 ascii_strdown_inplace(key
);
1428 leg
->orig_nsap
= wmem_strdup(wmem_file_scope(), msg_info
->orig_nsap
);
1430 if (!wmem_tree_lookup_string(legs_by_bearer
,key
,0)) {
1431 wmem_tree_insert_string(legs_by_bearer
,key
,leg
,0);
1435 if (msg_info
->dest_nsap
) {
1436 gchar
* key
= wmem_strdup_printf(wmem_file_scope(), "%s:%.8X",msg_info
->dest_nsap
,leg
->sugr
);
1437 ascii_strdown_inplace(key
);
1439 leg
->dest_nsap
= wmem_strdup(wmem_file_scope(), msg_info
->dest_nsap
);
1441 if (!wmem_tree_lookup_string(legs_by_bearer
,key
,0)) {
1442 wmem_tree_insert_string(legs_by_bearer
,key
,leg
,0);
1447 leg
->release_cause
= 0;
1449 wmem_tree_insert32(legs_by_osaid
,leg
->osaid
,leg
);
1453 if(( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
) )) {
1454 leg
->dsaid
= msg_info
->osaid
;
1455 wmem_tree_insert32(legs_by_dsaid
,leg
->dsaid
,leg
);
1462 if( ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
) )
1463 || ( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_dsaid
,msg_info
->dsaid
) ) ) {
1465 if(msg_info
->release_cause
)
1466 leg
->release_cause
= msg_info
->release_cause
;
1471 leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_osaid
,msg_info
->dsaid
);
1474 leg
->release_cause
= msg_info
->release_cause
;
1475 } else if (( leg
= (alcap_leg_info_t
*)wmem_tree_lookup32(legs_by_dsaid
,msg_info
->dsaid
) )) {
1476 leg
->release_cause
= msg_info
->release_cause
;
1483 if (leg
!= NULL
&& ( (! leg
->msgs
) || leg
->msgs
->last
->framenum
< pinfo
->fd
->num
) ) {
1484 alcap_msg_data_t
* msg
= wmem_new(wmem_file_scope(), alcap_msg_data_t
);
1485 msg
->msg_type
= msg_info
->msg_type
;
1486 msg
->framenum
= pinfo
->fd
->num
;
1491 leg
->msgs
->last
->next
= msg
;
1496 leg
->msgs
->last
= msg
;
1500 if (tree
&& leg
) alcap_leg_tree(alcap_tree
,tvb
,pinfo
,leg
);
1505 proto_register_alcap(void)
1507 module_t
*alcap_module
;
1508 expert_module_t
*expert_alcap
;
1510 static hf_register_info hf
[] = {
1512 { "DSAID", "alcap.dsaid",
1513 FT_UINT32
, BASE_HEX
, NULL
, 0,
1514 "Destination Service Association ID", HFILL
}
1517 { "Message Type", "alcap.msg_type",
1518 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &msg_type_strings_ext
, 0,
1522 { "Message Compatibility", "alcap.compat",
1523 FT_BYTES
, BASE_NONE
, NULL
, 0,
1526 { &hf_alcap_compat_pass_on_sni
,
1527 { "Pass-On SNI", "alcap.compat.pass.sni",
1528 FT_UINT8
, BASE_DEC
, VALS(send_notification
), 0x40,
1529 "Send Notificaation Indicator", HFILL
}
1531 { &hf_alcap_compat_pass_on_ii
,
1532 { "Pass-On II", "alcap.compat.pass.ii",
1533 FT_UINT8
, BASE_DEC
, VALS(instruction_indicator
), 0x30,
1534 "Instruction Indicator", HFILL
}
1536 { &hf_alcap_compat_general_sni
,
1537 { "General SNI", "alcap.compat.general.sni",
1538 FT_UINT8
, BASE_DEC
, VALS(send_notification
), 0x04,
1539 "Send Notificaation Indicator", HFILL
}
1541 { &hf_alcap_compat_general_ii
,
1542 { "General II", "alcap.compat.general.ii",
1543 FT_UINT8
, BASE_DEC
, VALS(instruction_indicator
), 0x03,
1544 "Instruction Indicator", HFILL
}
1547 { &hf_alcap_unknown
,
1548 { "Unknown Field Data", "alcap.unknown.field",
1549 FT_BYTES
, BASE_NONE
, NULL
, 0,
1553 { &hf_alcap_param_id
,
1554 { "Parameter", "alcap.param",
1555 FT_UINT8
, BASE_DEC
, VALS(msg_parm_strings
), 0,
1556 "Parameter Id", HFILL
}
1558 { &hf_alcap_param_len
,
1559 { "Length", "alcap.param.len",
1560 FT_UINT8
, BASE_DEC
, NULL
, 0,
1561 "Parameter Length", HFILL
}
1564 { &hf_alcap_cau_coding
,
1565 { "Cause Coding", "alcap.cau.coding",
1566 FT_UINT8
, BASE_DEC
, VALS(cause_coding_vals
), 0x03,
1569 { &hf_alcap_cau_value_itu
,
1570 { "Cause Value (ITU)", "alcap.cau.value",
1571 FT_UINT8
, BASE_DEC
, VALS(cause_values_itu
), 0x7f,
1574 { &hf_alcap_cau_value_non_itu
,
1575 { "Cause Value (Other)", "alcap.cau.value",
1576 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1579 { &hf_alcap_cau_diag
,
1580 { "Diagnostic", "alcap.cau.diag",
1581 FT_BYTES
, BASE_NONE
, NULL
, 0,
1584 { &hf_alcap_cau_diag_len
,
1585 { "Length", "alcap.cau.diag.len",
1586 FT_UINT8
, BASE_DEC
, NULL
, 0,
1587 "Diagnostics Length", HFILL
}
1589 { &hf_alcap_cau_diag_msg
,
1590 { "Message Identifier", "alcap.cau.diag.msg",
1591 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &msg_type_strings_ext
, 0,
1594 { &hf_alcap_cau_diag_param_id
,
1595 { "Parameter Identifier", "alcap.cau.diag.param",
1596 FT_UINT8
, BASE_DEC
, NULL
, 0,
1599 { &hf_alcap_cau_diag_field_num
,
1600 { "Field Number", "alcap.cau.diag.field_num",
1601 FT_UINT8
, BASE_DEC
, NULL
, 0,
1605 { &hf_alcap_ceid_pathid
,
1606 { "Path ID", "alcap.ceid.pathid",
1607 FT_UINT32
, BASE_DEC
, NULL
, 0,
1610 { &hf_alcap_ceid_cid
,
1611 { "CID", "alcap.ceid.cid",
1612 FT_UINT8
, BASE_DEC
, NULL
, 0,
1617 { "Address", "alcap.dnsea.addr",
1618 FT_BYTES
, BASE_NONE
, NULL
, 0,
1622 { &hf_alcap_alc_max_br_fw
,
1623 { "Maximum Forward Bit Rate", "alcap.alc.bitrate.max.fw",
1624 FT_UINT16
, BASE_DEC
, NULL
, 0,
1627 { &hf_alcap_alc_max_br_bw
,
1628 { "Maximum Backwards Bit Rate", "alcap.alc.bitrate.max.bw",
1629 FT_UINT16
, BASE_DEC
, NULL
, 0,
1632 { &hf_alcap_alc_avg_br_fw
,
1633 { "Average Forward Bit Rate", "alcap.alc.bitrate.avg.fw",
1634 FT_UINT16
, BASE_DEC
, NULL
, 0,
1637 { &hf_alcap_alc_avg_br_bw
,
1638 { "Average Backwards Bit Rate", "alcap.alc.bitrate.avg.bw",
1639 FT_UINT16
, BASE_DEC
, NULL
, 0,
1642 { &hf_alcap_alc_max_sdu_fw
,
1643 { "Maximum Forward CPS SDU Size", "alcap.alc.sdusize.max.fw",
1644 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1647 { &hf_alcap_alc_max_sdu_bw
,
1648 { "Maximum Backwards CPS SDU Size", "alcap.alc.sdusize.max.bw",
1649 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1652 { &hf_alcap_alc_avg_sdu_fw
,
1653 { "Average Forward CPS SDU Size", "alcap.alc.sdusize.avg.fw",
1654 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1657 { &hf_alcap_alc_avg_sdu_bw
,
1658 { "Average Backwards CPS SDU Size", "alcap.alc.sdusize.avg.bw",
1659 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1664 { "OSAID", "alcap.osaid",
1665 FT_UINT32
, BASE_HEX
, NULL
, 0,
1666 "Originating Service Association ID", HFILL
}
1670 { "SUGR", "alcap.sugr",
1671 FT_BYTES
, BASE_NONE
, NULL
, 0,
1672 "Served User Generated Reference", HFILL
}
1675 { &hf_alcap_sut_len
,
1676 { "SUT Length", "alcap.sut.sut_len",
1677 FT_UINT8
, BASE_HEX
, NULL
, 0,
1681 { "SUT", "alcap.sut.transport",
1682 FT_BYTES
, BASE_NONE
, NULL
, 0,
1683 "Served User Transport", HFILL
}
1686 { &hf_alcap_ssia_pr_type
,
1687 { "Profile Type", "alcap.ssia.profile.type",
1688 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1689 "I.366.2 Profile Type", HFILL
}
1691 { &hf_alcap_ssia_pr_id
,
1692 { "Profile Id", "alcap.ssia.profile.id",
1693 FT_UINT8
, BASE_DEC
, NULL
, 0,
1696 { &hf_alcap_ssia_frm
,
1697 { "Frame Mode", "alcap.ssia.frm",
1698 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1701 { &hf_alcap_ssia_cmd
,
1702 { "Circuit Mode", "alcap.ssia.cmd",
1703 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x40,
1706 { &hf_alcap_ssia_mfr2
,
1707 { "Multi-Frequency R2", "alcap.ssia.mfr2",
1708 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x20,
1711 { &hf_alcap_ssia_mfr1
,
1712 { "Multi-Frequency R1", "alcap.ssia.mfr1",
1713 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x10,
1716 { &hf_alcap_ssia_dtmf
,
1717 { "DTMF", "alcap.ssia.dtmf",
1718 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x08,
1721 { &hf_alcap_ssia_cas
,
1722 { "CAS", "alcap.ssia.cas",
1723 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x04,
1724 "Channel Associated Signalling", HFILL
}
1726 { &hf_alcap_ssia_fax
,
1727 { "Fax", "alcap.ssia.fax",
1728 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x02,
1729 "Facsimile", HFILL
}
1731 { &hf_alcap_ssia_pcm
,
1732 { "PCM Mode", "alcap.ssia.pcm",
1733 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
1736 { &hf_alcap_ssia_max_len
,
1737 { "Max Len of FM Data", "alcap.ssia.max_fmdata_len",
1738 FT_UINT16
, BASE_DEC
, NULL
, 0,
1741 { &hf_alcap_ssia_oui
,
1742 { "OUI", "alcap.ssia.oui",
1743 FT_BYTES
, BASE_NONE
, NULL
, 0,
1744 "Organizational Unique Identifier", HFILL
}
1747 { &hf_alcap_ssim_frm
,
1748 { "Frame Mode", "alcap.ssim.frm",
1749 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1752 { &hf_alcap_ssim_mult
,
1753 { "Multiplier", "alcap.ssim.mult",
1754 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
1757 { &hf_alcap_ssim_max
,
1758 { "Max Len", "alcap.ssim.max",
1759 FT_UINT16
, BASE_DEC
, NULL
, 0,
1763 { &hf_alcap_ssisa_max_sssar_fw
,
1764 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sssar.max_len.fw",
1765 FT_UINT24
, BASE_DEC
, NULL
, 0,
1768 { &hf_alcap_ssisa_max_sssar_bw
,
1769 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sssar.max_len.fw",
1770 FT_UINT24
, BASE_DEC
, NULL
, 0,
1773 { &hf_alcap_ssisa_max_sscop_sdu_fw
,
1774 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sscop.max_sdu_len.fw",
1775 FT_UINT16
, BASE_DEC
, NULL
, 0,
1778 { &hf_alcap_ssisa_max_sscop_sdu_bw
,
1779 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sscop.max_sdu_len.bw",
1780 FT_UINT16
, BASE_DEC
, NULL
, 0,
1783 { &hf_alcap_ssisa_max_sscop_uu_fw
,
1784 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisa.sscop.max_uu_len.fw",
1785 FT_UINT16
, BASE_DEC
, NULL
, 0,
1788 { &hf_alcap_ssisa_max_sscop_uu_bw
,
1789 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisa.sscop.max_uu_len.bw",
1790 FT_UINT16
, BASE_DEC
, NULL
, 0,
1794 { &hf_alcap_ssisu_max_sssar_fw
,
1795 { "Maximum Len of SSSAR-SDU Forward", "alcap.ssisu.sssar.max_len.fw",
1796 FT_UINT24
, BASE_DEC
, NULL
, 0,
1799 { &hf_alcap_ssisu_max_sssar_bw
,
1800 { "Maximum Len of SSSAR-SDU Backwards", "alcap.ssisu.sssar.max_len.fw",
1801 FT_UINT24
, BASE_DEC
, NULL
, 0,
1804 { &hf_alcap_ssisu_ted
,
1805 { "Transmission Error Detection", "alcap.ssisu.ted",
1806 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1811 { "QoS Codepoint", "alcap.pt.codepoint",
1812 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
1816 { &hf_alcap_plc_max_br_fw
,
1817 { "Maximum Forward Bit Rate", "alcap.plc.bitrate.max.fw",
1818 FT_UINT16
, BASE_DEC
, NULL
, 0,
1821 { &hf_alcap_plc_max_br_bw
,
1822 { "Maximum Backwards Bit Rate", "alcap.plc.bitrate.max.bw",
1823 FT_UINT16
, BASE_DEC
, NULL
, 0,
1826 { &hf_alcap_plc_avg_br_fw
,
1827 { "Average Forward Bit Rate", "alcap.plc.bitrate.avg.fw",
1828 FT_UINT16
, BASE_DEC
, NULL
, 0,
1831 { &hf_alcap_plc_avg_br_bw
,
1832 { "Average Backwards Bit Rate", "alcap.plc.bitrate.avg.bw",
1833 FT_UINT16
, BASE_DEC
, NULL
, 0,
1836 { &hf_alcap_plc_max_sdu_fw
,
1837 { "Maximum Forward CPS SDU Size", "alcap.plc.sdusize.max.fw",
1838 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1841 { &hf_alcap_plc_max_sdu_bw
,
1842 { "Maximum Backwards CPS SDU Size", "alcap.plc.sdusize.max.bw",
1843 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1846 { &hf_alcap_plc_avg_sdu_fw
,
1847 { "Maximum Forward CPS SDU Size", "alcap.plc.sdusize.max.fw",
1848 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1851 { &hf_alcap_plc_avg_sdu_bw
,
1852 { "Maximum Backwards CPS SDU Size", "alcap.plc.sdusize.max.bw",
1853 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
1857 { &hf_alcap_pssiae_pr_type
,
1858 { "Profile Type", "alcap.pssiae.profile.type",
1859 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1860 "I.366.2 Profile Type", HFILL
}
1862 { &hf_alcap_pssiae_pr_id
,
1863 { "Profile Id", "alcap.pssiae.profile.id",
1864 FT_UINT8
, BASE_DEC
, NULL
, 0,
1867 { &hf_alcap_pssiae_lb
,
1868 { "Loopback", "alcap.pssiae.lb",
1869 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1872 { &hf_alcap_pssiae_rc
,
1873 { "Rate Control", "alcap.pssiae.rc",
1874 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1877 { &hf_alcap_pssiae_syn
,
1878 { "Synchronization", "alcap.pssiae.syn",
1879 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1880 "Transport of synchronization of change in SSCS operation", HFILL
}
1882 { &hf_alcap_pssiae_frm
,
1883 { "Frame Mode", "alcap.pssiae.frm",
1884 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1887 { &hf_alcap_pssiae_cmd
,
1888 { "Circuit Mode", "alcap.pssiae.cmd",
1889 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x40,
1892 { &hf_alcap_pssiae_mfr2
,
1893 { "Multi-Frequency R2", "alcap.pssiae.mfr2",
1894 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x20,
1897 { &hf_alcap_pssiae_mfr1
,
1898 { "Multi-Frequency R1", "alcap.pssiae.mfr1",
1899 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x10,
1902 { &hf_alcap_pssiae_dtmf
,
1903 { "DTMF", "alcap.pssiae.dtmf",
1904 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x08,
1907 { &hf_alcap_pssiae_cas
,
1908 { "CAS", "alcap.pssiae.cas",
1909 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x04,
1910 "Channel Associated Signalling", HFILL
}
1912 { &hf_alcap_pssiae_fax
,
1913 { "Fax", "alcap.pssiae.fax",
1914 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x02,
1915 "Facsimile", HFILL
}
1917 { &hf_alcap_pssiae_pcm
,
1918 { "PCM Mode", "alcap.pssiae.pcm",
1919 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
1922 { &hf_alcap_pssiae_max_len
,
1923 { "Max Len of FM Data", "alcap.pssiae.max_fmdata_len",
1924 FT_UINT16
, BASE_DEC
, NULL
, 0,
1927 { &hf_alcap_pssiae_oui
,
1928 { "OUI", "alcap.pssiae.oui",
1929 FT_BYTES
, BASE_NONE
, NULL
, 0,
1930 "Organizational Unique Identifier", HFILL
}
1933 { &hf_alcap_pssime_frm
,
1934 { "Frame Mode", "alcap.pssime.frm",
1935 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1938 { &hf_alcap_pssime_lb
,
1939 { "Loopback", "alcap.pssime.lb",
1940 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x40,
1943 { &hf_alcap_pssime_mult
,
1944 { "Multiplier", "alcap.pssime.mult",
1945 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
1948 { &hf_alcap_pssime_max
,
1949 { "Max Len", "alcap.pssime.max",
1950 FT_UINT16
, BASE_DEC
, NULL
, 0,
1955 { "SUCI", "alcap.suci",
1956 FT_UINT8
, BASE_HEX
, NULL
, 0,
1957 "Served User Correlation Id", HFILL
}
1961 { "Address", "alcap.onsea.addr",
1962 FT_BYTES
, BASE_NONE
, NULL
, 0,
1966 { &hf_alcap_ssiae_pr_type
,
1967 { "Profile Type", "alcap.ssiae.profile.type",
1968 FT_UINT8
, BASE_DEC
, VALS(audio_profile_type
), 0xc0,
1969 "I.366.2 Profile Type", HFILL
}
1971 { &hf_alcap_ssiae_lb
,
1972 { "Loopback", "alcap.ssiae.lb",
1973 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1976 { &hf_alcap_ssiae_rc
,
1977 { "Rate Control", "alcap.ssiae.rc",
1978 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1981 { &hf_alcap_ssiae_syn
,
1982 { "Synchronization", "alcap.ssiae.syn",
1983 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0xc0,
1984 "Transport of synchronization of change in SSCS operation", HFILL
}
1986 { &hf_alcap_ssiae_pr_id
,
1987 { "Profile Id", "alcap.ssiae.profile.id",
1988 FT_UINT8
, BASE_DEC
, NULL
, 0,
1991 { &hf_alcap_ssiae_frm
,
1992 { "Frame Mode", "alcap.ssiae.frm",
1993 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
1996 { &hf_alcap_ssiae_cmd
,
1997 { "Circuit Mode", "alcap.ssiae.cmd",
1998 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x40,
2001 { &hf_alcap_ssiae_mfr2
,
2002 { "Multi-Frequency R2", "alcap.ssiae.mfr2",
2003 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x20,
2006 { &hf_alcap_ssiae_mfr1
,
2007 { "Multi-Frequency R1", "alcap.ssiae.mfr1",
2008 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x10,
2011 { &hf_alcap_ssiae_dtmf
,
2012 { "DTMF", "alcap.ssiae.dtmf",
2013 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x08,
2016 { &hf_alcap_ssiae_cas
,
2017 { "CAS", "alcap.ssiae.cas",
2018 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x04,
2019 "Channel Associated Signalling", HFILL
}
2021 { &hf_alcap_ssiae_fax
,
2022 { "Fax", "alcap.ssiae.fax",
2023 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x02,
2024 "Facsimile", HFILL
}
2026 { &hf_alcap_ssiae_pcm
,
2027 { "PCM Mode", "alcap.ssiae.pcm",
2028 FT_UINT8
, BASE_DEC
, VALS(alaw_ulaw
), 0x01,
2031 { &hf_alcap_ssiae_max_len
,
2032 { "Max Len of FM Data", "alcap.ssiae.max_fmdata_len",
2033 FT_UINT16
, BASE_DEC
, NULL
, 0,
2036 { &hf_alcap_ssiae_oui
,
2037 { "OUI", "alcap.ssiae.oui",
2038 FT_BYTES
, BASE_NONE
, NULL
, 0,
2039 "Organizational Unique Identifier", HFILL
}
2042 { &hf_alcap_ssime_frm
,
2043 { "Frame Mode", "alcap.ssime.frm",
2044 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x80,
2047 { &hf_alcap_ssime_lb
,
2048 { "Loopback", "alcap.ssime.lb",
2049 FT_UINT8
, BASE_DEC
, VALS(enabled_disabled
), 0x40,
2052 { &hf_alcap_ssime_mult
,
2053 { "Multiplier", "alcap.ssime.mult",
2054 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
2057 { &hf_alcap_ssime_max
,
2058 { "Max Len", "alcap.ssime.max",
2059 FT_UINT16
, BASE_DEC
, NULL
, 0,
2063 { &hf_alcap_acc_level
,
2064 { "Congestion Level", "alcap.acc.level",
2065 FT_UINT8
, BASE_DEC
, VALS(congestion_level
), 0,
2070 { "Level", "alcap.cp.level",
2071 FT_UINT8
, BASE_DEC
, VALS(connection_priority
), 0x07,
2076 { "Codepoint", "alcap.hc.codepoint",
2077 FT_UINT8
, BASE_DEC
, NULL
, 0,
2081 { &hf_alcap_pfbw_br_fw
,
2082 { "CPS Forward Bitrate", "alcap.pfbw.bitrate.fw",
2083 FT_UINT24
, BASE_DEC
, NULL
, 0,
2086 { &hf_alcap_pfbw_br_bw
,
2087 { "CPS Backwards Bitrate", "alcap.pfbw.bitrate.bw",
2088 FT_UINT24
, BASE_DEC
, NULL
, 0,
2091 { &hf_alcap_pfbw_bucket_fw
,
2092 { "Forward CPS Bucket Size", "alcap.pfbw.bucket_size.fw",
2093 FT_UINT16
, BASE_DEC
, NULL
, 0,
2096 { &hf_alcap_pfbw_bucket_bw
,
2097 { "Backwards CPS Bucket Size", "alcap.pfbw.bucket_size.bw",
2098 FT_UINT16
, BASE_DEC
, NULL
, 0,
2101 { &hf_alcap_pfbw_size_fw
,
2102 { "Forward CPS Packet Size", "alcap.pfbw.max_size.fw",
2103 FT_UINT8
, BASE_DEC
, NULL
, 0,
2106 { &hf_alcap_pfbw_size_bw
,
2107 { "Backwards CPS Packet Size", "alcap.pfbw.max_size.bw",
2108 FT_UINT8
, BASE_DEC
, NULL
, 0,
2112 { &hf_alcap_pvbws_br_fw
,
2113 { "Peak CPS Forward Bitrate", "alcap.pvbws.bitrate.fw",
2114 FT_UINT24
, BASE_DEC
, NULL
, 0,
2117 { &hf_alcap_pvbws_br_bw
,
2118 { "Peak CPS Backwards Bitrate", "alcap.pvbws.bitrate.bw",
2119 FT_UINT24
, BASE_DEC
, NULL
, 0,
2122 { &hf_alcap_pvbws_bucket_fw
,
2123 { "Peak Forward CPS Bucket Size", "alcap.pvbws.bucket_size.fw",
2124 FT_UINT16
, BASE_DEC
, NULL
, 0,
2127 { &hf_alcap_pvbws_bucket_bw
,
2128 { "Peak Backwards CPS Bucket Size", "alcap.pvbws.bucket_size.bw",
2129 FT_UINT16
, BASE_DEC
, NULL
, 0,
2132 { &hf_alcap_pvbws_size_fw
,
2133 { "Forward CPS Packet Size", "alcap.pvbws.max_size.fw",
2134 FT_UINT8
, BASE_DEC
, NULL
, 0,
2137 { &hf_alcap_pvbws_size_bw
,
2138 { "Backwards CPS Packet Size", "alcap.pvbws.max_size.bw",
2139 FT_UINT8
, BASE_DEC
, NULL
, 0,
2142 { &hf_alcap_pvbws_stt
,
2143 { "Source Traffic Type", "alcap.pvbws.stt",
2144 FT_UINT8
, BASE_DEC
, NULL
, 0,
2148 { &hf_alcap_pvbwt_peak_br_fw
,
2149 { "Peak CPS Forward Bitrate", "alcap.pvbwt.bitrate.fw",
2150 FT_UINT24
, BASE_DEC
, NULL
, 0,
2153 { &hf_alcap_pvbwt_peak_br_bw
,
2154 { "Peak CPS Backwards Bitrate", "alcap.pvbwt.bitrate.bw",
2155 FT_UINT24
, BASE_DEC
, NULL
, 0,
2158 { &hf_alcap_pvbwt_peak_bucket_fw
,
2159 { "Peak Forward CPS Bucket Size", "alcap.pvbwt.bucket_size.fw",
2160 FT_UINT16
, BASE_DEC
, NULL
, 0,
2163 { &hf_alcap_pvbwt_peak_bucket_bw
,
2164 { "Peak Backwards CPS Bucket Size", "alcap.pvbwt.bucket_size.bw",
2165 FT_UINT16
, BASE_DEC
, NULL
, 0,
2168 { &hf_alcap_pvbwt_sust_br_fw
,
2169 { "Sustainable CPS Forward Bitrate", "alcap.pvbwt.bitrate.fw",
2170 FT_UINT24
, BASE_DEC
, NULL
, 0,
2173 { &hf_alcap_pvbwt_sust_br_bw
,
2174 { "Sustainable CPS Backwards Bitrate", "alcap.pvbwt.bitrate.bw",
2175 FT_UINT24
, BASE_DEC
, NULL
, 0,
2178 { &hf_alcap_pvbwt_sust_bucket_fw
,
2179 { "Sustainable Forward CPS Bucket Size", "alcap.pvbwt.bucket_size.fw",
2180 FT_UINT16
, BASE_DEC
, NULL
, 0,
2183 { &hf_alcap_pvbwt_sust_bucket_bw
,
2184 { "Sustainable Backwards CPS Bucket Size", "alcap.pvbwt.bucket_size.bw",
2185 FT_UINT16
, BASE_DEC
, NULL
, 0,
2188 { &hf_alcap_pvbwt_size_fw
,
2189 { "Forward CPS Packet Size", "alcap.pvbwt.max_size.fw",
2190 FT_UINT8
, BASE_DEC
, NULL
, 0,
2193 { &hf_alcap_pvbwt_size_bw
,
2194 { "Backwards CPS Packet Size", "alcap.pvbwt.max_size.bw",
2195 FT_UINT8
, BASE_DEC
, NULL
, 0,
2199 { &hf_alcap_fbw_br_fw
,
2200 { "CPS Forward Bitrate", "alcap.fbw.bitrate.fw",
2201 FT_UINT24
, BASE_DEC
, NULL
, 0,
2204 { &hf_alcap_fbw_br_bw
,
2205 { "CPS Backwards Bitrate", "alcap.fbw.bitrate.bw",
2206 FT_UINT24
, BASE_DEC
, NULL
, 0,
2209 { &hf_alcap_fbw_bucket_fw
,
2210 { "Forward CPS Bucket Size", "alcap.fbw.bucket_size.fw",
2211 FT_UINT16
, BASE_DEC
, NULL
, 0,
2214 { &hf_alcap_fbw_bucket_bw
,
2215 { "Backwards CPS Bucket Size", "alcap.fbw.bucket_size.bw",
2216 FT_UINT16
, BASE_DEC
, NULL
, 0,
2219 { &hf_alcap_fbw_size_fw
,
2220 { "Forward CPS Packet Size", "alcap.fbw.max_size.fw",
2221 FT_UINT8
, BASE_DEC
, NULL
, 0,
2224 { &hf_alcap_fbw_size_bw
,
2225 { "Backwards CPS Packet Size", "alcap.fbw.max_size.bw",
2226 FT_UINT8
, BASE_DEC
, NULL
, 0,
2230 { &hf_alcap_vbws_br_fw
,
2231 { "CPS Forward Bitrate", "alcap.vbws.bitrate.fw",
2232 FT_UINT24
, BASE_DEC
, NULL
, 0,
2235 { &hf_alcap_vbws_br_bw
,
2236 { "CPS Backwards Bitrate", "alcap.vbws.bitrate.bw",
2237 FT_UINT24
, BASE_DEC
, NULL
, 0,
2240 { &hf_alcap_vbws_bucket_fw
,
2241 { "Forward CPS Bucket Size", "alcap.vbws.bucket_size.fw",
2242 FT_UINT16
, BASE_DEC
, NULL
, 0,
2245 { &hf_alcap_vbws_bucket_bw
,
2246 { "Backwards CPS Bucket Size", "alcap.vbws.bucket_size.bw",
2247 FT_UINT16
, BASE_DEC
, NULL
, 0,
2250 { &hf_alcap_vbws_size_fw
,
2251 { "Forward CPS Packet Size", "alcap.vbws.max_size.fw",
2252 FT_UINT8
, BASE_DEC
, NULL
, 0,
2255 { &hf_alcap_vbws_size_bw
,
2256 { "Backwards CPS Packet Size", "alcap.vbws.max_size.bw",
2257 FT_UINT8
, BASE_DEC
, NULL
, 0,
2260 { &hf_alcap_vbws_stt
,
2261 { "Source Traffic Type", "alcap.vbws.stt",
2262 FT_UINT8
, BASE_DEC
, NULL
, 0,
2266 { &hf_alcap_vbwt_peak_br_fw
,
2267 { "Peak CPS Forward Bitrate", "alcap.vbwt.bitrate.fw",
2268 FT_UINT24
, BASE_DEC
, NULL
, 0,
2271 { &hf_alcap_vbwt_peak_br_bw
,
2272 { "Peak CPS Backwards Bitrate", "alcap.vbwt.bitrate.bw",
2273 FT_UINT24
, BASE_DEC
, NULL
, 0,
2276 { &hf_alcap_vbwt_peak_bucket_fw
,
2277 { "Peak Forward CPS Bucket Size", "alcap.vbwt.bucket_size.fw",
2278 FT_UINT16
, BASE_DEC
, NULL
, 0,
2281 { &hf_alcap_vbwt_peak_bucket_bw
,
2282 { "Peak Backwards CPS Bucket Size", "alcap.vbwt.bucket_size.bw",
2283 FT_UINT16
, BASE_DEC
, NULL
, 0,
2286 { &hf_alcap_vbwt_sust_br_fw
,
2287 { "Sustainable CPS Forward Bitrate", "alcap.vbwt.bitrate.fw",
2288 FT_UINT24
, BASE_DEC
, NULL
, 0,
2291 { &hf_alcap_vbwt_sust_br_bw
,
2292 { "Sustainable CPS Backwards Bitrate", "alcap.vbwt.bitrate.bw",
2293 FT_UINT24
, BASE_DEC
, NULL
, 0,
2296 { &hf_alcap_vbwt_sust_bucket_fw
,
2297 { "Sustainable Forward CPS Bucket Size", "alcap.vbwt.bucket_size.fw",
2298 FT_UINT16
, BASE_DEC
, NULL
, 0,
2301 { &hf_alcap_vbwt_sust_bucket_bw
,
2302 { "Sustainable Backwards CPS Bucket Size", "alcap.vbwt.bucket_size.bw",
2303 FT_UINT16
, BASE_DEC
, NULL
, 0,
2306 { &hf_alcap_vbwt_size_fw
,
2307 { "Forward CPS Packet Size", "alcap.vbwt.max_size.fw",
2308 FT_UINT8
, BASE_DEC
, NULL
, 0,
2311 { &hf_alcap_vbwt_size_bw
,
2312 { "Backwards CPS Packet Size", "alcap.vbwt.max_size.bw",
2313 FT_UINT8
, BASE_DEC
, NULL
, 0,
2317 { &hf_alcap_leg_osaid
,
2318 { "Leg's ERQ OSA id", "alcap.leg.osaid",
2319 FT_UINT32
, BASE_HEX
, NULL
, 0,
2322 { &hf_alcap_leg_dsaid
,
2323 { "Leg's ECF OSA id", "alcap.leg.dsaid",
2324 FT_UINT32
, BASE_HEX
, NULL
, 0,
2327 { &hf_alcap_leg_pathid
,
2328 { "Leg's path id", "alcap.leg.pathid",
2329 FT_UINT32
, BASE_DEC
, NULL
, 0,
2332 { &hf_alcap_leg_cid
,
2333 { "Leg's channel id", "alcap.leg.cid",
2334 FT_UINT32
, BASE_DEC
, NULL
, 0,
2337 { &hf_alcap_leg_sugr
,
2338 { "Leg's SUGR", "alcap.leg.sugr",
2339 FT_UINT32
, BASE_HEX
, NULL
, 0,
2342 { &hf_alcap_leg_dnsea
,
2343 { "Leg's destination NSAP", "alcap.leg.dnsea",
2344 FT_STRING
, BASE_NONE
, NULL
, 0,
2347 { &hf_alcap_leg_onsea
,
2348 { "Leg's originating NSAP", "alcap.leg.onsea",
2349 FT_STRING
, BASE_NONE
, NULL
, 0,
2352 { &hf_alcap_leg_frame
,
2353 { "a message of this leg", "alcap.leg.msg",
2354 FT_FRAMENUM
, BASE_NONE
, NULL
, 0,
2357 { &hf_alcap_leg_release_cause
,
2358 { "Leg's cause value in REL", "alcap.leg.cause",
2359 FT_UINT8
, BASE_DEC
, VALS(cause_values_itu
), 0,
2370 ¶m_infos
[0].ett
,
2371 ¶m_infos
[1].ett
,
2372 ¶m_infos
[2].ett
,
2373 ¶m_infos
[3].ett
,
2374 ¶m_infos
[4].ett
,
2375 ¶m_infos
[5].ett
,
2376 ¶m_infos
[6].ett
,
2377 ¶m_infos
[7].ett
,
2378 ¶m_infos
[8].ett
,
2379 ¶m_infos
[9].ett
,
2380 ¶m_infos
[10].ett
,
2381 ¶m_infos
[11].ett
,
2382 ¶m_infos
[12].ett
,
2383 ¶m_infos
[13].ett
,
2384 ¶m_infos
[14].ett
,
2385 ¶m_infos
[15].ett
,
2386 ¶m_infos
[16].ett
,
2387 ¶m_infos
[17].ett
,
2388 ¶m_infos
[18].ett
,
2389 ¶m_infos
[19].ett
,
2390 ¶m_infos
[20].ett
,
2391 ¶m_infos
[21].ett
,
2392 ¶m_infos
[22].ett
,
2393 ¶m_infos
[23].ett
,
2394 ¶m_infos
[24].ett
,
2395 ¶m_infos
[25].ett
,
2396 ¶m_infos
[26].ett
,
2397 ¶m_infos
[27].ett
,
2398 ¶m_infos
[28].ett
,
2399 ¶m_infos
[29].ett
,
2400 ¶m_infos
[30].ett
,
2401 ¶m_infos
[31].ett
,
2402 ¶m_infos
[32].ett
,
2403 ¶m_infos
[33].ett
,
2404 ¶m_infos
[34].ett
,
2405 ¶m_infos
[35].ett
,
2408 static ei_register_info ei
[] = {
2409 { &ei_alcap_parameter_field_bad_length
, { "alcap.parameter_field_bad_length", PI_MALFORMED
, PI_WARN
, "Wrong length for parameter fields", EXPFILL
}},
2410 { &ei_alcap_undecoded
, { "alcap.undecoded", PI_UNDECODED
, PI_WARN
, "Undecoded", EXPFILL
}},
2411 { &ei_alcap_release_cause_not31
, { "alcap.leg.cause.not31", PI_RESPONSE_CODE
, PI_WARN
, "Leg Release cause != 31", EXPFILL
}},
2412 { &ei_alcap_abnormal_release
, { "alcap.abnormal_release", PI_RESPONSE_CODE
, PI_WARN
, "Abnormal Release", EXPFILL
}},
2413 { &ei_alcap_response
, { "alcap.response", PI_RESPONSE_CODE
, PI_NOTE
, " ", EXPFILL
}},
2416 proto_alcap
= proto_register_protocol(alcap_proto_name
, alcap_proto_name_short
, "alcap");
2418 register_dissector("alcap", dissect_alcap
, proto_alcap
);
2420 proto_register_field_array(proto_alcap
, hf
, array_length(hf
));
2421 proto_register_subtree_array(ett
, array_length(ett
));
2422 expert_alcap
= expert_register_protocol(proto_alcap
);
2423 expert_register_field_array(expert_alcap
, ei
, array_length(ei
));
2425 alcap_module
= prefs_register_protocol(proto_alcap
, NULL
);
2427 prefs_register_bool_preference(alcap_module
, "leg_info",
2428 "Keep Leg Information",
2429 "Whether persistent call leg information is to be kept",
2430 &keep_persistent_info
);
2432 legs_by_dsaid
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2433 legs_by_osaid
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2434 legs_by_bearer
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
2439 proto_reg_handoff_alcap(void)
2441 dissector_handle_t alcap_handle
= find_dissector("alcap");
2443 dissector_add_uint("mtp3.service_indicator", MTP_SI_AAL2
, alcap_handle
);