MSWSP: add two more Property Sets
[wireshark-wip.git] / epan / dissectors / packet-dpnss.c
blobbfd803a8697e96f1dca82a2419aa0ab6d9a504ab
1 /* packet-dpnss.c
2 * Routines for DPNSS/DASS2 dissection
3 * Copyright 2007, Anders Broman <anders.broman[at]ericsson.com>
5 * Supplementary string parameter table and testing by Tomas Muehlhoff.
7 * $Id$
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * References:
28 * ND1301:2001/03 http://www.nicc.org.uk/nicc-public/Public/interconnectstandards/dpnss/nd1301_2004_11.pdf
29 * http://acacia-net.com/wwwcla/protocol/dass2_l3.htm
32 #include "config.h"
34 #include <stdlib.h>
36 #include <glib.h>
38 #include <epan/packet.h>
40 void proto_register_dpnss(void);
42 /* Initialize the protocol and registered fields */
43 static int proto_dpnss = -1;
44 static int hf_dpnss_msg_grp_id = -1;
45 static int hf_dpnss_cc_msg_type = -1;
46 static int hf_dpnss_e2e_msg_type = -1;
47 static int hf_dpnss_LbL_msg_type = -1;
48 static int hf_dpnss_ext_bit = -1;
49 static int hf_dpnss_ext_bit_notall = -1;
50 static int hf_dpnss_sic_type = -1;
51 static int hf_dpnss_sic_details_for_speech = -1;
52 static int hf_dpnss_sic_details_for_data1 = -1;
53 static int hf_dpnss_sic_details_for_data2 = -1;
54 static int hf_dpnss_dest_addr = -1;
55 static int hf_dpnss_sic_oct2_data_type = -1;
56 static int hf_dpnss_sic_oct2_duplex = -1;
57 static int hf_dpnss_sic_oct2_sync_data_format = -1;
58 static int hf_dpnss_sic_oct2_sync_byte_timing = -1;
59 static int hf_dpnss_sic_oct2_net_ind_clk = -1;
60 static int hf_dpnss_sic_oct2_async_data = -1;
61 static int hf_dpnss_sic_oct2_async_flow_ctrl = -1;
62 static int hf_dpnss_clearing_cause = -1;
63 static int hf_dpnss_rejection_cause = -1;
64 static int hf_dpnss_man_code = -1;
65 static int hf_dpnss_subcode = -1;
66 static int hf_dpnss_maintenance_action = -1;
68 /* parameters */
69 static int hf_dpnss_a_b_party_addr = -1;
70 static int hf_dpnss_call_idx = -1;
72 #define DPNNS_MESSAGE_GROUP_CC 0
73 #define DPNNS_MESSAGE_GROUP_E2E 2
74 #define DPNNS_MESSAGE_GROUP_LbL 4
76 #define DPNSS_CC_MSG_ISRM_C 0
77 #define DPNSS_CC_MSG_ISRM_I 1
78 #define DPNSS_CC_MSG_RM_C 2
79 #define DPNSS_CC_MSG_RM_I 3
80 #define DPNSS_CC_MSG_CS 4
81 #define DPNSS_CC_MSG_CCM 5
82 #define DPNSS_CC_MSG_NIM 6
83 #define DPNSS_CC_MSG_CA 7
84 #define DPNSS_CC_MSG_CRM 8
85 #define DPNSS_CC_MSG_NAM 9
86 #define DPNSS_CC_MSG_RRM 10
87 #define DPNSS_CC_MSG_SSRM_I 11
88 #define DPNSS_CC_MSG_SSRM_C 12
90 /* Initialize the subtree pointers */
91 static int ett_dpnss = -1;
92 static int ett_dpnss_sel_field = -1;
93 static int ett_dpnss_sic_field = -1;
94 static int ett_dpnss_ind_field = -1;
95 static int ett_dpnss_sup_str = -1;
97 static const value_string dpnss_msg_grp_id_vals[] = {
98 {0, "Call Control Message Group"},
99 {2, "End-to-End Message Group"},
100 {4, "Link-by-Link Message Group"},
101 {0, NULL }
104 static const value_string dpnss_cc_msg_type_vals[] = {
105 {DPNSS_CC_MSG_ISRM_C, "INITIAL SERVICE REQUEST Message (COMPLETE) - ISRM(C)"},
106 {DPNSS_CC_MSG_ISRM_I, "INITIAL SERVICE REQUEST Message (INCOMPLETE) - ISRM(I)"},
107 {DPNSS_CC_MSG_RM_C, "RECALL Message (COMPLETE) - RM(C)"},
108 {DPNSS_CC_MSG_RM_I, "RECALL Message (INCOMPLETE) - RM(I)"},
109 {DPNSS_CC_MSG_CS, "CHANNEL SEIZED - CS"},
110 {DPNSS_CC_MSG_CCM, "CALL CONNECTED Message - CCM"},
111 {DPNSS_CC_MSG_NIM, "NETWORK INDICATION Message - NIM"},
112 {DPNSS_CC_MSG_CA, "CALL ARRIVAL Message - CA"},
113 {DPNSS_CC_MSG_CRM, "CLEAR REQUEST Message - CRM/CLEAR INDICATION Message - CIM"}, /* Humm chek 2.1.7/2.1.8 - depends on dir? */
114 {DPNSS_CC_MSG_NAM, "NUMBER ACKNOWLEDGE Message - NAM"},
115 {DPNSS_CC_MSG_RRM, "RECALL REJECTION Message - RRM"},
116 {DPNSS_CC_MSG_SSRM_I, "SUBSEQUENT SERVICE REQUEST Message (INCOMPLETE) - SSRM(I)"},
117 {DPNSS_CC_MSG_SSRM_C, "SUBSEQUENT SERVICE REQUEST Message (COMPLETE) - SSRM(C)"},
118 { 0, NULL }
122 static const value_string dpnss_cc_msg_short_type_vals[] = {
123 {DPNSS_CC_MSG_ISRM_C, "ISRM(C)"},
124 {DPNSS_CC_MSG_ISRM_I, "ISRM(I)"},
125 {DPNSS_CC_MSG_RM_C, "RM(C)"},
126 {DPNSS_CC_MSG_RM_I, "RM(I)"},
127 {DPNSS_CC_MSG_CS, "CS"},
128 {DPNSS_CC_MSG_CCM, "CCM"},
129 {DPNSS_CC_MSG_CA, "CA"},
130 {DPNSS_CC_MSG_NIM, "NIM"},
131 {DPNSS_CC_MSG_CRM, "CRM/CIM"}, /* Humm chek 2.1.7/2.1.8 - depends on dir? */
132 {DPNSS_CC_MSG_NAM, "NAM"},
133 {DPNSS_CC_MSG_RRM, "RRM"},
134 {DPNSS_CC_MSG_SSRM_I, "SSRM(I)"},
135 {DPNSS_CC_MSG_SSRM_C, "SSRM(C)"},
136 {0, NULL }
139 #define DPNSS_E2E_MSG_EEM_C 2
140 #define DPNSS_E2E_MSG_EEM_I 3
141 #define DPNSS_E2E_MSG_SCRM 4
142 #define DPNSS_E2E_MSG_SCIM 5
143 #define DPNSS_E2E_MSG_ERM_C 6
144 #define DPNSS_E2E_MSG_ERM_I 7
145 #define DPNSS_E2E_MSG_NSIM 8
148 /* 2.2 END-TO-END MESSAGE GROUP */
149 static const value_string dpnss_e2e_msg_type_vals[] = {
150 {2, "END-to-END Message (COMPLETE) - EEM(C)"},
151 {3, "END-to-END Message (INCOMPLETE) - EEM(I)"},
152 {4, "SINGLE-CHANNEL CLEAR REQUEST Message - SCRM"},
153 {5, "SINGLE-CHANNEL CLEAR INDICATION Message - SCIM"},
154 {6, "END-to-END RECALL Message (COMPLETE) - ERM(C)"},
155 {7, "END-to-END RECALL Message (INCOMPLETE) - ERM(I)"},
156 {8, "NON SPECIFIED INFORMATION Message - NSIM"},
157 { 0, NULL }
160 static const value_string dpnss_e2e_msg_short_type_vals[] = {
161 {2, "EEM(C)"},
162 {3, "EEM(I)"},
163 {4, "SCRM"},
164 {5, "SCIM"},
165 {6, "ERM(C)"},
166 {7, "ERM(I)"},
167 {8, "NSIM"},
168 { 0, NULL }
171 #define DPNSS_LbL_MSG_LLM_C 0
172 #define DPNSS_LbL_MSG_LLM_I 1
173 #define DPNSS_LbL_MSG_LLRM 2
174 #define DPNSS_LbL_MSG_SM 4
175 #define DPNSS_LbL_MSG_LMM 5
176 #define DPNSS_LbL_MSG_LMRM 6
178 /* 2.3 LINK-BY-LINK MESSAGE GROUP */
179 static const value_string dpnss_LbL_msg_type_vals[] = {
180 {0, "LINK-by-LINK Message (COMPLETE) - LLM(C)"},
181 {1, "LINK-by-LINK Message (INCOMPLETE) - LLM(I)"},
182 {2, "LINK-by-LINK REJECT Message - LLRM"},
183 {4, "SWAP Message - SM"},
184 {5, "LINK MAINTENANCE Message - LMM"},
185 {6, "LINK MAINTENANCE REJECT Message - LMRM"},
186 { 0, NULL }
189 static const value_string dpnss_LbL_msg_short_type_vals[] = {
190 {0, "LLM(C)"},
191 {1, "LLM(I)"},
192 {2, "LLRM"},
193 {4, "SM"},
194 {5, "LMM"},
195 {6, "LMRM"},
196 { 0, NULL }
199 static const true_false_string dpnss_ext_bit_vals = {
200 "further octet(s) follow",
201 "no further octets"
204 static const true_false_string dpnss_ext_bit_no_ext_vals = {
205 "no further octets",
206 "Invalid"
208 /* SECTION 4 ANNEX 1 */
209 static const value_string dpnss_sic_type_type_vals[] = {
210 {0, "invalid"},
211 {1, "speech"},
212 {2, "data"},
213 {3, "data"},
214 {4, "interworking with DASS 2 - treat as data"},
215 {5, "interworking with DASS 2 - treat as data"},
216 {6, "interworking with DASS 2 - treat as data"},
217 {7, "interworking with DASS 2 - treat as data"},
218 { 0, NULL }
221 static const value_string dpnss_sic_details_for_speech_vals[] = {
222 {0, "64 kbit/s PCM G.711 A-Law or analogue"},
223 {1, "32 kbit/s ADPCM G.721"},
224 {2, "64 kbit/s PCM G.711 u-Law or analogue"},
225 {3, "Invalid"},
226 {4, "Invalid"},
227 {5, "Invalid"},
228 {6, "Invalid"},
229 {7, "Invalid"},
230 {8, "Invalid"},
231 {9, "Invalid"},
232 {10, "Invalid"},
233 {11, "Invalid"},
234 {12, "Invalid"},
235 {13, "Invalid"},
236 {14, "Invalid"},
237 {15, "Invalid"},
238 { 0, NULL }
241 static const value_string dpnss_sic_details_for_data_rates1_vals[] = {
242 {0, "64000 bit/s"},
243 {1, "56000 bit/s"},
244 {2, "48000 bit/s"},
245 {3, "32000 bit/s"},
246 {4, "19200 bit/s"},
247 {5, "16000 bit/s"},
248 {6, "14400 bit/s"},
249 {7, "12000 bit/s"},
250 {8, "9600 bit/s"},
251 {9, "8000 bit/s"},
252 {10, "7200 bit/s"},
253 {11, "4800 bit/s"},
254 {12, "3600 bit/s"},
255 {13, "2400 bit/s"},
256 {14, "1200 bit/s"},
257 {15, "600 bit/s"},
258 { 0, NULL }
261 static const value_string dpnss_sic_details_for_data_rates2_vals[] = {
262 {0, "300 bit/s"},
263 {1, "200 bit/s"},
264 {2, "150 bit/s"},
265 {3, "134.5 bit/s"},
266 {4, "110 bit/s"},
267 {5, "100 bit/s"},
268 {6, "75 bit/s"},
269 {7, "50 bit/s"},
270 {8, "75/1200 bit/s"},
271 {9, "1200/75 bit/s"},
272 {10, "invalid"},
273 {11, "invalid"},
274 {12, "invalid"},
275 {13, "invalid"},
276 {14, "invalid"},
277 {15, "invalid"},
278 { 0, NULL }
280 /* Octet 2 */
282 static const value_string dpnss_sic_oct2_data_type_vals[] = {
283 {0, "Invalid"},
284 {1, "Invalid"},
285 {2, "Invalid"},
286 {3, "Synchronous"},
287 {4, "Synchronous"},
288 {5, "Asynchronous"},
289 {6, "Asynchronous"},
290 {7, "Asynchronous"},
291 { 0, NULL }
294 static const true_false_string dpnss_duplex_vals = {
295 "Half Duplex (HDX)",
296 "Full Duplex (FDX)"
299 static const true_false_string dpnss_sic_oct2_sync_data_format_vals = {
300 "X.25 Packet Mode",
301 "Anonymous or Unformatted"
304 static const true_false_string dpnss_sic_oct2_net_ind_clk_vals = {
305 "Bits E4/E5/E6 indicate phase",
306 "Clock Locked to Transmission"
309 static const true_false_string dpnss_provided_vals = {
310 "Provided",
311 "Not Provided"
314 static const value_string dpnss_sic_oct2_async_data_type_vals[] = {
315 {0, "Unspecified"},
316 {1, "5 data bits"},
317 {2, "7 data bits"},
318 {3, "8 data bits"},
319 { 0, NULL }
321 static const true_false_string dpnss_flow_control_vals = {
322 "TA has ESRA capability",
323 "TA does not have ESRA capability"
326 /* SECTION 4 Global Issue 7
327 * ANNEX 3 CLEARING/REJECTION CAUSE CODES
329 static const value_string dpnss_clearing_cause_code_vals[] = {
330 {0x29, "Access Barred"},
331 {0x14, "Acknowledgement"},
332 {0x01, "Address Incomplete"},
333 {0x08, "Busy"},
334 {0x23, "Channel Out of Service"},
335 {0x2d, "DTE Controlled Not Ready"},
336 {0x07, "Congestion"},
337 {0x30, "Call Termination"},
338 {0x18, "Facility Not Registered"},
339 {0x0a, "Incoming Calls Barred"},
340 {0x13, "Service Incompatible"},
341 {0x1a, "Message Not Understood"},
342 {0x1e, "Network Address Extension-Error"},
343 {0x02, "Network Termination"},
344 {0x00, "Number Unobtainable"},
345 {0x24, "Priority Forced Release"},
346 {0x19, "Reject"},
347 {0x1c, "Route Out of Service"},
348 {0x04, "Subscriber Incompatible"},
349 {0x15, "Signal Not Understood"},
350 {0x16, "Signal Not Valid"},
351 {0x09, "Subscriber Out of Service"},
352 {0x1b, "Signalling System Incompatible"},
353 {0x17, "Service Temporarily Unavailable"},
354 {0x03, "Service Unavailable"},
355 {0x1d, "Transferred"},
356 {0x2e, "DTE Uncontrolled Not Ready"},
357 { 0, NULL }
359 /* ANNEX 6 : MAINTENANCE ACTIONS (p235) */
360 static const value_string dpnss_maintenance_actions_vals[] = {
361 {0x1, "BBC - Back-Busy Control"},
362 {0x2, "LBC - Loop-Back Control"},
363 {0x3, "LBA - Loop-Back Abort"},
364 {0x4, "TCS-R - Traffic Channel Status Request"},
365 {0x5, "ACK - Acknowledge"},
366 {0x6, "NTC - Non-Looped-Back Test Control"},
367 { 0, NULL }
370 /* ANNEX 7 : CODING OF USAGE IDENTIFIERS */
371 static const value_string dpnss_man_code_vals[] = {
372 {0x0, "Reserved"},
373 {0x1, "BT"},
374 {0x2, "Ericsson"},
375 {0x3, "Lucent"},
376 {0x4, "Philips"},
377 {0x5, "Siemens"},
378 {0x6, "Westell"},
379 {0x7, "Mitel"},
380 { 0, NULL }
385 #define DPNSS_NONE 0
386 #define DPNSS_SERV_MAR 1
387 #define DPNSS_STATUS 2
388 #define DPNSS_ROUTE_RES_CLASS 3
389 #define DPNSS_CBR_GRP 4
390 #define DPNSS_FAC_LST_CODE 5
391 #define DPNSS_NO_OF_FUR_TRANS 6
392 #define DPNSS_NO_OF_FUR_ALT_R 7
393 #define DPNSS_INT_CAP_LEV 8
394 #define DPNSS_NESTING_LEVEL 9
395 #define DPNSS_C_PARTY_ADDR 10
396 #define DPNSS_B_PARTY_ADDR 11
397 #define DPNSS_SIC 12
398 #define DPNSS_A_B_PARTY_ADDR 13
399 #define DPNSS_DIVERSION_TYPE 14
400 #define DPNSS_NSI_IDENTIFIER 15
401 #define DPNSS_USER_DEFINED 16
402 #define DPNSS_TEXT 17
403 #define DPNSS_CALL_INDEX 18
404 #define DPNSS_PASSWORD 19
405 #define DPNSS_CALL_DIR 20
406 #define DPNSS_DPNSS_ISDN_TYPE 21
407 #define DPNSS_HC_CLC 22
408 #define DPNSS_ENHANCED_STR_ID 23
409 #define DPNSS_STRING_ID 24
410 #define DPNSS_STRING_ID_LIST 25
411 #define DPNSS_TEXT_TYPE 26
412 #define DPNSS_CHANNEL_STATUS 27
413 #define DPNSS_CHANNEL_NUMBER 28
414 #define DPNSS_BPL 29
415 #define DPNSS_BCL 30
416 #define DPNSS_DEVICE_INDEX 31
417 #define DPNSS_CR_NO 32
418 #define DPNSS_CALL_ID_LENGTH 33
419 #define DPNSS_STATE_OF_DEST 34
420 #define DPNSS_STATE_OF_DEST_QUAL 35
421 #define DPNSS_REASON_FOR_REDIR 36
422 #define DPNSS_CLEARING_CAUSE 37
423 #define DPNSS_RECONT_ADDR 38
424 #define DPNSS_STATE_OF_OPERATOR 39
425 #define DPNSS_NIGHT_SERVICE 40
426 #define DPNSS_PBX_FLAG 41
427 #define DPNSS_NUMBER_OF_CALLS 42
428 #define DPNSS_NUMBER_OF_SERVERS 43
429 #define DPNSS_PRIORITY_LEVEL 44
430 #define DPNSS_LOCATION 45
431 #define DPNSS_SUBADDRESS 46
432 #define DPNSS_ALARM_LEVEL 47
433 #define DPNSS_STAFF_PRESENT 48
434 #define DPNSS_TIME_AND_DATE 49
435 #define DPNSS_SERVICES 50
436 #define DPNSS_PBX_REFERENCE 51
437 #define DPNSS_TRUNK_GROUP_REF_NUMBER 52
438 #define DPNSS_TRUNK_MEMBER_REF_NUMBER 53
439 #define DPNSS_CONF_PARTY_INDEX 54
440 #define DPNSS_CONF_PARTY_DET 55
441 #define DPNSS_ACCOUNT_CODE 56
442 #define DPNSS_CONF_BRIDGE_ADDR 57
443 #define DPNSS_COST_QUALIFIER 58
444 #define DPNSS_CURRENCY_INDICATION 59
445 #define DPNSS_CURRENCY_UNITS 60
446 #define DPNSS_TIME_INTERVAL 61
447 #define DPNSS_UNITS 62
448 #define DPNSS_REMOTE_ADDRESS 63
449 #define DPNSS_TEST_INDEX 64
450 #define DPNSS_TEST_RESULT 65
451 #define DPNSS_TYPE_OF_ASSISTANCE 66
452 #define DPNSS_REST_DOMAIN 67
453 #define DPNSS_GRP_PICK_UP_CODE 68
454 #define DPNSS_PICK_UP_CALL_TYPE 69
455 #define DPNSS_MALICIOUS_CALL_REF 70
456 #define DPNSS_TIMER_VALUE 71
457 #define DPNSS_BEARER_CAP 72
458 #define DPNSS_ISDN_NUM_ATTR 73
459 #define DPNSS_ISDN_DPNSS_SUBADDRESS 74
460 #define DPNSS_ISDN_NUMBER_DIGITS 75
461 #define DPNSS_HIGH_LAYER_COMP 76
462 #define DPNSS_LOW_LAYER_COMP 77
463 #define DPNSS_PROGRESS_INDICATOR 78
464 #define DPNSS_VPN_ACCESS_REF_NUM 79
465 #define DPNSS_INDEX_NUMBER 80
466 #define DPNSS_RESTRICTION_INDICATOR 81
467 #define DPNSS_CAUSE 82
470 typedef struct {
471 gint id_code_no;
472 const char *compact_name;
473 const char *name;
474 gint par1_num;
475 gint par2_num;
476 gint par3_num;
477 gint par4_num;
478 } dpnns_sup_serv_set_t;
480 static const dpnns_sup_serv_set_t dpnns_sup_serv_set[] = {
481 {0, "NOT USED", "NOT USED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
482 {1, "CLC-ORD", "CALLING/CALLED LINE CATEGORY ORDINARY", DPNSS_SERV_MAR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
483 {2, "CLC-DEC", "CALLING/CALLED LINE CATEGORY DECADIC", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
484 {3, "CLC-ISDN", "CALLING/CALLED LINE CATEGORY-PUBLIC ISDN", DPNSS_STATUS, DPNSS_DPNSS_ISDN_TYPE, DPNSS_NONE, DPNSS_NONE },
485 {4, "CLC-PSTN", "CALLING/CALLED LINE CATEGORY-PSTN", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
486 {5, "CLC-MF5", "CALLING/CALLED LINE CATEGORY-SSMF5", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
487 {6, "CLC-OP", "CALLING/CALLED LINE CATEGORY-OPERATOR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
488 {7, "CLC-NET", "CALLING/CALLED LINE CATEGORY-NETWORK", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
489 {8, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
490 {9, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
491 {10, "CBWF-R", "CALL BACK WHEN FREE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
492 {11, "CBWF-FN", "CALL BACK WHEN FREE-FREE NOTIFICATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
493 {12, "CBWF-CSUI", "CALL BACK WHEN FREE-CALL SET-UP(IMMEDIATE)", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
494 {13, "CBWF-C", "CALL BACK WHEN FREE-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
495 {14, "RO", "RING OUT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
496 {15, "CBC", "CALL BACK COMPLETE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
497 {16, "CBWF-CSUD", "CALL BACK WHEN FREE -CALL SET-UP(DELAYED)", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
498 {17, "CBWNU-R", "CALL BACK WHEN NEXT USEDREQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
499 {18, "COS", "CLASS OF SERVICE", DPNSS_ROUTE_RES_CLASS, DPNSS_CBR_GRP, DPNSS_FAC_LST_CODE, DPNSS_NONE},
500 {19, "LA", "LOOP AVOIDANCE", DPNSS_NO_OF_FUR_TRANS, DPNSS_NO_OF_FUR_ALT_R, DPNSS_NONE, DPNSS_NONE },
501 {20, "EI-PVR", "EXECUTIVE INTRUSION-PRIOR VALIDATION", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
502 {21, "EI-R", "EXECUTIVE INTRUSION-REQUEST", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
503 {22, "IPL-R", "INTRUSION PROTECTION LEVEL-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
504 {23, "IPL", "INTRUSION PROTECTION LEVEL", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
505 {24, "EI-C", "EXECUTIVE INTRUSION-CONVERT", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
506 {25, "EI-I", "EXECUTIVE INTRUSION-INTRUDED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
507 {26, "CW", "CALL WAITING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
508 {27, "CO", "CALL OFFER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
509 {28, "SN-REQ", "SEND NEXT-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
510 {29, "HGF", "HUNT GROUP FORWARDED", DPNSS_NESTING_LEVEL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
511 {30, "DIV-V", "DIVERSION-VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
512 {31, "DIV-FM", "DIVERSION-FOLLOW ME", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
513 {32, "DIV-BY", "DIVERSION-BY PASS", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
514 {33, "DIV-CI", "DIVERSION CANCEL-IMMEDIATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
515 {34, "DIV-CR", "DIVERSION CANCEL-ON NO REPLY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
516 {35, "DIV-CB", "DIVERSION CANCEL-ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
517 {36, "DIV-CA", "DIVERSION CANCEL-ALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
518 {37, "DVG-I", "DIVERTING IMMEDIATE", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
519 {38, "DVG-B", "DIVERTING ON BUSY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
520 {39, "DVG-R", "DIVERTING ON NO REPLY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
521 {40, "DVT-I", "DIVERT IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
522 {41, "DVT-B", "DIVERT ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
523 {42, "DVD-I", "DIVERTED IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
524 {43, "DVD-B", "DIVERTED ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
525 {44, "DVD-R", "DIVERTED ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
526 {45, "DVT-R", "DIVERT ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
527 {46, "SIC", "SERVICE INDICATOR CODE", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
528 {47, "BSS-M", "BEARER SERVICE SELECTION-MANDATORY", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
529 {48, "BSS-P", "BEARER SERVICE SELECTION-PREFERRED", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
530 {49, "BSS-N", "BEARER SERVICE SELECTION-NOTIFICATION", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
531 {50, "OLI/CLI", "ORIGINATING LINE IDENTITY/CALLED LINE IDENTITY", DPNSS_A_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
532 {51, "RTI", "ROUTING INFORMATION, ROUTING INFORMATION", DPNSS_DPNSS_ISDN_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
533 {52, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
534 {53, "DVD-E", "DIVERTED-EXTERNALLY", DPNSS_DIVERSION_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
535 {54, "REJ", "REJECT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
536 {55, "ACK", "ACKNOWLEDGE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
537 {56, "SN", "SEND NEXT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
538 {57, "D-SIC", "DASS 2-SERVICE INDICATOR CODE", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
539 {58, "NSI", "NON-SPECIFIED INFORMATION", DPNSS_NSI_IDENTIFIER, DPNSS_USER_DEFINED, DPNSS_USER_DEFINED, DPNSS_NONE },
540 {59, "OCP", "ORIGINALLY CALLED PARTY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
541 {60, "HOLD-REQ", "HOLD REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
542 {61, "RECON", "RECONNECTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
543 {62, "HDG", "HOLDING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
544 {63, "CD-Q", "CALL DISTRIBUTION-QUEUE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
545 {64, "TEXT-M", "TEXT MESSAGE", DPNSS_TEXT, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
546 {65, "SOD-B", "STATE OF DESTINATION-BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
547 {66, "SOD-F", "STATE OF DESTINATION-FREE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
548 {67, "CD-DNQ", "CALL DISTRIBUTION-DO NOT QUEUE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
549 {68, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
550 {69, "CD-LINK", "CALL DISTRIBUTION-LINKED", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
551 {70, "DIV-RSI", "DIVERSION-REMOTE SET IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
552 {71, "DIV-RSB", "DIVERSION-REMOTE SET ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
553 {72, "DIV-RSR", "DIVERSION-REMOTE SET ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
554 {73, "DIV-RCI", "DIVERSION-REMOTE CANCEL IMMEDIATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
555 {74, "DIV-RCB", "DIVERSION-REMOTE CANCEL ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
556 {75, "DIV-RCR", "DIVERSION-REMOTE CANCEL ON NO REPLY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
557 {76, "DIV-RCA", "DIVERSION-REMOTE CANCEL ALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
558 {77, "PASSW", "PASSWORD", DPNSS_PASSWORD, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
559 {78, "SPL", "SPLIT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
560 {79, "TWP", "TWO PARTY", DPNSS_CALL_DIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
561 {80, "ENQ", "ENQUIRY CALL", DPNSS_HC_CLC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
562 {81, "SCE", "SINGLE CHANNEL ENQUIRY", DPNSS_HC_CLC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
563 {82, "TRFD", "TRANSFERRED", DPNSS_CALL_DIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
564 {83, "SHTL", "SHUTTLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
565 {84, "COC", "CONNECTED CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
566 {85, "TRFR", "TRANSFER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
567 {86, "CD-FN", "CALL DISTRIBUTION-FREE NOTIFY", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
568 {87, "ICC", "INTERCOM CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
569 {88, "AD-RQ", "ADD-ON REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
570 {89, "AD-V", "ADD-ON VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
571 {90, "AD-O", "ADDED-ON", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
572 {91, "ENH", "ENHANCED SSMF5", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
573 {92, "BAS", "BASIC SSMF5", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
574 {93, "CD-UNLINK", "CALL DISTRIBUTION-UNLINKED", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
575 {94, "SNU", "SIGNAL NOT UNDERSTOOD", DPNSS_ENHANCED_STR_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
576 {95, "SU", "SERVICE UNAVAILABLE", DPNSS_STRING_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
577 {96, "RR-SNU", "RECALL REJECTED SIGNAL NOT UNDERSTOOD", DPNSS_ENHANCED_STR_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
578 {97, "CD-CSU", "CALL DISTRIBUTION-CALL SET UP", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
579 {98, "IG-SNU", "IGNORED-SIGNAL NOT UNDERSTOOD", DPNSS_STRING_ID_LIST, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
580 {99, "IG-SU", "IGNORED-SERVICE UNAVAILABLE", DPNSS_STRING_ID_LIST, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
581 {100, "TEXT", "TEXTUAL DISPLAY", DPNSS_TEXT, DPNSS_TEXT_TYPE, DPNSS_NONE, DPNSS_NONE },
582 {101, "SIM-A", "SIMULATED ANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
583 {102, "ACT", "ACTIVATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
584 {103, "DEACT", "DEACTIVATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
585 {104, "TCS", "TRAFFIC-CHANNEL STATUS", DPNSS_CHANNEL_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
586 {105, "CHID", "CHANNEL IDENTITY", DPNSS_CHANNEL_NUMBER, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
587 {106, "FR-R", "FORCED RELEASE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
588 {107, "PB-P", "PRIORITY BREAKDOWN-PROTECTION", DPNSS_BPL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
589 {108, "PB-R", "PRIORITY BREAKDOWN-REQUEST", DPNSS_BCL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
590 {109, "DI", "DEVICE IDENTITY", DPNSS_DEVICE_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
591 {110, "ROP-R", "ROUTE OPTIMISATION-REQUEST", DPNSS_CR_NO, DPNSS_CALL_ID_LENGTH, DPNSS_NONE, DPNSS_NONE },
592 {111, "ROP-CSU", "ROUTE OPTIMISATION-CALL SET UP", DPNSS_CALL_ID_LENGTH, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
593 {112, "ROP-CON", "ROUTE OPTIMISATION-CONNECTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
594 {113, "DND", "DO NOT DISTURB", DPNSS_STATE_OF_DEST, DPNSS_STATE_OF_DEST_QUAL, DPNSS_NONE, DPNSS_NONE },
595 {114, "DND-O", "DO NOT DISTURB-OVERRIDE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
596 {115, "DND-S", "DO NOT DISTURB-SET", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
597 {116, "DND-C", "DO NOT DISTURB-CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
598 {117, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
599 {118, "EST", "EXTENSION STATUS CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
600 {119, "CDIV", "CONTROLLED DIVERSION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
601 {120, "RDG", "REDIRECTING", DPNSS_REASON_FOR_REDIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
602 {121, "RCF", "REDIRECTING ON CALL FAILURE", DPNSS_CLEARING_CAUSE, DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE },
603 {122, "TOV-R", "TAKEOVER REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
604 {123, "TOV-V", "TAKEOVER VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
605 {124, "SER-R", "SERIES CALL REQUEST", DPNSS_RECONT_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
606 {125, "SER-C", "SERIES CALL-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
607 {126, "SER-E", "SERIES CALL-ESTABLISHMENT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
608 {127, "NS-N, NIGHT","SERVICE-NOTIFICATION", DPNSS_STATE_OF_OPERATOR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
609 {128, "NS-DVT", "NIGHT SERVICE-DIVERT", DPNSS_NIGHT_SERVICE, DPNSS_PBX_FLAG, DPNSS_NONE, DPNSS_NONE },
610 {129, "NS-DVG", "DPNSS_NIGHT_SERVICE-DIVERTING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
611 {130, "NS-DVD", "DPNSS_NIGHT_SERVICE-DIVERTED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
612 {131, "NS-RDVT", "DPNSS_NIGHT_SERVICE-REDIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
613 {132, "NS-RDVG", "DPNSS_NIGHT_SERVICE-REDIVERTING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
614 {133, "NS-RDVD", "DPNSS_NIGHT_SERVICE-REDIVERTED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
615 {134, "NS-DA", "DPNSS_NIGHT_SERVICE-DEACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
616 {135, "Q-INFO", "QUEUE INFORMATION", DPNSS_NUMBER_OF_CALLS, DPNSS_NUMBER_OF_SERVERS, DPNSS_NONE, DPNSS_NONE },
617 {136, "Q-PRIO", "QUEUE PRIORITY", DPNSS_PRIORITY_LEVEL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
618 {137, "SW-V", "SWAP - VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
619 {138, "SW-R", "SWAP - REJECTED", DPNSS_LOCATION, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
620 {139, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
621 {140, "A2", "SSMF5 SIGNAL 'A-2'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
622 {141, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
623 {142, "A5", "SSMF5 SIGNAL 'A-5'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
624 {143, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
625 {144, "A8", "SSMF5 SIGNAL 'A-8'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
626 {145, "A10", "SSMF5 SIGNAL 'A-10'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
627 {146, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
628 {147, "A13", "SSMF5 SIGNAL 'A-13'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
629 {148, "A14", "SSMF5 SIGNAL 'A-14'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
630 {149, "A12", "SSMF5 SIGNAL 'A-12'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
631 {150, "A7", "SSMF5 SIGNAL 'A-7'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
632 {151, "CBWF-CLB", "CALL BACK WHEN FREE-CALL BACK", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
633 {152, "DVT", "DIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
634 {153, "SOD-I", "DPNSS_STATE_OF_DEST-INDETERMINABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
635 {154, "DVG", "DIVERTING", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
636 {155, "SOD-REQ", "REQUEST DPNSS_STATE_OF_DEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
637 {156, "CBWF-CB", "CALL BACK WHEN FREE-CALL BACK REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
638 {157, "NAE-DC", "NETWORK ADDRESS EXTENSION", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
639 {158, "SFI", "SUPPLEMENTARY FACILITIES INHIBITED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
640 {159, "NAE-DI", "NETWORK ADDRESS EXTENSION-DESTINATION INCOMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
641 {160, "DRS", "DIRECT ROUTE SELECT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
642 {161, "AS", "ALARM STATUS", DPNSS_ALARM_LEVEL, DPNSS_STAFF_PRESENT, DPNSS_NONE, DPNSS_NONE },
643 {162, "AS-R", "ALARM STATUS-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
644 {163, "TAD-R", "TIME AND DATE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
645 {164, "TAD", "TIME AND DATE", DPNSS_TIME_AND_DATE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
646 {165, "SATB", "SATELLITE BARRED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
647 {166, "SERV", "SERVICE INFORMATION", DPNSS_SERVICES, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
648 {167, "TID", "TRUNK IDENTITY", DPNSS_PBX_REFERENCE, DPNSS_TRUNK_GROUP_REF_NUMBER, DPNSS_TRUNK_MEMBER_REF_NUMBER, DPNSS_NONE},
649 {168, "PARK", "PARK REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
650 {169, "PKD", "PARKED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
651 {170, "AC-NAO", "ADD-ON CONFERENCE-NO ADD ON CURRENTLY AVAILABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
652 {171, "CBM-R", "CALL BACK MESSAGING-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
653 {172, "CBM-C", "CALL BACK MESSAGING-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
654 {173, "NAE-CC", "NETWORK ADDRESS EXTENSION-CALLING/CALLED IDENTITY COMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
655 {174, "NAE-CI", "NETWORK ADDRESS EXTENSION-CALLING/CALLED IDENTITY INCOMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
656 {175, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
657 {176, "AC-CDC", "ADD-ON CONFERENCE-CLEARDOWN CONFERENCE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
658 {177, "AC-PI", "ADD-ON CONFERENCE-PARTY INDEX", DPNSS_CONF_PARTY_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
659 {178, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
660 {179, "AC-DR", "ADD-ON CONFERENCE - DETAILS REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
661 {180, "AC-PD", "ADD-ON CONFERENCE - PARTY", DPNSS_CONF_PARTY_DET, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
662 {181, "AC-CBI", "ADD-ON CONFERENCE - CONFERENCE BRIDGE IDENTITY", DPNSS_CONF_BRIDGE_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
663 {182, "CH-AC", "CHARGE REPORTING ACCOUNT CODE", DPNSS_ACCOUNT_CODE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
664 {183, "CH-ACR", "CHARGE REPORTING ACCOUNT CODE REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
665 {184, "CH-ACT", "CHARGE REPORTING - ACTIVE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
666 {185, "CH-CLR", "CHARGE REPORTING - CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
667 {186, "CH-CR", "CHARGE REPORTING - COST REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
668 {187, "CH-CST", "CHARGE REPORTING - COST, CURRENCY UNITS", DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION, DPNSS_NONE, DPNSS_NONE },
669 {188, "CH-TR", "CHARGE REPORTING - TIME RATE", DPNSS_CURRENCY_UNITS, DPNSS_TIME_INTERVAL, DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION},
670 {189, "CH-UR", "CHARGE REPORTING - UNIT", DPNSS_CURRENCY_UNITS, DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION, DPNSS_NONE},
671 {190, "CH-UU", "CHARGE REPORTING - UNITS USED", DPNSS_UNITS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
672 {191, "OPD", "OUTPUT DIGITS", DPNSS_REMOTE_ADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
673 {192, "OPD-R", "OUTPUT DIGITS - REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
674 {193, "IRD", "INTERNAL REROUTING DISABLED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
675 {194, "ERD", "EXTERNAL REROUTING DISABLED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
676 {195, "NLT-PT", "NON-LOOPED BACK TEST-PERFORM TEST", DPNSS_TEST_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
677 {196, "NLT-RQ", "NON-LOOPED BACK TEST-TEST REQUEST", DPNSS_TEST_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
678 {197, "NLT-SC", "NON-LOOPED BACK TEST-SEQUENCE COMPLETE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
679 {198, "NLT-RES", "NON-LOOPED BACK TEST-RESULT", DPNSS_TEST_RESULT, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
680 {199, "AUTO-A", "AUTOANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
681 {200, "HF-A", "HANDS-FREE - ACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
682 {201, "HF-D", "HANDS-FREE - DEACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
683 {202, "EI-W", "EXECUTIVE INTRUSION-WITHDRAW", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
684 {203, "DVT-RD", "DIVERT-REDIRECTION", DPNSS_REASON_FOR_REDIR, DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE },
685 {204, "DVT-CF", "DIVERT-CALL FAILURE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
686 {205, "ASST-INFO", "ASSISTANCE-INFORMATION", DPNSS_TYPE_OF_ASSISTANCE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
687 {206, "RED-BY", "REDIRECTION-BYPASS", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
688 {207, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
689 {208, "VIC", "VPN INITIATED CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
690 {209, "NPR-A", "NUMBER PRESENTATION RESTRICTION-A PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
691 {210, "NPR-B", "NUMBER PRESENTATION RESTRICTION-B PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
692 {211, "ARC", "AUXILIARY DPNSS_ROUTE_RES_CLASS", DPNSS_ROUTE_RES_CLASS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
693 {212, "WOB", "WAIT ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
694 {213, "GPU-R", "GROUP PICK-UP REQUEST", DPNSS_GRP_PICK_UP_CODE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
695 {214, "PU-DVT", "PICK-UP DIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
696 {215, "PU-DVG", "PICK-UP DIVERTING", DPNSS_TIME_INTERVAL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
697 {216, "DPU-R", "DIRECTED PICK-UP REQUEST", DPNSS_PICK_UP_CALL_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
698 {217, "RCC-CA", "ROUTE CAPACITY CONTROL-CAPACITY AVAILABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
699 {218, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
700 {219, "RCC-OI", "ROUTE CAPACITY CONTROL-OVERRIDE INVOKED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
701 {220, "PU-DVD", "PICK-UP DIVERTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
702 {221, "NPR-O", "NUMBER PRESENTATION RESTRICTION - OTHER PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
703 {222, "MCI", "MALICIOUS CALL INDICATION", DPNSS_MALICIOUS_CALL_REF, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
704 {223, "NSL", "NETWORK SIGNALLING LIMIT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
705 {224, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
706 {225, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
707 {226, "TCOS", "TRAVELLING CLASS OF SERVICE", DPNSS_ROUTE_RES_CLASS, DPNSS_CBR_GRP, DPNSS_FAC_LST_CODE, DPNSS_NONE},
708 {227, "TCOS-R", "TRAVELLING CLASS OF SERVICE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
709 {228, "DIV-RSC", "DIVERSION-REMOTE SET COMBINED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
710 {229, "DIV-RCC", "DIVERSION-REMOTE CANCEL COMBINED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
711 {230, "RDC", "REDIRECTION CONTROL", DPNSS_TIMER_VALUE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
712 {231, "CAUSE", "DPNSS_CLEARING_CAUSE", DPNSS_CLEARING_CAUSE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
713 {232, "CP", "CALL PROCEEDING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
714 {233, "I-BC", "ISDN-BEARER CAPABILITY", DPNSS_BEARER_CAP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
715 {234, "I-CC", "ISDN-DPNSS_CLEARING_CAUSE", DPNSS_CAUSE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
716 {235, "I-CPN", "ISDN-CALLING PARTY/CONNECTED NUMBER", DPNSS_ISDN_NUM_ATTR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
717 {236, "I-CSA", "ISDN-CALLING PARTY/CONNECTED DPNSS_SUBADDRESS", DPNSS_ISDN_DPNSS_SUBADDRESS, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE },
718 {237, "I-DSA", "ISDN-DESTINATION (CALLED PARTY) DPNSS_SUBADDRESS", DPNSS_ISDN_DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
719 {238, "I-HLC", "ISDN-HIGH LAYER COMPATIBILITY", DPNSS_HIGH_LAYER_COMP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
720 {239, "I-LLC", "ISDN-LOW LAYER COMPATIBILITY", DPNSS_LOW_LAYER_COMP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
721 {240, "I-PROG", "ISDN-PROGRESS", DPNSS_PROGRESS_INDICATOR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
722 {241, "IPN", "INTERWORKING VIA A PRIVATE ISDN", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
723 {242, "SAVE", "SAVE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
724 {243, "V-NID", "VPN-NODAL IDENTITY", DPNSS_VPN_ACCESS_REF_NUM, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
725 {244, "M-INDEX", "MESSAGE INDEX", DPNSS_INDEX_NUMBER, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
726 {245, "CBM-CSU", "CALL BACK MESSAGING CALL SET-UP", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
727 {246, "INT-A", "INTERIM ANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
728 {247, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
729 {248, "DVL", "DIVERSION - LAST CONTROLLING EXTENSION IDENTITY", DPNSS_B_PARTY_ADDR, DPNSS_DIVERSION_TYPE, DPNSS_RESTRICTION_INDICATOR, DPNSS_NONE},
730 {249, "ROP-INV", "ROUTE OPTIMISATION INVITE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
731 {250, "ROP-INVA", "ROUTE OPTIMISATION INVITE WITH ACKNOWLEDGEMENT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
732 {251, "PCLG-P", "PUBLIC CALLING PARTY NUMBER-PROVIDED", DPNSS_ISDN_NUM_ATTR, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE },
733 {252, "PCLG-D", "PUBLIC CALLING PARTY NUMBER-DEFAULT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
734 {253, "PCON-P", "PUBLIC CONNECTED NUMBER-PROVIDED", DPNSS_ISDN_NUM_ATTR, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE },
735 {254, "PCON-D", "PUBLIC CONNECTED NUMBER-DEFAULT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE },
738 static int
739 dissect_dpnss_sic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
741 guint8 octet, type_of_data;
743 octet = tvb_get_guint8(tvb,offset);
744 type_of_data = (octet & 0x70)>>4;
745 proto_tree_add_item(tree, hf_dpnss_ext_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
746 proto_tree_add_item(tree, hf_dpnss_sic_type, tvb, offset, 1, ENC_BIG_ENDIAN);
747 switch (type_of_data) {
748 case 1:
749 /* Type of Data (001) : Details for Speech */
750 proto_tree_add_item(tree, hf_dpnss_sic_details_for_speech, tvb, offset, 1, ENC_BIG_ENDIAN);
751 break;
752 case 2:
753 /* Type of Data (010) : Data Rates */
754 proto_tree_add_item(tree, hf_dpnss_sic_details_for_data1, tvb, offset, 1, ENC_BIG_ENDIAN);
755 break;
756 case 3:
757 /* Type of Data (011) : Data Rates */
758 proto_tree_add_item(tree, hf_dpnss_sic_details_for_data2, tvb, offset, 1, ENC_BIG_ENDIAN);
759 break;
760 default:
761 /* Illegal */
762 break;
764 offset++;
765 if ((octet&0x80)==0x80) {
766 /* Extension bit set
767 * Synch/Asynchronous Information
769 octet = tvb_get_guint8(tvb,offset);
770 type_of_data = octet&0x3;
771 proto_tree_add_item(tree, hf_dpnss_ext_bit_notall, tvb, offset, 1, ENC_BIG_ENDIAN);
772 switch (type_of_data) {
773 case 3:
774 /* Synchronous */
775 case 4:
776 /* Synchronous */
777 proto_tree_add_item(tree, hf_dpnss_sic_oct2_net_ind_clk, tvb, offset, 1, ENC_BIG_ENDIAN);
778 proto_tree_add_item(tree, hf_dpnss_sic_oct2_sync_data_format, tvb, offset, 1, ENC_BIG_ENDIAN);
779 proto_tree_add_item(tree, hf_dpnss_sic_oct2_sync_byte_timing, tvb, offset, 1, ENC_BIG_ENDIAN);
780 break;
781 case 5:
782 /* Asynchronous */
783 case 6:
784 /* Asynchronous */
785 case 7:
786 /* Asynchronous */
787 proto_tree_add_item(tree, hf_dpnss_sic_oct2_async_flow_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN);
788 proto_tree_add_item(tree, hf_dpnss_sic_oct2_async_data, tvb, offset, 1, ENC_BIG_ENDIAN);
789 break;
790 default:
791 break;
793 proto_tree_add_item(tree, hf_dpnss_sic_oct2_duplex, tvb, offset, 1, ENC_BIG_ENDIAN);
794 proto_tree_add_item(tree, hf_dpnss_sic_oct2_data_type, tvb, offset, 1, ENC_BIG_ENDIAN);
795 offset++;
797 return offset;
800 static const value_string dpnss_serv_mark_vals[] = {
801 { 1, "PSTN BARRED"},
802 { 2, "EMERGENCY TELEPHONE"},
803 { 3, "HUNT GROUP"},
804 { 4, "DISTRIBUTED GROUP"},
805 { 5, "UNABLE TO INITIATE CLEARING AFTER ANSWER"},
806 { 6, "RING GROUP"},
807 { 0, NULL }
810 /* Supplementary Information parameters
811 * TODO Add decoding of parameters where needed.
814 static const value_string dpnss_sup_serv_par_str_vals[] = {
815 { DPNSS_NONE, "None"},
816 { DPNSS_SERV_MAR, "Servive Marking"},
817 { DPNSS_STATUS, "Status"},
818 { DPNSS_ROUTE_RES_CLASS, "Route Restriction Class"},
819 { DPNSS_CBR_GRP, "Call Barring Group"},
820 { DPNSS_FAC_LST_CODE, "Facility list code"},
821 { DPNSS_NO_OF_FUR_TRANS, "Number of Further Transits"},
822 { DPNSS_NO_OF_FUR_ALT_R, "Number of Further Alternative routes"},
823 { DPNSS_INT_CAP_LEV, "Intrusion Capability level"},
824 { DPNSS_NESTING_LEVEL, "Nesting level"},
825 { DPNSS_C_PARTY_ADDR, "C Party Address"},
826 { DPNSS_B_PARTY_ADDR, "B Party Address"},
827 { DPNSS_SIC, "SIC"},
828 { DPNSS_A_B_PARTY_ADDR, "A/B Party Address"},
829 { DPNSS_DIVERSION_TYPE, "Diversion Type"},
830 { DPNSS_NSI_IDENTIFIER, "NSI Identifier"},
831 { DPNSS_USER_DEFINED, "User Defined"},
832 { DPNSS_TEXT, "Text"},
833 { DPNSS_CALL_INDEX, "Call Index"},
834 { DPNSS_PASSWORD, "Password"},
835 { DPNSS_CALL_DIR, "Call Direction"},
836 { DPNSS_DPNSS_ISDN_TYPE, "DPNNS ISDN Type"},
837 { DPNSS_HC_CLC, "HC CLC"},
838 { DPNSS_ENHANCED_STR_ID, "Enhanced String Identity"},
839 { DPNSS_STRING_ID, "String Identity"},
840 { DPNSS_STRING_ID_LIST, "String Identity List"},
841 { DPNSS_TEXT_TYPE, "Text Type"},
842 { DPNSS_CHANNEL_STATUS, "Channel Status"},
843 { DPNSS_CHANNEL_NUMBER, "Channel Number"},
844 { DPNSS_BPL, "BPL"},
845 { DPNSS_BCL, "BCL"},
846 { DPNSS_DEVICE_INDEX, "Device Index"},
847 { DPNSS_CR_NO, "Call Reference Number"},
848 { DPNSS_CALL_ID_LENGTH, "Call Identity Length"},
849 { DPNSS_STATE_OF_DEST, "State of Destination"},
850 { DPNSS_STATE_OF_DEST_QUAL, "State of Destination Qualifier"},
851 { DPNSS_REASON_FOR_REDIR, "Reason For Redirection"},
852 { DPNSS_CLEARING_CAUSE, "Clearing Cause"},
853 { DPNSS_RECONT_ADDR, "Reconnect Address"},
854 { DPNSS_STATE_OF_OPERATOR, "State of Operator"},
855 { DPNSS_NIGHT_SERVICE, "Night Service"},
856 { DPNSS_PBX_FLAG, "PBX flag"},
857 { DPNSS_NUMBER_OF_CALLS, "Number of Calls"},
858 { DPNSS_NUMBER_OF_SERVERS, "Number of Servers"},
859 { DPNSS_PRIORITY_LEVEL, "Priority Level"},
860 { DPNSS_LOCATION, "Location"},
861 { DPNSS_SUBADDRESS, "Subaddress"},
862 { DPNSS_ALARM_LEVEL, "Alarm Level"},
863 { DPNSS_STAFF_PRESENT, "Staff Present"},
864 { DPNSS_TIME_AND_DATE, "Time and Date"},
865 { DPNSS_SERVICES, "Services"},
866 { DPNSS_PBX_REFERENCE, "PBX Reference"},
867 { DPNSS_TRUNK_GROUP_REF_NUMBER, "Trunk Group reference Number"},
868 { DPNSS_TRUNK_MEMBER_REF_NUMBER,"Trunk Member Reference Number"},
869 { DPNSS_CONF_PARTY_INDEX, "Conference Party Index"},
870 { DPNSS_CONF_PARTY_DET, "Conference Party Details"},
871 { DPNSS_ACCOUNT_CODE, "Account code"},
872 { DPNSS_CONF_BRIDGE_ADDR, "Conference Bridge Address"},
873 { DPNSS_COST_QUALIFIER, "Cost Qualifier"},
874 { DPNSS_CURRENCY_INDICATION, "Currency Indication"},
875 { DPNSS_CURRENCY_UNITS, "Currency Units"},
876 { DPNSS_TIME_INTERVAL, "Time Interval"},
877 { DPNSS_UNITS, "Units"},
878 { DPNSS_REMOTE_ADDRESS, "Remote Address"},
879 { DPNSS_TEST_INDEX, "Test Index"},
880 { DPNSS_TEST_RESULT, "Test Result"},
881 { DPNSS_TYPE_OF_ASSISTANCE, "Type of assistance"},
882 { DPNSS_REST_DOMAIN, "Restriction Domain"},
883 { DPNSS_GRP_PICK_UP_CODE, "Group Pick-Up Code"},
884 { DPNSS_PICK_UP_CALL_TYPE, "Pick-Up call type"},
885 { DPNSS_MALICIOUS_CALL_REF, "Malicious call reference"},
886 { DPNSS_TIMER_VALUE, "Timer Value"},
887 { DPNSS_BEARER_CAP, "Bearer capability"},
888 { DPNSS_ISDN_NUM_ATTR, "ISDM number attribute"},
889 { DPNSS_ISDN_DPNSS_SUBADDRESS, "ISDN DPNNS Subaddress"},
890 { DPNSS_ISDN_NUMBER_DIGITS, "ISDN Number Digits"},
891 { DPNSS_HIGH_LAYER_COMP, "High Layer Compatibility"},
892 { DPNSS_LOW_LAYER_COMP, "Low layer Compatibility"},
893 { DPNSS_PROGRESS_INDICATOR, "Progress Indicator"},
894 { DPNSS_VPN_ACCESS_REF_NUM, "VPN Access reference Number"},
895 { DPNSS_INDEX_NUMBER, "Index Number"},
896 { DPNSS_RESTRICTION_INDICATOR, "Restriction Indicator"},
897 { DPNSS_CAUSE, "Cause"},
898 { 0, NULL }
901 static void
902 dissect_dpnns_sup_str_par(tvbuff_t *tvb, proto_tree * tree, int par_type_num, int par_start_offset, int par_end_offset)
905 int par_len;
907 par_len = par_end_offset - par_start_offset;
908 if (par_len==0) {
909 par_type_num = DPNSS_NONE;
911 switch (par_type_num) {
912 case DPNSS_NONE:
913 proto_tree_add_text(tree, tvb, par_start_offset, par_len,"Par: None");
914 break;
916 /* TODO: Use individual dissection of parameters if hf fields needed or in the case where
917 special handling is needed for greater detail
919 case DPNSS_SERV_MAR:
920 * p 173
921 * More than one Service Marking character can be
922 * included in the Parameter, each being separated
923 * by the IA5 character space (2/0).
924 * If decoded use: dpnss_serv_mark_vals
926 case DPNSS_STATUS:
927 case DPNSS_ROUTE_RES_CLASS:
928 case DPNSS_CBR_GRP:
929 case DPNSS_FAC_LST_CODE:
930 case DPNSS_NO_OF_FUR_TRANS:
931 case DPNSS_NO_OF_FUR_ALT_R:
932 case DPNSS_INT_CAP_LEV:
933 case DPNSS_NESTING_LEVEL:
934 case DPNSS_C_PARTY_ADDR:
935 case DPNSS_B_PARTY_ADDR:
936 case DPNSS_SIC:
938 case DPNSS_A_B_PARTY_ADDR:
939 proto_tree_add_item(tree, hf_dpnss_a_b_party_addr, tvb, par_start_offset, par_len, ENC_ASCII|ENC_NA);
940 break;
943 case DPNSS_DIVERSION_TYPE:
944 case DPNSS_NSI_IDENTIFIER:
945 case DPNSS_USER_DEFINED:
946 case DPNSS_TEXT:
948 case DPNSS_CALL_INDEX:
949 proto_tree_add_item(tree, hf_dpnss_call_idx, tvb, par_start_offset, par_len, ENC_ASCII|ENC_NA);
950 break;
953 case DPNSS_PASSWORD:
954 case DPNSS_CALL_DIR:
955 case DPNSS_DPNSS_ISDN_TYPE:
956 case DPNSS_HC_CLC:
957 case DPNSS_ENHANCED_STR_ID:
958 case DPNSS_STRING_ID:
959 case DPNSS_STRING_ID_LIST:
960 case DPNSS_TEXT_TYPE:
961 case DPNSS_CHANNEL_STATUS:
962 case DPNSS_CHANNEL_NUMBER:
963 case DPNSS_BPL:
964 case DPNSS_BCL:
965 case DPNSS_DEVICE_INDEX:
966 case DPNSS_CR_NO:
967 case DPNSS_CALL_ID_LENGTH:
968 case DPNSS_STATE_OF_DEST:
969 case DPNSS_STATE_OF_DEST_QUAL:
970 case DPNSS_REASON_FOR_REDIR:
971 case DPNSS_CLEARING_CAUSE:
972 case DPNSS_RECONT_ADDR:
973 case DPNSS_STATE_OF_OPERATOR:
974 case DPNSS_NIGHT_SERVICE:
975 case DPNSS_PBX_FLAG:
976 case DPNSS_NUMBER_OF_CALLS:
977 case DPNSS_NUMBER_OF_SERVERS:
978 case DPNSS_PRIORITY_LEVEL:
979 case DPNSS_LOCATION:
980 case DPNSS_SUBADDRESS:
981 case DPNSS_ALARM_LEVEL:
982 case DPNSS_STAFF_PRESENT:
983 case DPNSS_TIME_AND_DATE:
984 case DPNSS_SERVICES:
985 * More than one Service Marking character can be
986 * included in the Parameter, each being separated
987 * by the IA5 character space (2/0).
988 * 1 = Call Offer not possible
989 * 2 = Executive Intrusion not possible
990 * 3 = Call Back When Free not possible
991 * 4 = Call Back Messaging not possible (see Note)
992 * 5 = Hold not possible
993 * 6 = Call Back When Next Used not possible
994 case DPNSS_PBX_REFERENCE:
995 case DPNSS_TRUNK_GROUP_REF_NUMBER:
996 case DPNSS_TRUNK_MEMBER_REF_NUMBER:
997 case DPNSS_CONF_PARTY_INDEX:
998 case DPNSS_CONF_PARTY_DET:
999 case DPNSS_ACCOUNT_CODE:
1000 case DPNSS_CONF_BRIDGE_ADDR:
1001 case DPNSS_COST_QUALIFIER:
1002 case DPNSS_CURRENCY_INDICATION:
1003 case DPNSS_CURRENCY_UNITS:
1004 case DPNSS_TIME_INTERVAL:
1005 case DPNSS_UNITS:
1006 case DPNSS_REMOTE_ADDRESS:
1007 case DPNSS_TEST_INDEX:
1008 case DPNSS_TEST_RESULT:
1009 case DPNSS_TYPE_OF_ASSISTANCE:
1010 case DPNSS_REST_DOMAIN:
1011 case DPNSS_GRP_PICK_UP_CODE:
1012 case DPNSS_PICK_UP_CALL_TYPE:
1013 case DPNSS_MALICIOUS_CALL_REF:
1014 case DPNSS_TIMER_VALUE:
1015 case DPNSS_BEARER_CAP:
1016 case DPNSS_ISDN_NUM_ATTR:
1017 case DPNSS_ISDN_DPNSS_SUBADDRESS:
1018 case DPNSS_ISDN_NUMBER_DIGITS:
1019 case DPNSS_HIGH_LAYER_COMP:
1020 case DPNSS_LOW_LAYER_COMP:
1021 case DPNSS_PROGRESS_INDICATOR:
1022 case DPNSS_VPN_ACCESS_REF_NUM:
1023 case DPNSS_INDEX_NUMBER:
1024 case DPNSS_RESTRICTION_INDICATOR:
1025 case DPNSS_CAUSE:
1027 default:
1028 /* Used to print all pars without any special handling */
1029 proto_tree_add_text(tree, tvb, par_start_offset, par_len,"Parameter %s: %s",
1030 val_to_str(par_type_num, dpnss_sup_serv_par_str_vals, "Unknown (%d)" ),
1031 tvb_format_text(tvb,par_start_offset, par_len)
1033 break;
1038 /* 3.1 Supplementary Information Strings
1039 * A Supplementary Information String comprises a Supplementary
1040 * Information Identifier which may be followed by one or more
1041 * Parameters. A Supplementary Information String starts with the
1042 * IA5 character * and ends with the IA5 character #.
1044 * When the Supplementary Information String includes Parameters
1045 * these are separated from the identifier and each other by a *.
1046 * eg * Supplementary Information Identifier code #
1047 * or * Supplementary Information Identifier code * Parameter #
1048 * or * Supplementary Information Identifier code * Parameter * Parameter #
1049 * A Supplementary Information String shall be wholly contained
1050 * within one Selection or Indication Field (ie it shall not be
1051 * split between messages).
1053 * 3.2 Supplementary Information String Identifier
1054 * The identifier comprises one or more IA5 numerals 0-9 which may
1055 * be followed by a single IA5 alpha-character suffix in the range A-Z.
1056 * The numerals of the identifier indicate the main function of the
1057 * Supplementary Information String, eg "39F" indicates "Diverting
1058 * on No Reply". "F" is the suffix.
1060 * 3.5 Destination Address
1061 * The Destination Address comprises one or more IA5 numerals 0 to
1062 * 9, has no identifier code and is not prefixed by a * or
1063 * terminated by a #. The digits are always the last characters in
1064 * the Selection Block. The first Destination Address digit
1065 * immediately follows the # of the last Supplementary Information
1066 * String.
1069 static int
1070 dissect_dpnss_sup_info_str(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
1072 proto_item *sup_str_item;
1073 proto_tree *sup_str_tree;
1074 gint start_offset, hash_offset, tvb_end_offset, sup_inf_str_end_offset, str_no;
1075 gint par_start_offset, par_end_offset, number_of_found_par;
1076 gint sup_inf_str_len, par_type_num;
1077 guint sup_str_num;
1078 guint8 octet;
1079 gboolean last_string = FALSE;
1080 gboolean has_par;
1082 tvb_end_offset = tvb_length(tvb);
1084 str_no = 1;
1085 while ((offset<tvb_end_offset)&&(last_string == FALSE)) {
1086 octet = tvb_get_guint8(tvb,offset);
1087 if (octet == '*') {
1088 /* Supplementary Information String */
1089 start_offset = offset;
1090 has_par = TRUE;
1091 number_of_found_par = 0;
1092 /* offset points to start of supplementary information string */
1093 offset++;
1094 hash_offset = tvb_find_guint8(tvb, offset, -1, '#');
1095 sup_str_item = proto_tree_add_text(tree, tvb, start_offset, hash_offset-start_offset+1,
1096 "Supplementary Information %u: %s",str_no,
1097 tvb_format_text(tvb,start_offset,hash_offset-start_offset+1));
1098 sup_str_tree = proto_item_add_subtree(sup_str_item, ett_dpnss_sup_str);
1099 /* SUPPLEMENTARY INFORMATION STRING IDENTIFIER
1100 * Get the parameter number string and translate it to an index into the dpnns_sup_serv_set.
1101 * The number may have a trailing alpha character at the end.
1103 sup_inf_str_end_offset = tvb_find_guint8(tvb, offset, hash_offset-offset, '*');
1104 if (sup_inf_str_end_offset==-1) {
1105 /* no parameters */
1106 has_par = FALSE;
1107 sup_inf_str_end_offset = hash_offset;
1109 sup_inf_str_len = sup_inf_str_end_offset - offset;
1110 sup_str_num = atoi(tvb_format_text(tvb, offset, sup_inf_str_len));
1111 if ((sup_str_num != 0) && (sup_str_num < array_length(dpnns_sup_serv_set))) {
1112 proto_tree_add_text(sup_str_tree, tvb,offset,sup_inf_str_len,
1113 "Sup str:%s ", dpnns_sup_serv_set[sup_str_num].compact_name);
1114 offset = sup_inf_str_end_offset+1;
1115 /* Find parameter(s) */
1116 while (has_par) {
1117 number_of_found_par++;
1118 /* 1:st Parameter */
1119 par_start_offset = offset;
1120 par_end_offset = tvb_find_guint8(tvb, offset, -1, '*');
1121 if (par_end_offset == -1) {
1122 /* last parameter */
1123 par_end_offset = hash_offset;
1124 has_par = FALSE;
1126 switch (number_of_found_par) {
1127 case 1:
1128 par_type_num = dpnns_sup_serv_set[sup_str_num].par1_num;
1129 dissect_dpnns_sup_str_par(tvb,sup_str_tree, par_type_num, par_start_offset, par_end_offset);
1130 break;
1131 case 2:
1132 par_type_num = dpnns_sup_serv_set[sup_str_num].par2_num;
1133 dissect_dpnns_sup_str_par(tvb,sup_str_tree, par_type_num, par_start_offset, par_end_offset);
1134 break;
1135 case 3:
1136 par_type_num = dpnns_sup_serv_set[sup_str_num].par3_num;
1137 dissect_dpnns_sup_str_par(tvb,sup_str_tree, par_type_num, par_start_offset, par_end_offset);
1138 break;
1139 case 4:
1140 par_type_num = dpnns_sup_serv_set[sup_str_num].par4_num;
1141 dissect_dpnns_sup_str_par(tvb,sup_str_tree, par_type_num, par_start_offset, par_end_offset);
1142 break;
1143 default:
1144 break;
1146 /* More parameters ? */
1147 offset = par_end_offset+1;
1151 offset = hash_offset+1;
1152 str_no++;
1153 } else {
1154 last_string = TRUE;
1155 proto_tree_add_item(tree, hf_dpnss_dest_addr, tvb, offset, -1, ENC_ASCII|ENC_NA);
1158 return offset;
1162 static int
1163 dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1165 proto_item *sic_field_item, *ind_field_item;
1166 proto_tree *sic_field_tree, *ind_field_tree;
1167 int offset = 0;
1168 int tvb_end_offset;
1169 guint8 octet;
1171 tvb_end_offset = tvb_length(tvb);
1173 proto_tree_add_item(tree, hf_dpnss_LbL_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1174 octet = tvb_get_guint8(tvb,offset)&0x0f;
1175 offset++;
1176 col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",
1177 val_to_str(octet, dpnss_LbL_msg_short_type_vals, "Unknown (%d)" ));
1178 if (tree) {
1179 switch (octet) {
1180 case DPNSS_LbL_MSG_LLM_C:
1181 /* 2.3.1 LINK-by-LINK Message (COMPLETE) - LLM(C)*/
1182 case DPNSS_LbL_MSG_LLM_I:
1183 /* 2.3.2 LINK-by-LINK Message (INCOMPLETE) - LLM(I) */
1184 /* Indication Field */
1185 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1186 "Indication Field: %s",
1187 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1188 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1189 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1190 break;
1191 case DPNSS_LbL_MSG_LLRM:
1192 /* 2.3.3 LINK-by-LINK REJECT Message - LLRM */
1193 /* Rejection Cause */
1194 proto_tree_add_item(tree, hf_dpnss_rejection_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1195 /* Indication Field (Optional) */
1196 if (tvb_end_offset>offset) {
1197 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1198 "Indication Field: %s",
1199 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1200 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1201 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1203 break;
1204 case DPNSS_LbL_MSG_SM:
1205 /* 2.3.4 SWAP Message - SM */
1206 /* Service Indicator Code
1207 * Note: On data calls the SIC may comprise more than one octet.
1208 * The Service Indicator Code is coded in accordance with ANNEX 1.
1210 sic_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Service Indicator Code");
1211 sic_field_tree = proto_item_add_subtree(sic_field_item, ett_dpnss_sic_field);
1212 offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset);
1213 /* Indication Field */
1214 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1215 "Indication Field: %s",
1216 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1217 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1218 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1219 break;
1220 case DPNSS_LbL_MSG_LMM:
1221 /* 2.3.5 LINK MAINTENANCE Message - LMM */
1222 /* Maintenance Action
1223 * respond to a request for,maintenance actions to be performed.
1224 * The Maintenance Action field identifies the action required or
1225 * the response being made. The Maintenance Action field is coded
1226 * as shown in ANNEX 6.
1228 proto_tree_add_item(tree, hf_dpnss_maintenance_action, tvb, offset, 1, ENC_BIG_ENDIAN);
1229 offset++;
1230 /* Indication Field */
1231 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1232 "Indication Field: %s",
1233 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1234 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1235 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1236 break;
1237 case DPNSS_LbL_MSG_LMRM:
1238 /* 2.3.6 LINK MAINTENANCE REJECT Message - LMRM */
1239 proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1240 offset++;
1241 /* Indication Field */
1242 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1243 "Indication Field: %s",
1244 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1245 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1246 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1247 break;
1248 default:
1249 proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
1250 break;
1253 return offset;
1257 static int
1258 dissect_dpnss_e2e_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1260 proto_item *sel_field_item, *sic_field_item, *ind_field_item;
1261 proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree;
1262 int offset = 0;
1263 int tvb_end_offset;
1264 guint8 octet;
1266 tvb_end_offset = tvb_length(tvb);
1268 proto_tree_add_item(tree, hf_dpnss_e2e_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1269 octet = tvb_get_guint8(tvb,offset)&0x0f;
1270 offset++;
1271 col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",
1272 val_to_str(octet, dpnss_e2e_msg_short_type_vals, "Unknown (%d)" ));
1273 if (tree) {
1274 switch (octet) {
1275 case DPNSS_E2E_MSG_EEM_C:
1276 /* 2.2.1 END-to-END Message (COMPLETE) - EEM(C) */
1277 case DPNSS_E2E_MSG_EEM_I:
1278 /* Fall trough */
1279 /* Indication Field */
1280 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1281 "Indication Field: %s",
1282 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1283 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1284 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1285 break;
1286 case DPNSS_E2E_MSG_SCRM:
1287 /* 2.2.3 SINGLE-CHANNEL CLEAR REQUEST Message - SCRM */
1288 case DPNSS_E2E_MSG_SCIM:
1289 /* 2.2.4 SINGLE-CHANNEL CLEAR INDICATION Message - SCIM */
1290 /* Clearing Cause */
1291 proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1292 offset++;
1293 /* Indication Field (Optional) */
1294 if (tvb_end_offset>offset) {
1295 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1296 "Indication Field: %s",
1297 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1298 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1299 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1301 break;
1302 case DPNSS_E2E_MSG_ERM_C:
1303 /* 2.2.5 END-to-END RECALL Message (COMPLETE) - ERM(C) */
1304 case DPNSS_E2E_MSG_ERM_I:
1305 /* 2.2.6 END-to-END RECALL Message (INCOMPLETE) - ERM(I) */
1306 /* Service Indicator Code
1307 * Note: On data calls the SIC may comprise more than one octet.
1308 * The Service Indicator Code is coded in accordance with ANNEX 1.
1310 sic_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Service Indicator Code");
1311 sic_field_tree = proto_item_add_subtree(sic_field_item, ett_dpnss_sic_field);
1312 offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset);
1314 * Selection Field
1315 * The Selection Field contains the selection information relating
1316 * to a call set-up or Supplementary Service Request, and is
1317 * structured as shown in Subsection 3.
1319 sel_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1320 "Selection Field: %s",
1321 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1322 sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
1323 offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
1324 break;
1325 case DPNSS_E2E_MSG_NSIM:
1326 /* 2.2.7 NON SPECIFIED INFORMATION Message - NSIM */
1327 /* Usage Identifier Oct 1 -
1328 * coding of the Usage Identifier, as described in section 49.
1329 * The use of NSIMs is described in greater detail in SECTION 49.
1330 * BIT 8 7 6 5 4 3 2 1
1331 * ext | Manufacturer code | subcode
1333 octet = tvb_get_guint8(tvb,offset);
1334 proto_tree_add_item(tree, hf_dpnss_ext_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
1335 proto_tree_add_item(tree, hf_dpnss_man_code, tvb, offset, 1, ENC_BIG_ENDIAN);
1336 proto_tree_add_item(tree, hf_dpnss_subcode, tvb, offset, 1, ENC_BIG_ENDIAN);
1337 offset++;
1338 if ((octet&0x80)==0x80) {
1339 /* Extension bit set */
1340 offset++;
1342 /* User Information oct 2 + n
1344 proto_tree_add_text(tree, tvb, offset, -1, "User Information");
1345 break;
1346 default:
1347 proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
1348 break;
1351 return offset;
1354 static int
1355 dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1357 proto_item *sel_field_item, *sic_field_item, *ind_field_item;
1358 proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree;
1359 int offset = 0;
1360 int tvb_end_offset;
1361 guint8 octet;
1363 tvb_end_offset = tvb_length(tvb);
1364 proto_tree_add_item(tree, hf_dpnss_cc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1365 octet = tvb_get_guint8(tvb,offset)&0x0f;
1366 offset++;
1367 col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",
1368 val_to_str(octet, dpnss_cc_msg_short_type_vals, "Unknown (%d)" ));
1370 if (tree) {
1371 switch (octet) {
1372 case DPNSS_CC_MSG_ISRM_C:
1373 /* 2.1.1 INITIAL SERVICE REQUEST Message (COMPLETE) - ISRM (C) */
1374 /* fall trough */
1375 case DPNSS_CC_MSG_ISRM_I:
1376 /* 2.1.2 INITIAL SERVICE REQUEST Message (INCOMPLETE) - ISRM(I) */
1377 case DPNSS_CC_MSG_RM_C:
1378 /* 2.1.3 RECALL Message (COMPLETE) - RM(C) */
1379 /* fall trough */
1380 case DPNSS_CC_MSG_RM_I:
1381 /* 2.1.4 RECALL Message (INCOMPLETE) - RM(I)*/
1382 /* fall trough */
1383 /* Service Indicator Code
1384 * Note: On data calls the SIC may comprise more than one octet.
1385 * The Service Indicator Code is coded in accordance with ANNEX 1.
1387 sic_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Service Indicator Code");
1388 sic_field_tree = proto_item_add_subtree(sic_field_item, ett_dpnss_sic_field);
1389 offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset);
1391 * Selection Field
1392 * The Selection Field contains the selection information relating
1393 * to a call set-up or Supplementary Service Request, and is
1394 * structured as shown in Subsection 3.
1396 sel_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1397 "Selection Field: %s",
1398 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1399 sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
1400 offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
1401 break;
1402 case DPNSS_CC_MSG_CCM:
1403 /* 2.1.5 CALL CONNECTED Message - CCM */
1404 if (tvb_end_offset>offset) {
1405 /* Indication Field (Optional) */
1406 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1407 "Indication Field: %s",
1408 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1409 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1410 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1412 break;
1413 case DPNSS_CC_MSG_NIM:
1414 /* 2.1.6 NETWORK INDICATION Message - NIM */
1415 /* fall trough */
1416 case DPNSS_CC_MSG_NAM:
1417 /* 2.1.9 NUMBER ACKNOWLEDGE Message - NAM */
1418 /* Indication Field */
1419 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1420 "Indication Field: %s",
1421 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1422 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1423 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1424 break;
1425 case DPNSS_CC_MSG_CRM:
1426 /* 2.1.7 CLEAR REQUEST Message - CRM */
1427 /* 2.1.8 CLEAR INDICATION Message - CIM */
1428 /* Clearing Cause */
1429 proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1430 offset++;
1431 /* Indication Field (Optional) */
1432 if (tvb_end_offset>offset) {
1433 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1434 "Indication Field: %s",
1435 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1436 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1437 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1439 break;
1440 case DPNSS_CC_MSG_RRM:
1441 /* 2.1.10 RECALL REJECTION Message - RRM */
1442 /* Rejection Cause */
1443 proto_tree_add_item(tree, hf_dpnss_rejection_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1444 /* Indication Field (Optional) */
1445 if (tvb_end_offset>offset) {
1446 ind_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1447 "Indication Field: %s",
1448 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1449 ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
1450 offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
1452 break;
1453 case DPNSS_CC_MSG_SSRM_I:
1454 /* 2.1.11 SUBSEQUENT SERVICE REQUEST Message (INCOMPLETE) - SSRM(I) */
1455 /* Selection Field */
1456 sel_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1457 "Selection Field: %s",
1458 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1459 sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
1460 offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
1461 break;
1462 case DPNSS_CC_MSG_SSRM_C:
1463 /* 2.1.12 SUBSEQUENT SERVICE REQUEST Message (COMPLETE) - SSRM(C) */
1464 /* Selection Field (Optional) */
1465 if (tvb_end_offset>offset) {
1466 sel_field_item = proto_tree_add_text(tree, tvb, offset, -1,
1467 "Selection Field: %s",
1468 tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
1469 sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
1470 offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
1472 break;
1473 case DPNSS_CC_MSG_CS:
1474 case DPNSS_CC_MSG_CA:
1475 /* DASS2 ?*/
1476 default:
1477 proto_tree_add_text(tree, tvb, offset, 1, "Unknown or Dissection of this message not supported yet");
1478 break;
1481 return offset;
1483 /* Code to actually dissect the packets */
1484 static void
1485 dissect_dpnss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1487 int offset = 0;
1488 proto_item *item;
1489 proto_tree *dpnss_tree;
1490 guint8 octet;
1492 /* Make entries in Protocol column and Info column on summary display */
1493 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DPNSS");
1495 item = proto_tree_add_item(tree, proto_dpnss, tvb, 0, -1, ENC_NA);
1496 dpnss_tree = proto_item_add_subtree(item, ett_dpnss);
1497 proto_tree_add_item(dpnss_tree, hf_dpnss_msg_grp_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1498 octet = tvb_get_guint8(tvb,offset)>>4;
1499 switch (octet) {
1500 case DPNNS_MESSAGE_GROUP_CC:
1501 /* Call Control Message Group */
1502 dissect_dpnss_cc_msg(tvb, pinfo, dpnss_tree);
1503 break;
1504 case DPNNS_MESSAGE_GROUP_E2E:
1505 /* End-to-End Message Group */
1506 dissect_dpnss_e2e_msg(tvb, pinfo, dpnss_tree);
1507 break;
1508 case DPNNS_MESSAGE_GROUP_LbL:
1509 /* Link-by-Link Message Group */
1510 dissect_dpnss_LbL_msg(tvb, pinfo, dpnss_tree);
1511 break;
1512 default:
1513 proto_tree_add_text(tree, tvb, offset, 1, "Unknown Message Group");
1514 break;
1518 void
1519 proto_register_dpnss(void)
1521 /* Setup list of header fields See Section 1.6.1 for details*/
1522 static hf_register_info hf[] = {
1523 { &hf_dpnss_msg_grp_id,
1524 { "Message Group Identifier", "dpnss.msg_grp_id",
1525 FT_UINT8, BASE_DEC, VALS(dpnss_msg_grp_id_vals), 0xf0,
1526 NULL, HFILL }
1528 { &hf_dpnss_cc_msg_type,
1529 { "Call Control Message Type", "dpnss.cc_msg_type",
1530 FT_UINT8, BASE_DEC, VALS(dpnss_cc_msg_type_vals), 0x0f,
1531 NULL, HFILL }
1533 { &hf_dpnss_e2e_msg_type,
1534 { "END-TO-END Message Type", "dpnss.e2e_msg_type",
1535 FT_UINT8, BASE_DEC, VALS(dpnss_e2e_msg_type_vals), 0x0f,
1536 NULL, HFILL }
1538 { &hf_dpnss_LbL_msg_type,
1539 { "LINK-BY-LINK Message Type", "dpnss.lbl_msg_type",
1540 FT_UINT8, BASE_DEC, VALS(dpnss_LbL_msg_type_vals), 0x0f,
1541 NULL, HFILL }
1543 { &hf_dpnss_ext_bit,
1544 { "Extension bit", "dpnss.ext_bit",
1545 FT_BOOLEAN, 8, TFS(&dpnss_ext_bit_vals), 0x80,
1546 NULL, HFILL }
1548 { &hf_dpnss_ext_bit_notall,
1549 { "Extension bit", "dpnss.ext_bit_notall",
1550 FT_BOOLEAN, 8, TFS(&dpnss_ext_bit_no_ext_vals), 0x80,
1551 NULL, HFILL }
1553 { &hf_dpnss_sic_type,
1554 { "Type of data", "dpnss.sic_type",
1555 FT_UINT8, BASE_DEC, VALS(dpnss_sic_type_type_vals), 0x70,
1556 NULL, HFILL }
1558 { &hf_dpnss_sic_details_for_speech,
1559 { "Details for Speech", "dpnss.sic_details_for_speech",
1560 FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_speech_vals), 0x0f,
1561 NULL, HFILL }
1563 { &hf_dpnss_sic_details_for_data1,
1564 { "Data Rates", "dpnss.sic_details_for_data1",
1565 FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_data_rates1_vals), 0x0f,
1566 "Type of Data (010) : Data Rates", HFILL }
1568 { &hf_dpnss_sic_details_for_data2,
1569 { "Data Rates", "dpnss.sic_details_data2",
1570 FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_data_rates2_vals), 0x0f,
1571 "Type of Data (011) : Data Rates", HFILL }
1573 { &hf_dpnss_dest_addr,
1574 { "Destination Address", "dpnss.dest_addr",
1575 FT_STRING, BASE_NONE, NULL, 0x0,
1576 NULL, HFILL }
1578 { &hf_dpnss_sic_oct2_data_type,
1579 { "Data Type", "dpnss.sic_oct2_data_type",
1580 FT_UINT8, BASE_DEC, VALS(dpnss_sic_oct2_data_type_vals), 0x03,
1581 NULL, HFILL }
1583 { &hf_dpnss_sic_oct2_duplex,
1584 { "Data Type", "dpnss.sic_oct2_duplex",
1585 FT_BOOLEAN, 8, TFS(&dpnss_duplex_vals), 0x08,
1586 NULL, HFILL }
1588 { &hf_dpnss_sic_oct2_net_ind_clk,
1589 { "Network Independent Clock", "dpnss.sic_oct2_net_ind_clk",
1590 FT_BOOLEAN, 8, TFS(&dpnss_sic_oct2_net_ind_clk_vals), 0x40,
1591 NULL, HFILL }
1593 { &hf_dpnss_sic_oct2_sync_data_format,
1594 { "Data Format", "dpnss.sic_oct2_sync_data_format",
1595 FT_BOOLEAN, 8, TFS(&dpnss_sic_oct2_sync_data_format_vals), 0x20,
1596 NULL, HFILL }
1598 { &hf_dpnss_sic_oct2_sync_byte_timing,
1599 { "Byte Timing", "dpnss.sic_oct2_sync_byte_timing",
1600 FT_BOOLEAN, 8, TFS(&dpnss_provided_vals), 0x10,
1601 NULL, HFILL }
1603 { &hf_dpnss_sic_oct2_async_data,
1604 { "Data Format", "dpnss.sic_oct2_async_data",
1605 FT_UINT8, BASE_DEC, VALS(dpnss_sic_oct2_async_data_type_vals), 0x30,
1606 NULL, HFILL }
1608 { &hf_dpnss_sic_oct2_async_flow_ctrl,
1609 { "Flow Control", "dpnss.sic_oct2_async_flow_ctrl",
1610 FT_BOOLEAN, 8, TFS(&dpnss_flow_control_vals), 0x40,
1611 NULL, HFILL }
1613 { &hf_dpnss_clearing_cause,
1614 { "Clearing Cause", "dpnss.clearing_cause",
1615 FT_UINT8, BASE_DEC, VALS(dpnss_clearing_cause_code_vals), 0x0,
1616 NULL, HFILL }
1618 { &hf_dpnss_rejection_cause,
1619 { "Rejection Cause", "dpnss.rejection_cause",
1620 FT_UINT8, BASE_DEC, VALS(dpnss_clearing_cause_code_vals), 0x0,
1621 NULL, HFILL }
1623 { &hf_dpnss_man_code,
1624 { "Manufacturer Code", "dpnss.man_code",
1625 FT_UINT8, BASE_DEC, VALS(dpnss_man_code_vals), 0x3c,
1626 NULL, HFILL }
1628 { &hf_dpnss_subcode,
1629 { "Subcode", "dpnss.subcode",
1630 FT_UINT8, BASE_DEC, NULL, 0x03,
1631 NULL, HFILL }
1633 { &hf_dpnss_maintenance_action,
1634 { "Maintenance action", "dpnss.maint_act",
1635 FT_UINT8, BASE_DEC, VALS(dpnss_maintenance_actions_vals), 0x0,
1636 NULL, HFILL }
1638 { &hf_dpnss_a_b_party_addr,
1639 { "A/B party Address", "dpnss.a_b_party_addr",
1640 FT_STRING, BASE_NONE, NULL, 0x0,
1641 NULL, HFILL }
1643 { &hf_dpnss_call_idx,
1644 { "Call Index", "dpnss.call_idx",
1645 FT_STRING, BASE_NONE, NULL, 0x0,
1646 NULL, HFILL }
1650 /* Setup protocol subtree array */
1651 static gint *ett[] = {
1652 &ett_dpnss,
1653 &ett_dpnss_sel_field,
1654 &ett_dpnss_sic_field,
1655 &ett_dpnss_ind_field,
1656 &ett_dpnss_sup_str,
1659 /* Register the protocol name and description */
1660 proto_dpnss = proto_register_protocol("Digital Private Signalling System No 1","DPNSS", "dpnss");
1661 register_dissector("dpnss", dissect_dpnss, proto_dpnss);
1663 /* Required function calls to register the header fields and subtrees used */
1664 proto_register_field_array(proto_dpnss, hf, array_length(hf));
1665 proto_register_subtree_array(ett, array_length(ett));