Coverage Report

Created: 2026-05-14 06:28

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