7e2454541bfb84e93e06430f049143657ad6c48f
[obnox/wireshark/wip.git] / epan / dissectors / packet-gsm_ss.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler    */
3 /* ./packet-gsm_ss.c                                                          */
4 /* ../../tools/asn2eth.py -X -b -e -p gsm_ss -c gsm_ss.cnf -s packet-gsm_ss-template SS-Operations.asn */
5
6 /* Input file: packet-gsm_ss-template.c */
7
8 #line 1 "packet-gsm_ss-template.c"
9 /* packet-gsm_ss-template.c
10  * Routines for GSM Supplementary Services dissection
11  * Copyright 2005, Anders Broman <anders.broman@ericsson.com>
12  * Based on the dissector by:
13  * Michael Lum <mlum [AT] telostech.com>
14  * In association with Telos Technology Inc.
15  *
16  * Title                3GPP                    Other
17  *
18  *   Reference [1]
19  *   Mobile radio Layer 3 supplementary service specification;
20  *   Formats and coding
21  *   (3GPP TS 24.080 version )
22  * $Id$
23  *
24  * Wireshark - Network traffic analyzer
25  * By Gerald Combs <gerald@wireshark.org>
26  * Copyright 1998 Gerald Combs
27  *
28  * This program is free software; you can redistribute it and/or
29  * modify it under the terms of the GNU General Public License
30  * as published by the Free Software Foundation; either version 2
31  * of the License, or (at your option) any later version.
32  *
33  * This program is distributed in the hope that it will be useful,
34  * but WITHOUT ANY WARRANTY; without even the implied warranty of
35  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
36  * GNU General Public License for more details.
37  *
38  * You should have received a copy of the GNU General Public License
39  * along with this program; if not, write to the Free Software
40  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
41  * References: ETSI TS 129 002
42  */
43
44 #ifdef HAVE_CONFIG_H
45 # include "config.h"
46 #endif
47
48 #include <glib.h>
49 #include <epan/packet.h>
50 #include <epan/prefs.h>
51 #include <epan/conversation.h>
52 #include <epan/tap.h>
53
54 #include <stdio.h>
55 #include <string.h>
56
57 #include "packet-ber.h"
58 #include "packet-gsm_ss.h"
59 #include "packet-gsm_map.h"
60
61 #define PNAME  "GSM_SS"
62 #define PSNAME "GSM_SS"
63 #define PFNAME "gsm_ss"
64
65 const value_string gsm_ss_err_code_strings[] = {
66     { 1,        "Unknown Subscriber" },
67     { 3,        "Unknown MSC" },
68     { 5,        "Unidentified Subscriber" },
69     { 6,        "Absent Subscriber SM" },
70     { 7,        "Unknown Equipment" },
71     { 8,        "Roaming Not Allowed" },
72     { 9,        "Illegal Subscriber" },
73     { 10,       "Bearer Service Not Provisioned" },
74     { 11,       "Teleservice Not Provisioned" },
75     { 12,       "Illegal Equipment" },
76     { 13,       "Call Barred" },
77     { 14,       "Forwarding Violation" },
78     { 15,       "CUG Reject" },
79     { 16,       "Illegal SS Operation" },
80     { 17,       "SS Error Status" },
81     { 18,       "SS Not Available" },
82     { 19,       "SS Subscription Violation" },
83     { 20,       "SS Incompatibility" },
84     { 21,       "Facility Not Supported" },
85     { 25,       "No Handover Number Available" },
86     { 26,       "Subsequent Handover Failure" },
87     { 27,       "Absent Subscriber" },
88     { 28,       "Incompatible Terminal" },
89     { 29,       "Short Term Denial" },
90     { 30,       "Long Term Denial" },
91     { 31,       "Subscriber Busy For MT SMS" },
92     { 32,       "SM Delivery Failure" },
93     { 33,       "Message Waiting List Full" },
94     { 34,       "System Failure" },
95     { 35,       "Data Missing" },
96     { 36,       "Unexpected Data Value" },
97     { 37,       "PW Registration Failure" },
98     { 38,       "Negative PW Check" },
99     { 39,       "No Roaming Number Available" },
100     { 40,       "Tracing Buffer Full" },
101     { 42,       "Target Cell Outside Group Call Area" },
102     { 43,       "Number Of PW Attempts Violation" },
103     { 44,       "Number Changed" },
104     { 45,       "Busy Subscriber" },
105     { 46,       "No Subscriber Reply" },
106     { 47,       "Forwarding Failed" },
107     { 48,       "OR Not Allowed" },
108     { 49,       "ATI Not Allowed" },
109     { 50,       "No Group Call Number Available" },
110     { 51,       "Resource Limitation" },
111     { 52,       "Unauthorized Requesting Network" },
112     { 53,       "Unauthorized LCS Client" },
113     { 54,       "Position Method Failure" },
114     { 58,       "Unknown Or Unreachable LCS Client" },
115     { 59,       "MM Event Not Supported" },
116     { 60,       "ATSI Not Allowed" },
117     { 61,       "ATM Not Allowed" },
118     { 62,       "Information Not Available" },
119     { 71,       "Unknown Alphabet" },
120     { 72,       "USSD Busy" },
121     { 120,      "Nbr Sb Exceeded" },
122     { 121,      "Rejected By User" },
123     { 122,      "Rejected By Network" },
124     { 123,      "Deflection To Served Subscriber" },
125     { 124,      "Special Service Code" },
126     { 125,      "Invalid Deflected To Number" },
127     { 126,      "Max Number Of MPTY Participants Exceeded" },
128     { 127,      "Resources Not Available" },
129     { 0, NULL }
130 };
131
132 const value_string gsm_ss_opr_code_strings[] = {
133     { 10,       "Register SS" },
134     { 11,       "Erase SS" },
135     { 12,       "Activate SS" },
136     { 13,       "Deactivate SS" },
137     { 14,       "Interrogate SS" },
138     { 16,       "Notify SS" },
139     { 17,       "Register Password" },
140     { 18,       "Get Password" },
141     { 19,       "Process Unstructured SS Data" },
142     { 38,       "Forward Check SS Indication" },
143     { 59,       "Process Unstructured SS Request" },
144     { 60,       "Unstructured SS Request" },
145     { 61,       "Unstructured SS Notify" },
146     { 77,       "Erase CC Entry" },
147     { 112,      "lcs-AreaEventCancellation" },
148     { 113,      "lcs-AreaEventReport" },
149     { 114,      "LCS-AreaEventRequest" },
150     { 115,      "LCS MOLR" },
151     { 116,      "LCS Location Notification" },
152     { 117,      "Call Deflection" },
153     { 118,      "User User Service" },
154     { 119,      "Access Register CC Entry" },
155     { 120,      "Forward CUG Info" },
156     { 121,      "Split MPTY" },
157     { 122,      "Retrieve MPTY" },
158     { 123,      "Hold MPTY" },
159     { 124,      "Build MPTY" },
160     { 125,      "Forward Charge Advice" },
161     { 126,      "Explicit CT" },
162
163     { 0, NULL }
164 };
165
166 /* Initialize the protocol and registered fields */
167 int proto_gsm_ss = -1;
168
169 static int hf_gsm_ss_getPassword = -1;
170 static int hf_gsm_ss_currentPassword = -1;
171 static int hf_gsm_ss_SS_Code = -1;
172
173 /*--- Included file: packet-gsm_ss-hf.c ---*/
174 #line 1 "packet-gsm_ss-hf.c"
175 static int hf_gsm_ss_notifySS = -1;               /* NotifySS_Arg */
176 static int hf_gsm_ss_processUnstructuredSS_Data = -1;  /* SS_UserData */
177 static int hf_gsm_ss_forwardCUG_Info = -1;        /* ForwardCUG_InfoArg */
178 static int hf_gsm_ss_accessRegisterCCEntry = -1;  /* AccessRegisterCCEntryArg */
179 static int hf_gsm_ss_forwardChargeAdvice = -1;    /* ForwardChargeAdviceArg */
180 static int hf_gsm_ss_callDeflection = -1;         /* CallDeflectionArg */
181 static int hf_gsm_ss_lcs_LocationNotification = -1;  /* LocationNotificationArg */
182 static int hf_gsm_ss_lcs_MOLR = -1;               /* LCS_MOLRArg */
183 static int hf_gsm_ss_lcs_AreaEventRequest = -1;   /* LCS_AreaEventRequestArg */
184 static int hf_gsm_ss_lcs_AreaEventReport = -1;    /* LCS_AreaEventReportArg */
185 static int hf_gsm_ss_lcs_AreaEventCancellation = -1;  /* LCS_AreaEventCancellationArg */
186 static int hf_gsm_ss_registerCC_EntryRes = -1;    /* RegisterCC_EntryRes */
187 static int hf_gsm_ss_lcs_LocationNotification_res = -1;  /* LocationNotificationRes */
188 static int hf_gsm_ss_lcs_MOLR_res = -1;           /* LCS_MOLRRes */
189 static int hf_gsm_ss_ss_Code = -1;                /* SS_Code */
190 static int hf_gsm_ss_ss_Status = -1;              /* SS_Status */
191 static int hf_gsm_ss_ss_Notification = -1;        /* SS_Notification */
192 static int hf_gsm_ss_callIsWaiting_Indicator = -1;  /* NULL */
193 static int hf_gsm_ss_callOnHold_Indicator = -1;   /* CallOnHold_Indicator */
194 static int hf_gsm_ss_mpty_Indicator = -1;         /* NULL */
195 static int hf_gsm_ss_cug_Index = -1;              /* CUG_Index */
196 static int hf_gsm_ss_clirSuppressionRejected = -1;  /* NULL */
197 static int hf_gsm_ss_ect_Indicator = -1;          /* ECT_Indicator */
198 static int hf_gsm_ss_nameIndicator = -1;          /* NameIndicator */
199 static int hf_gsm_ss_ccbs_Feature = -1;           /* CCBS_Feature */
200 static int hf_gsm_ss_alertingPattern = -1;        /* AlertingPattern */
201 static int hf_gsm_ss_multicall_Indicator = -1;    /* Multicall_Indicator */
202 static int hf_gsm_ss_chargingInformation = -1;    /* ChargingInformation */
203 static int hf_gsm_ss_e1 = -1;                     /* E1 */
204 static int hf_gsm_ss_e2 = -1;                     /* E2 */
205 static int hf_gsm_ss_e3 = -1;                     /* E3 */
206 static int hf_gsm_ss_e4 = -1;                     /* E4 */
207 static int hf_gsm_ss_e5 = -1;                     /* E5 */
208 static int hf_gsm_ss_e6 = -1;                     /* E6 */
209 static int hf_gsm_ss_e7 = -1;                     /* E7 */
210 static int hf_gsm_ss_suppressPrefCUG = -1;        /* NULL */
211 static int hf_gsm_ss_suppressOA = -1;             /* NULL */
212 static int hf_gsm_ss_ect_CallState = -1;          /* ECT_CallState */
213 static int hf_gsm_ss_rdn = -1;                    /* RDN */
214 static int hf_gsm_ss_callingName = -1;            /* Name */
215 static int hf_gsm_ss_namePresentationAllowed = -1;  /* NameSet */
216 static int hf_gsm_ss_presentationRestricted = -1;  /* NULL */
217 static int hf_gsm_ss_nameUnavailable = -1;        /* NULL */
218 static int hf_gsm_ss_namePresentationRestricted = -1;  /* NameSet */
219 static int hf_gsm_ss_dataCodingScheme = -1;       /* USSD_DataCodingScheme */
220 static int hf_gsm_ss_lengthInCharacters = -1;     /* INTEGER */
221 static int hf_gsm_ss_nameString = -1;             /* USSD_String */
222 static int hf_gsm_ss_presentationAllowedAddress = -1;  /* RemotePartyNumber */
223 static int hf_gsm_ss_numberNotAvailableDueToInterworking = -1;  /* NULL */
224 static int hf_gsm_ss_presentationRestrictedAddress = -1;  /* RemotePartyNumber */
225 static int hf_gsm_ss_partyNumber = -1;            /* ISDN_AddressString */
226 static int hf_gsm_ss_partyNumberSubaddress = -1;  /* ISDN_SubaddressString */
227 static int hf_gsm_ss_ccbs_Feature1 = -1;          /* T_ccbs_Feature */
228 static int hf_gsm_ss_ccbs_Index = -1;             /* INTEGER_1_5 */
229 static int hf_gsm_ss_b_subscriberNumber = -1;     /* T_b_subscriberNumber */
230 static int hf_gsm_ss_b_subscriberSubaddress = -1;  /* OCTET_STRING_SIZE_1_21 */
231 static int hf_gsm_ss_basicServiceGroup = -1;      /* T_basicServiceGroup */
232 static int hf_gsm_ss_bearerService = -1;          /* OCTET_STRING_SIZE_1 */
233 static int hf_gsm_ss_teleservice = -1;            /* OCTET_STRING_SIZE_1 */
234 static int hf_gsm_ss_deflectedToNumber = -1;      /* AddressString */
235 static int hf_gsm_ss_deflectedToSubaddress = -1;  /* ISDN_SubaddressString */
236 static int hf_gsm_ss_uUS_Service = -1;            /* UUS_Service */
237 static int hf_gsm_ss_uUS_Required = -1;           /* BOOLEAN */
238 static int hf_gsm_ss_notificationType = -1;       /* NotificationToMSUser */
239 static int hf_gsm_ss_locationType = -1;           /* LocationType */
240 static int hf_gsm_ss_lcsClientExternalID = -1;    /* LCSClientExternalID */
241 static int hf_gsm_ss_lcsClientName = -1;          /* LCSClientName */
242 static int hf_gsm_ss_lcsRequestorID = -1;         /* LCSRequestorID */
243 static int hf_gsm_ss_lcsCodeword = -1;            /* LCSCodeword */
244 static int hf_gsm_ss_lcsServiceTypeID = -1;       /* LCSServiceTypeID */
245 static int hf_gsm_ss_verificationResponse = -1;   /* VerificationResponse */
246 static int hf_gsm_ss_molr_Type = -1;              /* MOLR_Type */
247 static int hf_gsm_ss_locationMethod = -1;         /* LocationMethod */
248 static int hf_gsm_ss_lcs_QoS = -1;                /* LCS_QoS */
249 static int hf_gsm_ss_mlc_Number = -1;             /* ISDN_AddressString */
250 static int hf_gsm_ss_gpsAssistanceData = -1;      /* GPSAssistanceData */
251 static int hf_gsm_ss_supportedGADShapes = -1;     /* SupportedGADShapes */
252 static int hf_gsm_ss_ageOfLocationInfo = -1;      /* AgeOfLocationInformation */
253 static int hf_gsm_ss_pseudonymIndicator = -1;     /* NULL */
254 static int hf_gsm_ss_locationEstimate = -1;       /* Ext_GeographicalInformation */
255 static int hf_gsm_ss_decipheringKeys = -1;        /* DecipheringKeys */
256 static int hf_gsm_ss_add_LocationEstimate = -1;   /* Add_GeographicalInformation */
257 static int hf_gsm_ss_referenceNumber = -1;        /* LCS_ReferenceNumber */
258 static int hf_gsm_ss_h_gmlc_address = -1;         /* GSN_Address */
259 static int hf_gsm_ss_deferredLocationEventType = -1;  /* DeferredLocationEventType */
260 static int hf_gsm_ss_areaEventInfo = -1;          /* AreaEventInfo */
261
262 /*--- End of included file: packet-gsm_ss-hf.c ---*/
263 #line 165 "packet-gsm_ss-template.c"
264
265 /* Initialize the subtree pointers */
266
267 /*--- Included file: packet-gsm_ss-ett.c ---*/
268 #line 1 "packet-gsm_ss-ett.c"
269 static gint ett_gsm_ss_DummySS_operationsArg = -1;
270 static gint ett_gsm_ss_DummySS_operationsRes = -1;
271 static gint ett_gsm_ss_NotifySS_Arg = -1;
272 static gint ett_gsm_ss_ForwardChargeAdviceArg = -1;
273 static gint ett_gsm_ss_ChargingInformation = -1;
274 static gint ett_gsm_ss_ForwardCUG_InfoArg = -1;
275 static gint ett_gsm_ss_ECT_Indicator = -1;
276 static gint ett_gsm_ss_NameIndicator = -1;
277 static gint ett_gsm_ss_Name = -1;
278 static gint ett_gsm_ss_NameSet = -1;
279 static gint ett_gsm_ss_RDN = -1;
280 static gint ett_gsm_ss_RemotePartyNumber = -1;
281 static gint ett_gsm_ss_AccessRegisterCCEntryArg = -1;
282 static gint ett_gsm_ss_RegisterCC_EntryRes = -1;
283 static gint ett_gsm_ss_T_ccbs_Feature = -1;
284 static gint ett_gsm_ss_T_basicServiceGroup = -1;
285 static gint ett_gsm_ss_CallDeflectionArg = -1;
286 static gint ett_gsm_ss_UserUserServiceArg = -1;
287 static gint ett_gsm_ss_LocationNotificationArg = -1;
288 static gint ett_gsm_ss_LocationNotificationRes = -1;
289 static gint ett_gsm_ss_LCS_MOLRArg = -1;
290 static gint ett_gsm_ss_LCS_MOLRRes = -1;
291 static gint ett_gsm_ss_LCS_AreaEventRequestArg = -1;
292 static gint ett_gsm_ss_LCS_AreaEventReportArg = -1;
293 static gint ett_gsm_ss_LCS_AreaEventCancellationArg = -1;
294
295 /*--- End of included file: packet-gsm_ss-ett.c ---*/
296 #line 168 "packet-gsm_ss-template.c"
297
298 static dissector_table_t        sms_dissector_table;    /* SMS TPDU */
299
300
301 /*--- Included file: packet-gsm_ss-fn.c ---*/
302 #line 1 "packet-gsm_ss-fn.c"
303 /*--- Fields for imported types ---*/
304
305 static int dissect_ss_Code_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
306   return dissect_gsm_map_SS_Code(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ss_Code);
307 }
308 static int dissect_ss_Status_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
309   return dissect_gsm_map_SS_Status(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ss_Status);
310 }
311 static int dissect_cug_Index_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
312   return dissect_gsm_map_CUG_Index(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_cug_Index);
313 }
314 static int dissect_ccbs_Feature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
315   return dissect_gsm_map_CCBS_Feature(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ccbs_Feature);
316 }
317 static int dissect_alertingPattern_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
318   return dissect_gsm_map_AlertingPattern(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_alertingPattern);
319 }
320 static int dissect_dataCodingScheme_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
321   return dissect_gsm_map_USSD_DataCodingScheme(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_dataCodingScheme);
322 }
323 static int dissect_nameString_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
324   return dissect_gsm_map_USSD_String(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_nameString);
325 }
326 static int dissect_partyNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
327   return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_partyNumber);
328 }
329 static int dissect_partyNumberSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
330   return dissect_gsm_map_ISDN_SubaddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_partyNumberSubaddress);
331 }
332 static int dissect_deflectedToNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
333   return dissect_gsm_map_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_deflectedToNumber);
334 }
335 static int dissect_deflectedToSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
336   return dissect_gsm_map_ISDN_SubaddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_deflectedToSubaddress);
337 }
338 static int dissect_notificationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
339   return dissect_gsm_map_NotificationToMSUser(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_notificationType);
340 }
341 static int dissect_locationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
342   return dissect_gsm_map_LocationType(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_locationType);
343 }
344 static int dissect_lcsClientExternalID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
345   return dissect_gsm_map_LCSClientExternalID(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcsClientExternalID);
346 }
347 static int dissect_lcsClientName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
348   return dissect_gsm_map_LCSClientName(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcsClientName);
349 }
350 static int dissect_lcsRequestorID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
351   return dissect_gsm_map_LCSRequestorID(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcsRequestorID);
352 }
353 static int dissect_lcsCodeword_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
354   return dissect_gsm_map_LCSCodeword(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcsCodeword);
355 }
356 static int dissect_lcsServiceTypeID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
357   return dissect_gsm_map_LCSServiceTypeID(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcsServiceTypeID);
358 }
359 static int dissect_lcs_QoS_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
360   return dissect_gsm_map_LCS_QoS(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_QoS);
361 }
362 static int dissect_mlc_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
363   return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_mlc_Number);
364 }
365 static int dissect_supportedGADShapes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
366   return dissect_gsm_map_SupportedGADShapes(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_supportedGADShapes);
367 }
368 static int dissect_ageOfLocationInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
369   return dissect_gsm_map_AgeOfLocationInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ageOfLocationInfo);
370 }
371 static int dissect_locationEstimate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
372   return dissect_gsm_map_Ext_GeographicalInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_locationEstimate);
373 }
374 static int dissect_add_LocationEstimate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
375   return dissect_gsm_map_Add_GeographicalInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_add_LocationEstimate);
376 }
377 static int dissect_referenceNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
378   return dissect_gsm_map_LCS_ReferenceNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_referenceNumber);
379 }
380 static int dissect_h_gmlc_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
381   return dissect_gsm_map_GSN_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_h_gmlc_address);
382 }
383 static int dissect_deferredLocationEventType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
384   return dissect_gsm_map_DeferredLocationEventType(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_deferredLocationEventType);
385 }
386 static int dissect_areaEventInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
387   return dissect_gsm_map_AreaEventInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_areaEventInfo);
388 }
389
390
391
392 static int
393 dissect_gsm_ss_SS_Notification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
394   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
395                                        NULL);
396
397   return offset;
398 }
399 static int dissect_ss_Notification_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
400   return dissect_gsm_ss_SS_Notification(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ss_Notification);
401 }
402
403
404
405 static int
406 dissect_gsm_ss_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
407   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
408
409   return offset;
410 }
411 static int dissect_callIsWaiting_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
412   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_callIsWaiting_Indicator);
413 }
414 static int dissect_mpty_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
415   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_mpty_Indicator);
416 }
417 static int dissect_clirSuppressionRejected_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
418   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_clirSuppressionRejected);
419 }
420 static int dissect_suppressPrefCUG_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
421   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_suppressPrefCUG);
422 }
423 static int dissect_suppressOA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
424   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_suppressOA);
425 }
426 static int dissect_presentationRestricted_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
427   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_presentationRestricted);
428 }
429 static int dissect_nameUnavailable_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
430   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_nameUnavailable);
431 }
432 static int dissect_numberNotAvailableDueToInterworking_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
433   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_numberNotAvailableDueToInterworking);
434 }
435 static int dissect_pseudonymIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
436   return dissect_gsm_ss_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_pseudonymIndicator);
437 }
438
439
440 static const value_string gsm_ss_CallOnHold_Indicator_vals[] = {
441   {   0, "callRetrieved" },
442   {   1, "callOnHold" },
443   { 0, NULL }
444 };
445
446
447 static int
448 dissect_gsm_ss_CallOnHold_Indicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
449   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
450                                   NULL);
451
452   return offset;
453 }
454 static int dissect_callOnHold_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
455   return dissect_gsm_ss_CallOnHold_Indicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_callOnHold_Indicator);
456 }
457
458
459 static const value_string gsm_ss_ECT_CallState_vals[] = {
460   {   0, "alerting" },
461   {   1, "active" },
462   { 0, NULL }
463 };
464
465
466 static int
467 dissect_gsm_ss_ECT_CallState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
468   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
469                                   NULL);
470
471   return offset;
472 }
473 static int dissect_ect_CallState_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
474   return dissect_gsm_ss_ECT_CallState(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ect_CallState);
475 }
476
477
478 static const ber_sequence_t RemotePartyNumber_sequence[] = {
479   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_partyNumber_impl },
480   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_partyNumberSubaddress_impl },
481   { 0, 0, 0, NULL }
482 };
483
484 static int
485 dissect_gsm_ss_RemotePartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
486   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
487                                    RemotePartyNumber_sequence, hf_index, ett_gsm_ss_RemotePartyNumber);
488
489   return offset;
490 }
491 static int dissect_presentationAllowedAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
492   return dissect_gsm_ss_RemotePartyNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_presentationAllowedAddress);
493 }
494 static int dissect_presentationRestrictedAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
495   return dissect_gsm_ss_RemotePartyNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_presentationRestrictedAddress);
496 }
497
498
499 static const value_string gsm_ss_RDN_vals[] = {
500   {   0, "presentationAllowedAddress" },
501   {   1, "presentationRestricted" },
502   {   2, "numberNotAvailableDueToInterworking" },
503   {   3, "presentationRestrictedAddress" },
504   { 0, NULL }
505 };
506
507 static const ber_choice_t RDN_choice[] = {
508   {   0, BER_CLASS_CON, 0, 0, dissect_presentationAllowedAddress_impl },
509   {   1, BER_CLASS_CON, 1, 0, dissect_presentationRestricted_impl },
510   {   2, BER_CLASS_CON, 2, 0, dissect_numberNotAvailableDueToInterworking_impl },
511   {   3, BER_CLASS_CON, 3, 0, dissect_presentationRestrictedAddress_impl },
512   { 0, 0, 0, 0, NULL }
513 };
514
515 static int
516 dissect_gsm_ss_RDN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
517   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
518                                  RDN_choice, hf_index, ett_gsm_ss_RDN,
519                                  NULL);
520
521   return offset;
522 }
523 static int dissect_rdn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
524   return dissect_gsm_ss_RDN(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_rdn);
525 }
526
527
528 static const ber_sequence_t ECT_Indicator_sequence[] = {
529   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ect_CallState_impl },
530   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_rdn_impl },
531   { 0, 0, 0, NULL }
532 };
533
534 static int
535 dissect_gsm_ss_ECT_Indicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
536   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
537                                    ECT_Indicator_sequence, hf_index, ett_gsm_ss_ECT_Indicator);
538
539   return offset;
540 }
541 static int dissect_ect_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
542   return dissect_gsm_ss_ECT_Indicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ect_Indicator);
543 }
544
545
546
547 static int
548 dissect_gsm_ss_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
549   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
550                                   NULL);
551
552   return offset;
553 }
554 static int dissect_lengthInCharacters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
555   return dissect_gsm_ss_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_lengthInCharacters);
556 }
557
558
559 static const ber_sequence_t NameSet_sequence[] = {
560   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_dataCodingScheme_impl },
561   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lengthInCharacters_impl },
562   { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_nameString_impl },
563   { 0, 0, 0, NULL }
564 };
565
566 static int
567 dissect_gsm_ss_NameSet(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
568   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
569                                    NameSet_sequence, hf_index, ett_gsm_ss_NameSet);
570
571   return offset;
572 }
573 static int dissect_namePresentationAllowed_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
574   return dissect_gsm_ss_NameSet(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_namePresentationAllowed);
575 }
576 static int dissect_namePresentationRestricted_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
577   return dissect_gsm_ss_NameSet(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_namePresentationRestricted);
578 }
579
580
581 static const value_string gsm_ss_Name_vals[] = {
582   {   0, "namePresentationAllowed" },
583   {   1, "presentationRestricted" },
584   {   2, "nameUnavailable" },
585   {   3, "namePresentationRestricted" },
586   { 0, NULL }
587 };
588
589 static const ber_choice_t Name_choice[] = {
590   {   0, BER_CLASS_CON, 0, 0, dissect_namePresentationAllowed_impl },
591   {   1, BER_CLASS_CON, 1, 0, dissect_presentationRestricted_impl },
592   {   2, BER_CLASS_CON, 2, 0, dissect_nameUnavailable_impl },
593   {   3, BER_CLASS_CON, 3, 0, dissect_namePresentationRestricted_impl },
594   { 0, 0, 0, 0, NULL }
595 };
596
597 static int
598 dissect_gsm_ss_Name(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
599   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
600                                  Name_choice, hf_index, ett_gsm_ss_Name,
601                                  NULL);
602
603   return offset;
604 }
605 static int dissect_callingName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
606   return dissect_gsm_ss_Name(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_callingName);
607 }
608
609
610 static const ber_sequence_t NameIndicator_sequence[] = {
611   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_callingName_impl },
612   { 0, 0, 0, NULL }
613 };
614
615 static int
616 dissect_gsm_ss_NameIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
617   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
618                                    NameIndicator_sequence, hf_index, ett_gsm_ss_NameIndicator);
619
620   return offset;
621 }
622 static int dissect_nameIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
623   return dissect_gsm_ss_NameIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_nameIndicator);
624 }
625
626
627 static const value_string gsm_ss_Multicall_Indicator_vals[] = {
628   {   0, "nbr-SNexceeded" },
629   {   1, "nbr-Userexceeded" },
630   { 0, NULL }
631 };
632
633
634 static int
635 dissect_gsm_ss_Multicall_Indicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
636   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
637                                   NULL);
638
639   return offset;
640 }
641 static int dissect_multicall_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
642   return dissect_gsm_ss_Multicall_Indicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_multicall_Indicator);
643 }
644
645
646 static const ber_sequence_t NotifySS_Arg_sequence[] = {
647   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
648   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
649   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Notification_impl },
650   { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callIsWaiting_Indicator_impl },
651   { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callOnHold_Indicator_impl },
652   { BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mpty_Indicator_impl },
653   { BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_Index_impl },
654   { BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_clirSuppressionRejected_impl },
655   { BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ect_Indicator_impl },
656   { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nameIndicator_impl },
657   { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Feature_impl },
658   { BER_CLASS_CON, 22, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertingPattern_impl },
659   { BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_multicall_Indicator_impl },
660   { 0, 0, 0, NULL }
661 };
662
663 static int
664 dissect_gsm_ss_NotifySS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
665   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
666                                    NotifySS_Arg_sequence, hf_index, ett_gsm_ss_NotifySS_Arg);
667
668   return offset;
669 }
670 static int dissect_notifySS(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
671   return dissect_gsm_ss_NotifySS_Arg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_notifySS);
672 }
673
674
675
676 static int
677 dissect_gsm_ss_SS_UserData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
678   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
679                                             pinfo, tree, tvb, offset, hf_index,
680                                             NULL);
681
682   return offset;
683 }
684 static int dissect_processUnstructuredSS_Data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
685   return dissect_gsm_ss_SS_UserData(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_processUnstructuredSS_Data);
686 }
687
688
689 static const ber_sequence_t ForwardCUG_InfoArg_sequence[] = {
690   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_Index_impl },
691   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppressPrefCUG_impl },
692   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppressOA_impl },
693   { 0, 0, 0, NULL }
694 };
695
696 static int
697 dissect_gsm_ss_ForwardCUG_InfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
698   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
699                                    ForwardCUG_InfoArg_sequence, hf_index, ett_gsm_ss_ForwardCUG_InfoArg);
700
701   return offset;
702 }
703 static int dissect_forwardCUG_Info(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
704   return dissect_gsm_ss_ForwardCUG_InfoArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_forwardCUG_Info);
705 }
706
707
708 static const ber_sequence_t AccessRegisterCCEntryArg_sequence[] = {
709   { 0, 0, 0, NULL }
710 };
711
712 static int
713 dissect_gsm_ss_AccessRegisterCCEntryArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
714   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
715                                    AccessRegisterCCEntryArg_sequence, hf_index, ett_gsm_ss_AccessRegisterCCEntryArg);
716
717   return offset;
718 }
719 static int dissect_accessRegisterCCEntry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
720   return dissect_gsm_ss_AccessRegisterCCEntryArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_accessRegisterCCEntry);
721 }
722
723
724
725 static int
726 dissect_gsm_ss_E1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
727   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
728                                   NULL);
729
730   return offset;
731 }
732 static int dissect_e1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
733   return dissect_gsm_ss_E1(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e1);
734 }
735
736
737
738 static int
739 dissect_gsm_ss_E2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
740   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
741                                   NULL);
742
743   return offset;
744 }
745 static int dissect_e2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
746   return dissect_gsm_ss_E2(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e2);
747 }
748
749
750
751 static int
752 dissect_gsm_ss_E3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
753   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
754                                   NULL);
755
756   return offset;
757 }
758 static int dissect_e3_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
759   return dissect_gsm_ss_E3(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e3);
760 }
761
762
763
764 static int
765 dissect_gsm_ss_E4(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
766   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
767                                   NULL);
768
769   return offset;
770 }
771 static int dissect_e4_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
772   return dissect_gsm_ss_E4(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e4);
773 }
774
775
776
777 static int
778 dissect_gsm_ss_E5(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
779   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
780                                   NULL);
781
782   return offset;
783 }
784 static int dissect_e5_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
785   return dissect_gsm_ss_E5(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e5);
786 }
787
788
789
790 static int
791 dissect_gsm_ss_E6(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
792   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
793                                   NULL);
794
795   return offset;
796 }
797 static int dissect_e6_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
798   return dissect_gsm_ss_E6(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e6);
799 }
800
801
802
803 static int
804 dissect_gsm_ss_E7(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
805   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
806                                   NULL);
807
808   return offset;
809 }
810 static int dissect_e7_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
811   return dissect_gsm_ss_E7(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_e7);
812 }
813
814
815 static const ber_sequence_t ChargingInformation_sequence[] = {
816   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e1_impl },
817   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e2_impl },
818   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e3_impl },
819   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e4_impl },
820   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e5_impl },
821   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e6_impl },
822   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_e7_impl },
823   { 0, 0, 0, NULL }
824 };
825
826 static int
827 dissect_gsm_ss_ChargingInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
828   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
829                                    ChargingInformation_sequence, hf_index, ett_gsm_ss_ChargingInformation);
830
831   return offset;
832 }
833 static int dissect_chargingInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
834   return dissect_gsm_ss_ChargingInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_chargingInformation);
835 }
836
837
838 static const ber_sequence_t ForwardChargeAdviceArg_sequence[] = {
839   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
840   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_chargingInformation_impl },
841   { 0, 0, 0, NULL }
842 };
843
844 static int
845 dissect_gsm_ss_ForwardChargeAdviceArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
846   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
847                                    ForwardChargeAdviceArg_sequence, hf_index, ett_gsm_ss_ForwardChargeAdviceArg);
848
849   return offset;
850 }
851 static int dissect_forwardChargeAdvice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
852   return dissect_gsm_ss_ForwardChargeAdviceArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_forwardChargeAdvice);
853 }
854
855
856 static const ber_sequence_t CallDeflectionArg_sequence[] = {
857   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_deflectedToNumber_impl },
858   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deflectedToSubaddress_impl },
859   { 0, 0, 0, NULL }
860 };
861
862 static int
863 dissect_gsm_ss_CallDeflectionArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
864   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
865                                    CallDeflectionArg_sequence, hf_index, ett_gsm_ss_CallDeflectionArg);
866
867   return offset;
868 }
869 static int dissect_callDeflection(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
870   return dissect_gsm_ss_CallDeflectionArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_callDeflection);
871 }
872
873
874 static const ber_sequence_t LocationNotificationArg_sequence[] = {
875   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_notificationType_impl },
876   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_locationType_impl },
877   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientExternalID_impl },
878   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientName_impl },
879   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsRequestorID_impl },
880   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsCodeword_impl },
881   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsServiceTypeID_impl },
882   { 0, 0, 0, NULL }
883 };
884
885 static int
886 dissect_gsm_ss_LocationNotificationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
887   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
888                                    LocationNotificationArg_sequence, hf_index, ett_gsm_ss_LocationNotificationArg);
889
890   return offset;
891 }
892 static int dissect_lcs_LocationNotification(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
893   return dissect_gsm_ss_LocationNotificationArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_LocationNotification);
894 }
895
896
897 static const value_string gsm_ss_MOLR_Type_vals[] = {
898   {   0, "locationEstimate" },
899   {   1, "assistanceData" },
900   {   2, "deCipheringKeys" },
901   { 0, NULL }
902 };
903
904
905 static int
906 dissect_gsm_ss_MOLR_Type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
907   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
908                                   NULL);
909
910   return offset;
911 }
912 static int dissect_molr_Type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
913   return dissect_gsm_ss_MOLR_Type(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_molr_Type);
914 }
915
916
917 static const value_string gsm_ss_LocationMethod_vals[] = {
918   {   0, "msBasedEOTD" },
919   {   1, "msAssistedEOTD" },
920   {   2, "assistedGPS" },
921   {   3, "msBasedOTDOA" },
922   { 0, NULL }
923 };
924
925
926 static int
927 dissect_gsm_ss_LocationMethod(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
928   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
929                                   NULL);
930
931   return offset;
932 }
933 static int dissect_locationMethod_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
934   return dissect_gsm_ss_LocationMethod(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_locationMethod);
935 }
936
937
938
939 static int
940 dissect_gsm_ss_GPSAssistanceData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
941   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
942                                        NULL);
943
944   return offset;
945 }
946 static int dissect_gpsAssistanceData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
947   return dissect_gsm_ss_GPSAssistanceData(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_gpsAssistanceData);
948 }
949
950
951 static const ber_sequence_t LCS_MOLRArg_sequence[] = {
952   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_molr_Type_impl },
953   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationMethod_impl },
954   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_QoS_impl },
955   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientExternalID_impl },
956   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mlc_Number_impl },
957   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gpsAssistanceData_impl },
958   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedGADShapes_impl },
959   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsServiceTypeID_impl },
960   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ageOfLocationInfo_impl },
961   { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationType_impl },
962   { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pseudonymIndicator_impl },
963   { 0, 0, 0, NULL }
964 };
965
966 static int
967 dissect_gsm_ss_LCS_MOLRArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
968   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
969                                    LCS_MOLRArg_sequence, hf_index, ett_gsm_ss_LCS_MOLRArg);
970
971   return offset;
972 }
973 static int dissect_lcs_MOLR(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
974   return dissect_gsm_ss_LCS_MOLRArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_MOLR);
975 }
976
977
978 static const ber_sequence_t LCS_AreaEventRequestArg_sequence[] = {
979   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_referenceNumber_impl },
980   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h_gmlc_address_impl },
981   { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_deferredLocationEventType_impl },
982   { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_areaEventInfo_impl },
983   { 0, 0, 0, NULL }
984 };
985
986 static int
987 dissect_gsm_ss_LCS_AreaEventRequestArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
988   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
989                                    LCS_AreaEventRequestArg_sequence, hf_index, ett_gsm_ss_LCS_AreaEventRequestArg);
990
991   return offset;
992 }
993 static int dissect_lcs_AreaEventRequest(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
994   return dissect_gsm_ss_LCS_AreaEventRequestArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_AreaEventRequest);
995 }
996
997
998 static const ber_sequence_t LCS_AreaEventReportArg_sequence[] = {
999   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_referenceNumber_impl },
1000   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h_gmlc_address_impl },
1001   { 0, 0, 0, NULL }
1002 };
1003
1004 static int
1005 dissect_gsm_ss_LCS_AreaEventReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1006   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1007                                    LCS_AreaEventReportArg_sequence, hf_index, ett_gsm_ss_LCS_AreaEventReportArg);
1008
1009   return offset;
1010 }
1011 static int dissect_lcs_AreaEventReport(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1012   return dissect_gsm_ss_LCS_AreaEventReportArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_AreaEventReport);
1013 }
1014
1015
1016 static const ber_sequence_t LCS_AreaEventCancellationArg_sequence[] = {
1017   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_referenceNumber_impl },
1018   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h_gmlc_address_impl },
1019   { 0, 0, 0, NULL }
1020 };
1021
1022 static int
1023 dissect_gsm_ss_LCS_AreaEventCancellationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1024   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1025                                    LCS_AreaEventCancellationArg_sequence, hf_index, ett_gsm_ss_LCS_AreaEventCancellationArg);
1026
1027   return offset;
1028 }
1029 static int dissect_lcs_AreaEventCancellation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1030   return dissect_gsm_ss_LCS_AreaEventCancellationArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_AreaEventCancellation);
1031 }
1032
1033
1034 static const value_string gsm_ss_DummySS_operationsArg_vals[] = {
1035   {   0, "notifySS" },
1036   {   1, "processUnstructuredSS-Data" },
1037   {   2, "forwardCUG-Info" },
1038   {   3, "accessRegisterCCEntry" },
1039   {   4, "forwardChargeAdvice" },
1040   {   5, "callDeflection" },
1041   {   6, "lcs-LocationNotification" },
1042   {   7, "lcs-MOLR" },
1043   {   8, "lcs-AreaEventRequest" },
1044   {   9, "lcs-AreaEventReport" },
1045   {  10, "lcs-AreaEventCancellation" },
1046   { 0, NULL }
1047 };
1048
1049 static const ber_choice_t DummySS_operationsArg_choice[] = {
1050   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_notifySS },
1051   {   1, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_processUnstructuredSS_Data },
1052   {   2, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardCUG_Info },
1053   {   3, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_accessRegisterCCEntry },
1054   {   4, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardChargeAdvice },
1055   {   5, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_callDeflection },
1056   {   6, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_LocationNotification },
1057   {   7, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_MOLR },
1058   {   8, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_AreaEventRequest },
1059   {   9, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_AreaEventReport },
1060   {  10, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_AreaEventCancellation },
1061   { 0, 0, 0, 0, NULL }
1062 };
1063
1064 static int
1065 dissect_gsm_ss_DummySS_operationsArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1066   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1067                                  DummySS_operationsArg_choice, hf_index, ett_gsm_ss_DummySS_operationsArg,
1068                                  NULL);
1069
1070   return offset;
1071 }
1072
1073
1074
1075 static int
1076 dissect_gsm_ss_INTEGER_1_5(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1077   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1078                                   NULL);
1079
1080   return offset;
1081 }
1082 static int dissect_ccbs_Index_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1083   return dissect_gsm_ss_INTEGER_1_5(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ccbs_Index);
1084 }
1085
1086
1087
1088 static int
1089 dissect_gsm_ss_T_b_subscriberNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1090   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1091                                        NULL);
1092
1093   return offset;
1094 }
1095 static int dissect_b_subscriberNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1096   return dissect_gsm_ss_T_b_subscriberNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_b_subscriberNumber);
1097 }
1098
1099
1100
1101 static int
1102 dissect_gsm_ss_OCTET_STRING_SIZE_1_21(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1103   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1104                                        NULL);
1105
1106   return offset;
1107 }
1108 static int dissect_b_subscriberSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1109   return dissect_gsm_ss_OCTET_STRING_SIZE_1_21(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_b_subscriberSubaddress);
1110 }
1111
1112
1113
1114 static int
1115 dissect_gsm_ss_OCTET_STRING_SIZE_1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1116   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1117                                        NULL);
1118
1119   return offset;
1120 }
1121 static int dissect_bearerService_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1122   return dissect_gsm_ss_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_bearerService);
1123 }
1124 static int dissect_teleservice_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1125   return dissect_gsm_ss_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_teleservice);
1126 }
1127
1128
1129 static const value_string gsm_ss_T_basicServiceGroup_vals[] = {
1130   {   2, "bearerService" },
1131   {   3, "teleservice" },
1132   { 0, NULL }
1133 };
1134
1135 static const ber_choice_t T_basicServiceGroup_choice[] = {
1136   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_bearerService_impl },
1137   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_teleservice_impl },
1138   { 0, 0, 0, 0, NULL }
1139 };
1140
1141 static int
1142 dissect_gsm_ss_T_basicServiceGroup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1143   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1144                                  T_basicServiceGroup_choice, hf_index, ett_gsm_ss_T_basicServiceGroup,
1145                                  NULL);
1146
1147   return offset;
1148 }
1149 static int dissect_basicServiceGroup_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1150   return dissect_gsm_ss_T_basicServiceGroup(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_basicServiceGroup);
1151 }
1152
1153
1154 static const ber_sequence_t T_ccbs_Feature_sequence[] = {
1155   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl },
1156   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberNumber_impl },
1157   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberSubaddress_impl },
1158   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_basicServiceGroup_impl },
1159   { 0, 0, 0, NULL }
1160 };
1161
1162 static int
1163 dissect_gsm_ss_T_ccbs_Feature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1164   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1165                                    T_ccbs_Feature_sequence, hf_index, ett_gsm_ss_T_ccbs_Feature);
1166
1167   return offset;
1168 }
1169 static int dissect_ccbs_Feature1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1170   return dissect_gsm_ss_T_ccbs_Feature(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_ccbs_Feature1);
1171 }
1172
1173
1174 static const ber_sequence_t RegisterCC_EntryRes_sequence[] = {
1175   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Feature1_impl },
1176   { 0, 0, 0, NULL }
1177 };
1178
1179 static int
1180 dissect_gsm_ss_RegisterCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1181   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1182                                    RegisterCC_EntryRes_sequence, hf_index, ett_gsm_ss_RegisterCC_EntryRes);
1183
1184   return offset;
1185 }
1186 static int dissect_registerCC_EntryRes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1187   return dissect_gsm_ss_RegisterCC_EntryRes(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_registerCC_EntryRes);
1188 }
1189
1190
1191 static const value_string gsm_ss_VerificationResponse_vals[] = {
1192   {   0, "permissionDenied" },
1193   {   1, "permissionGranted" },
1194   { 0, NULL }
1195 };
1196
1197
1198 static int
1199 dissect_gsm_ss_VerificationResponse(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1200   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1201                                   NULL);
1202
1203   return offset;
1204 }
1205 static int dissect_verificationResponse_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1206   return dissect_gsm_ss_VerificationResponse(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_verificationResponse);
1207 }
1208
1209
1210 static const ber_sequence_t LocationNotificationRes_sequence[] = {
1211   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_verificationResponse_impl },
1212   { 0, 0, 0, NULL }
1213 };
1214
1215 static int
1216 dissect_gsm_ss_LocationNotificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1217   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1218                                    LocationNotificationRes_sequence, hf_index, ett_gsm_ss_LocationNotificationRes);
1219
1220   return offset;
1221 }
1222 static int dissect_lcs_LocationNotification_res(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1223   return dissect_gsm_ss_LocationNotificationRes(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_LocationNotification_res);
1224 }
1225
1226
1227
1228 static int
1229 dissect_gsm_ss_DecipheringKeys(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1230   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1231                                        NULL);
1232
1233   return offset;
1234 }
1235 static int dissect_decipheringKeys_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1236   return dissect_gsm_ss_DecipheringKeys(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_decipheringKeys);
1237 }
1238
1239
1240 static const ber_sequence_t LCS_MOLRRes_sequence[] = {
1241   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationEstimate_impl },
1242   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_decipheringKeys_impl },
1243   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_add_LocationEstimate_impl },
1244   { 0, 0, 0, NULL }
1245 };
1246
1247 static int
1248 dissect_gsm_ss_LCS_MOLRRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1249   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1250                                    LCS_MOLRRes_sequence, hf_index, ett_gsm_ss_LCS_MOLRRes);
1251
1252   return offset;
1253 }
1254 static int dissect_lcs_MOLR_res(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1255   return dissect_gsm_ss_LCS_MOLRRes(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_lcs_MOLR_res);
1256 }
1257
1258
1259 static const value_string gsm_ss_DummySS_operationsRes_vals[] = {
1260   {   0, "registerCC-EntryRes" },
1261   {   1, "lcs-LocationNotification-res" },
1262   {   2, "lcs-MOLR-res" },
1263   { 0, NULL }
1264 };
1265
1266 static const ber_choice_t DummySS_operationsRes_choice[] = {
1267   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_registerCC_EntryRes },
1268   {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_LocationNotification_res },
1269   {   2, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_MOLR_res },
1270   { 0, 0, 0, 0, NULL }
1271 };
1272
1273 static int
1274 dissect_gsm_ss_DummySS_operationsRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1275   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1276                                  DummySS_operationsRes_choice, hf_index, ett_gsm_ss_DummySS_operationsRes,
1277                                  NULL);
1278
1279   return offset;
1280 }
1281
1282
1283 static const value_string gsm_ss_UUS_Service_vals[] = {
1284   {   1, "uUS1" },
1285   {   2, "uUS2" },
1286   {   3, "uUS3" },
1287   { 0, NULL }
1288 };
1289
1290
1291 static int
1292 dissect_gsm_ss_UUS_Service(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1293   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1294                                   NULL);
1295
1296   return offset;
1297 }
1298 static int dissect_uUS_Service_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1299   return dissect_gsm_ss_UUS_Service(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_uUS_Service);
1300 }
1301
1302
1303
1304 static int
1305 dissect_gsm_ss_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1306   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
1307
1308   return offset;
1309 }
1310 static int dissect_uUS_Required_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1311   return dissect_gsm_ss_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_gsm_ss_uUS_Required);
1312 }
1313
1314
1315 static const ber_sequence_t UserUserServiceArg_sequence[] = {
1316   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_uUS_Service_impl },
1317   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_uUS_Required_impl },
1318   { 0, 0, 0, NULL }
1319 };
1320
1321 static int
1322 dissect_gsm_ss_UserUserServiceArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1323   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1324                                    UserUserServiceArg_sequence, hf_index, ett_gsm_ss_UserUserServiceArg);
1325
1326   return offset;
1327 }
1328
1329
1330 /*--- End of included file: packet-gsm_ss-fn.c ---*/
1331 #line 172 "packet-gsm_ss-template.c"
1332
1333
1334 int
1335 gsm_ss_dissect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,guint32 opcode, gint comp_type_tag)
1336 {
1337         switch (comp_type_tag){
1338                 case 1: /* invoke */
1339                         switch (opcode){
1340                                 case 10: /* Register SS -- imports operations from MAP-SupplementaryServiceOperations*/
1341                                         offset=dissect_gsm_map_RegisterSS_Arg(FALSE, tvb, offset, pinfo, tree, -1);
1342                                         break;
1343                                 case 11: /* Erase SS -- imports operations from MAP-SupplementaryServiceOperations*/
1344                                         offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1);
1345                                         break;
1346                                 case 12: /* Activate SS -- imports operations from MAP-SupplementaryServiceOperations*/
1347                                         offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1);
1348                                         break;
1349                                 case 13: /*Deactivate SS -- imports operations from MAP-SupplementaryServiceOperations*/
1350                                         offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1);
1351                                         break;
1352                                 case 14: /*Interrogate SS -- imports operations from MAP-SupplementaryServiceOperations*/
1353                                         offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1);
1354                                         break;
1355                                 case 16: /*Notify SS */
1356                                         offset = dissect_notifySS(pinfo, tree, tvb, offset);
1357                                         break;
1358                                 case 17: /*Register Password -- imports operations from MAP-SupplementaryServiceOperations*/
1359                                         offset=dissect_gsm_map_SS_Code(FALSE, tvb, offset, pinfo, tree, -1);
1360                                         break;
1361                                 case 18: /*Get Password -- imports operations from MAP-SupplementaryServiceOperations*/
1362                                          offset=dissect_gsm_map_GetPasswordArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_getPassword);
1363                                         break;
1364                                 case 19: /*Process Unstructured SS Data */
1365                                         offset = dissect_processUnstructuredSS_Data(pinfo, tree, tvb, offset);
1366                                         break;
1367                                 case 38: /*Forward Check SS Indication -- imports operation from MAP-MobileServiceOperations*/
1368                                         break;
1369                                 case 59: /*Process Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/
1370                                          offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1);
1371                                         break;
1372                                 case 60: /*Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/
1373                                         offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1);
1374                                         break;
1375                                 case 61: /*Unstructured SS Notify -- imports operations from MAP-SupplementaryServiceOperations*/
1376                                         offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1);
1377                                         break;
1378                                 case 77: /*Erase CC Entry -- imports operations from MAP-SupplementaryServiceOperations*/
1379                                         offset=dissect_gsm_map_EraseCC_EntryArg(FALSE, tvb, offset, pinfo, tree, -1);
1380                                         break;
1381                                 case 112: /*lcs-AreaEventCancellation */
1382                                         offset = dissect_lcs_AreaEventCancellation(pinfo, tree, tvb, offset);
1383                                         break;
1384                                 case 113: /*lcs-AreaEventReport */
1385                                         offset = dissect_lcs_AreaEventReport(pinfo, tree, tvb, offset);
1386                                         break;
1387                                 case 114: /*LCS-AreaEventRequest */
1388                                         offset = dissect_lcs_AreaEventRequest(pinfo, tree, tvb, offset);
1389                                         break;
1390                                 case 115: /*LCS MOLR */
1391                                         offset = dissect_lcs_MOLR(pinfo, tree, tvb, offset);
1392                                         break;
1393                                 case 116: /*LCS Location Notification */
1394                                         offset = dissect_lcs_LocationNotification(pinfo, tree, tvb,offset);
1395                                         break;
1396                                 case 117: /*Call Deflection */
1397                                         offset = dissect_callDeflection(pinfo, tree, tvb,offset);
1398                                         break;
1399                                 case 118: /*User User Service */
1400                                         offset = dissect_gsm_ss_UserUserServiceArg(FALSE, tvb, offset, pinfo, tree, -1);
1401                                         break;
1402                                 case 119: /* Access Register CC Entry */
1403                                         offset = dissect_gsm_ss_AccessRegisterCCEntryArg(FALSE, tvb, offset, pinfo, tree, -1);
1404                                         break;
1405                                 case 120: /*Forward CUG Info */
1406                                         offset = dissect_forwardCUG_Info(pinfo, tree, tvb,offset);
1407                                         break;
1408                                 case 121: /*Split MPTY */
1409                                         break;
1410                                 case 122: /*Retrieve MPTY */
1411                                         break;
1412                                 case 123: /*Hold MPTY */
1413                                         break;
1414                                 case 124: /*Build MPTY */
1415                                         break;
1416                                 case 125: /*Forward Charge Advice */
1417                                         dissect_forwardChargeAdvice(pinfo, tree, tvb,offset);
1418                                         break;
1419                                 case 126: /*Explicit CT */
1420                                         break;
1421                                 default:
1422                                         break;
1423                                 }
1424                         break;
1425                 case 2: /* returnResultLast */
1426                         switch (opcode){
1427                                 case  10: /*registerSS*/
1428                                     offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1);
1429                                     break;
1430                                 case  11: /*eraseSS*/
1431                                         offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1);
1432                                         break;
1433                                 case 12: /*activateSS*/
1434                                         offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1);
1435                                         break;
1436                                 case 13: /*deactivateSS*/
1437                                         offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1);
1438                                         break;
1439                                 case 14: /*interrogateSS*/
1440                                         offset=dissect_gsm_map_InterrogateSS_Res(FALSE, tvb, offset, pinfo, tree, -1);
1441                                         break;
1442                                 case 16: /*Notify SS */
1443                                         break;
1444                                 case 17: /*Register Password -- imports operations from MAP-SupplementaryServiceOperations*/
1445                                     offset=dissect_gsm_map_NewPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_SS_Code);
1446                                         break;
1447                                 case 18: /*Get Password -- imports operations from MAP-SupplementaryServiceOperations*/
1448                                         offset=dissect_gsm_map_CurrentPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_currentPassword);
1449                                         break;
1450                                 case 19: /*Process Unstructured SS Data */
1451                                         offset=dissect_gsm_ss_SS_UserData(FALSE, tvb, offset, pinfo, tree, -1);
1452                                         break;
1453                                 case 38: /*Forward Check SS Indication -- imports operation from MAP-MobileServiceOperations*/
1454                                         break;
1455                                 case 59: /*Process Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/
1456                                          offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1);
1457                                         break;
1458                                 case 60: /*Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/
1459                                         offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1);
1460                                         break;
1461                                 case 61: /*Unstructured SS Notify -- imports operations from MAP-SupplementaryServiceOperations*/
1462                                         offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1);
1463                                         break;
1464                                 case 77: /*Erase CC Entry -- imports operations from MAP-SupplementaryServiceOperations*/
1465                                         offset=dissect_gsm_map_EraseCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1);
1466                                         break;
1467                                 case 112: /*lcs-AreaEventCancellation */
1468                                         break;
1469                                 case 113: /*lcs-AreaEventReport */
1470                                         break;
1471                                 case 114: /*LCS-AreaEventRequest */
1472                                         break;
1473                                 case 115: /*LCS MOLR */
1474                                         offset=dissect_gsm_ss_LCS_MOLRRes(FALSE, tvb, offset, pinfo, tree, -1);
1475                                         break;
1476                                 case 116: /*LCS Location Notification */
1477                                         offset=dissect_gsm_ss_LocationNotificationRes(FALSE, tvb, offset, pinfo, tree, -1);
1478                                         break;
1479                                 case 117: /*Call Deflection */
1480                                         break;
1481                                 case 118: /*User User Service */
1482                                         break;
1483                                 case 119: /* Access Register CC Entry */
1484                                     offset=dissect_gsm_map_RegisterCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1);
1485                                         break;
1486                                 case 120: /*Forward CUG Info */
1487                                         break;
1488                                 case 121: /*Split MPTY */
1489                                         break;
1490                                 case 122: /*Retrieve MPTY */
1491                                         break;
1492                                 case 123: /*Hold MPTY */
1493                                         break;
1494                                 case 124: /*Build MPTY */
1495                                         break;
1496                                 case 125: /*Forward Charge Advice */
1497                                         break;
1498                                 case 126: /*Explicit CT */
1499                                         break;
1500                                 default:
1501                                         break;
1502                         }
1503                         break;
1504                 case 3: /* returnError */
1505                         break;
1506                 case 4: /* reject */
1507                         break;
1508                 default:
1509                         break;
1510         }
1511         return offset;
1512 }
1513
1514 static void
1515 dissect_gsm_ss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1516 {
1517
1518 }
1519
1520 /*--- proto_reg_handoff_gsm_ss ---------------------------------------
1521 This proto is called directly from packet-gsm_a and needs to know component type */
1522 void proto_reg_handoff_gsm_ss(void) {
1523     dissector_handle_t  gsm_ss_handle;
1524
1525     gsm_ss_handle = create_dissector_handle(dissect_gsm_ss, proto_gsm_ss);
1526
1527
1528 }
1529
1530 /*--- proto_register_gsm_ss -------------------------------------------*/
1531 void proto_register_gsm_ss(void) {
1532
1533   /* List of fields */
1534   static hf_register_info hf[] = {
1535     { &hf_gsm_ss_getPassword,
1536       { "Password", "gsm_ss.password",
1537         FT_UINT8, BASE_DEC, VALS(gsm_map_GetPasswordArg_vals), 0,
1538         "Password", HFILL }},
1539     { &hf_gsm_ss_currentPassword,
1540       { "currentPassword", "gsm_ss.currentPassword",
1541         FT_STRING, BASE_NONE, NULL, 0,
1542         "", HFILL }},
1543     { &hf_gsm_ss_SS_Code,
1544       { "ss-Code", "gsm_ss.ss_Code",
1545         FT_UINT8, BASE_DEC, VALS(ssCode_vals), 0,
1546         "", HFILL }},
1547
1548
1549 /*--- Included file: packet-gsm_ss-hfarr.c ---*/
1550 #line 1 "packet-gsm_ss-hfarr.c"
1551     { &hf_gsm_ss_notifySS,
1552       { "notifySS", "gsm_ss.notifySS",
1553         FT_NONE, BASE_NONE, NULL, 0,
1554         "DummySS-operationsArg/notifySS", HFILL }},
1555     { &hf_gsm_ss_processUnstructuredSS_Data,
1556       { "processUnstructuredSS-Data", "gsm_ss.processUnstructuredSS_Data",
1557         FT_STRING, BASE_NONE, NULL, 0,
1558         "DummySS-operationsArg/processUnstructuredSS-Data", HFILL }},
1559     { &hf_gsm_ss_forwardCUG_Info,
1560       { "forwardCUG-Info", "gsm_ss.forwardCUG_Info",
1561         FT_NONE, BASE_NONE, NULL, 0,
1562         "DummySS-operationsArg/forwardCUG-Info", HFILL }},
1563     { &hf_gsm_ss_accessRegisterCCEntry,
1564       { "accessRegisterCCEntry", "gsm_ss.accessRegisterCCEntry",
1565         FT_NONE, BASE_NONE, NULL, 0,
1566         "DummySS-operationsArg/accessRegisterCCEntry", HFILL }},
1567     { &hf_gsm_ss_forwardChargeAdvice,
1568       { "forwardChargeAdvice", "gsm_ss.forwardChargeAdvice",
1569         FT_NONE, BASE_NONE, NULL, 0,
1570         "DummySS-operationsArg/forwardChargeAdvice", HFILL }},
1571     { &hf_gsm_ss_callDeflection,
1572       { "callDeflection", "gsm_ss.callDeflection",
1573         FT_NONE, BASE_NONE, NULL, 0,
1574         "DummySS-operationsArg/callDeflection", HFILL }},
1575     { &hf_gsm_ss_lcs_LocationNotification,
1576       { "lcs-LocationNotification", "gsm_ss.lcs_LocationNotification",
1577         FT_NONE, BASE_NONE, NULL, 0,
1578         "DummySS-operationsArg/lcs-LocationNotification", HFILL }},
1579     { &hf_gsm_ss_lcs_MOLR,
1580       { "lcs-MOLR", "gsm_ss.lcs_MOLR",
1581         FT_NONE, BASE_NONE, NULL, 0,
1582         "DummySS-operationsArg/lcs-MOLR", HFILL }},
1583     { &hf_gsm_ss_lcs_AreaEventRequest,
1584       { "lcs-AreaEventRequest", "gsm_ss.lcs_AreaEventRequest",
1585         FT_NONE, BASE_NONE, NULL, 0,
1586         "DummySS-operationsArg/lcs-AreaEventRequest", HFILL }},
1587     { &hf_gsm_ss_lcs_AreaEventReport,
1588       { "lcs-AreaEventReport", "gsm_ss.lcs_AreaEventReport",
1589         FT_NONE, BASE_NONE, NULL, 0,
1590         "DummySS-operationsArg/lcs-AreaEventReport", HFILL }},
1591     { &hf_gsm_ss_lcs_AreaEventCancellation,
1592       { "lcs-AreaEventCancellation", "gsm_ss.lcs_AreaEventCancellation",
1593         FT_NONE, BASE_NONE, NULL, 0,
1594         "DummySS-operationsArg/lcs-AreaEventCancellation", HFILL }},
1595     { &hf_gsm_ss_registerCC_EntryRes,
1596       { "registerCC-EntryRes", "gsm_ss.registerCC_EntryRes",
1597         FT_NONE, BASE_NONE, NULL, 0,
1598         "DummySS-operationsRes/registerCC-EntryRes", HFILL }},
1599     { &hf_gsm_ss_lcs_LocationNotification_res,
1600       { "lcs-LocationNotification-res", "gsm_ss.lcs_LocationNotification_res",
1601         FT_NONE, BASE_NONE, NULL, 0,
1602         "DummySS-operationsRes/lcs-LocationNotification-res", HFILL }},
1603     { &hf_gsm_ss_lcs_MOLR_res,
1604       { "lcs-MOLR-res", "gsm_ss.lcs_MOLR_res",
1605         FT_NONE, BASE_NONE, NULL, 0,
1606         "DummySS-operationsRes/lcs-MOLR-res", HFILL }},
1607     { &hf_gsm_ss_ss_Code,
1608       { "ss-Code", "gsm_ss.ss_Code",
1609         FT_UINT8, BASE_DEC, VALS(ssCode_vals), 0,
1610         "", HFILL }},
1611     { &hf_gsm_ss_ss_Status,
1612       { "ss-Status", "gsm_ss.ss_Status",
1613         FT_BYTES, BASE_HEX, NULL, 0,
1614         "NotifySS-Arg/ss-Status", HFILL }},
1615     { &hf_gsm_ss_ss_Notification,
1616       { "ss-Notification", "gsm_ss.ss_Notification",
1617         FT_BYTES, BASE_HEX, NULL, 0,
1618         "NotifySS-Arg/ss-Notification", HFILL }},
1619     { &hf_gsm_ss_callIsWaiting_Indicator,
1620       { "callIsWaiting-Indicator", "gsm_ss.callIsWaiting_Indicator",
1621         FT_NONE, BASE_NONE, NULL, 0,
1622         "NotifySS-Arg/callIsWaiting-Indicator", HFILL }},
1623     { &hf_gsm_ss_callOnHold_Indicator,
1624       { "callOnHold-Indicator", "gsm_ss.callOnHold_Indicator",
1625         FT_UINT32, BASE_DEC, VALS(gsm_ss_CallOnHold_Indicator_vals), 0,
1626         "NotifySS-Arg/callOnHold-Indicator", HFILL }},
1627     { &hf_gsm_ss_mpty_Indicator,
1628       { "mpty-Indicator", "gsm_ss.mpty_Indicator",
1629         FT_NONE, BASE_NONE, NULL, 0,
1630         "NotifySS-Arg/mpty-Indicator", HFILL }},
1631     { &hf_gsm_ss_cug_Index,
1632       { "cug-Index", "gsm_ss.cug_Index",
1633         FT_UINT32, BASE_DEC, NULL, 0,
1634         "", HFILL }},
1635     { &hf_gsm_ss_clirSuppressionRejected,
1636       { "clirSuppressionRejected", "gsm_ss.clirSuppressionRejected",
1637         FT_NONE, BASE_NONE, NULL, 0,
1638         "NotifySS-Arg/clirSuppressionRejected", HFILL }},
1639     { &hf_gsm_ss_ect_Indicator,
1640       { "ect-Indicator", "gsm_ss.ect_Indicator",
1641         FT_NONE, BASE_NONE, NULL, 0,
1642         "NotifySS-Arg/ect-Indicator", HFILL }},
1643     { &hf_gsm_ss_nameIndicator,
1644       { "nameIndicator", "gsm_ss.nameIndicator",
1645         FT_NONE, BASE_NONE, NULL, 0,
1646         "NotifySS-Arg/nameIndicator", HFILL }},
1647     { &hf_gsm_ss_ccbs_Feature,
1648       { "ccbs-Feature", "gsm_ss.ccbs_Feature",
1649         FT_NONE, BASE_NONE, NULL, 0,
1650         "NotifySS-Arg/ccbs-Feature", HFILL }},
1651     { &hf_gsm_ss_alertingPattern,
1652       { "alertingPattern", "gsm_ss.alertingPattern",
1653         FT_BYTES, BASE_HEX, NULL, 0,
1654         "NotifySS-Arg/alertingPattern", HFILL }},
1655     { &hf_gsm_ss_multicall_Indicator,
1656       { "multicall-Indicator", "gsm_ss.multicall_Indicator",
1657         FT_UINT32, BASE_DEC, VALS(gsm_ss_Multicall_Indicator_vals), 0,
1658         "NotifySS-Arg/multicall-Indicator", HFILL }},
1659     { &hf_gsm_ss_chargingInformation,
1660       { "chargingInformation", "gsm_ss.chargingInformation",
1661         FT_NONE, BASE_NONE, NULL, 0,
1662         "ForwardChargeAdviceArg/chargingInformation", HFILL }},
1663     { &hf_gsm_ss_e1,
1664       { "e1", "gsm_ss.e1",
1665         FT_UINT32, BASE_DEC, NULL, 0,
1666         "ChargingInformation/e1", HFILL }},
1667     { &hf_gsm_ss_e2,
1668       { "e2", "gsm_ss.e2",
1669         FT_UINT32, BASE_DEC, NULL, 0,
1670         "ChargingInformation/e2", HFILL }},
1671     { &hf_gsm_ss_e3,
1672       { "e3", "gsm_ss.e3",
1673         FT_UINT32, BASE_DEC, NULL, 0,
1674         "ChargingInformation/e3", HFILL }},
1675     { &hf_gsm_ss_e4,
1676       { "e4", "gsm_ss.e4",
1677         FT_UINT32, BASE_DEC, NULL, 0,
1678         "ChargingInformation/e4", HFILL }},
1679     { &hf_gsm_ss_e5,
1680       { "e5", "gsm_ss.e5",
1681         FT_UINT32, BASE_DEC, NULL, 0,
1682         "ChargingInformation/e5", HFILL }},
1683     { &hf_gsm_ss_e6,
1684       { "e6", "gsm_ss.e6",
1685         FT_UINT32, BASE_DEC, NULL, 0,
1686         "ChargingInformation/e6", HFILL }},
1687     { &hf_gsm_ss_e7,
1688       { "e7", "gsm_ss.e7",
1689         FT_UINT32, BASE_DEC, NULL, 0,
1690         "ChargingInformation/e7", HFILL }},
1691     { &hf_gsm_ss_suppressPrefCUG,
1692       { "suppressPrefCUG", "gsm_ss.suppressPrefCUG",
1693         FT_NONE, BASE_NONE, NULL, 0,
1694         "ForwardCUG-InfoArg/suppressPrefCUG", HFILL }},
1695     { &hf_gsm_ss_suppressOA,
1696       { "suppressOA", "gsm_ss.suppressOA",
1697         FT_NONE, BASE_NONE, NULL, 0,
1698         "ForwardCUG-InfoArg/suppressOA", HFILL }},
1699     { &hf_gsm_ss_ect_CallState,
1700       { "ect-CallState", "gsm_ss.ect_CallState",
1701         FT_UINT32, BASE_DEC, VALS(gsm_ss_ECT_CallState_vals), 0,
1702         "ECT-Indicator/ect-CallState", HFILL }},
1703     { &hf_gsm_ss_rdn,
1704       { "rdn", "gsm_ss.rdn",
1705         FT_UINT32, BASE_DEC, VALS(gsm_ss_RDN_vals), 0,
1706         "ECT-Indicator/rdn", HFILL }},
1707     { &hf_gsm_ss_callingName,
1708       { "callingName", "gsm_ss.callingName",
1709         FT_UINT32, BASE_DEC, VALS(gsm_ss_Name_vals), 0,
1710         "NameIndicator/callingName", HFILL }},
1711     { &hf_gsm_ss_namePresentationAllowed,
1712       { "namePresentationAllowed", "gsm_ss.namePresentationAllowed",
1713         FT_NONE, BASE_NONE, NULL, 0,
1714         "Name/namePresentationAllowed", HFILL }},
1715     { &hf_gsm_ss_presentationRestricted,
1716       { "presentationRestricted", "gsm_ss.presentationRestricted",
1717         FT_NONE, BASE_NONE, NULL, 0,
1718         "", HFILL }},
1719     { &hf_gsm_ss_nameUnavailable,
1720       { "nameUnavailable", "gsm_ss.nameUnavailable",
1721         FT_NONE, BASE_NONE, NULL, 0,
1722         "Name/nameUnavailable", HFILL }},
1723     { &hf_gsm_ss_namePresentationRestricted,
1724       { "namePresentationRestricted", "gsm_ss.namePresentationRestricted",
1725         FT_NONE, BASE_NONE, NULL, 0,
1726         "Name/namePresentationRestricted", HFILL }},
1727     { &hf_gsm_ss_dataCodingScheme,
1728       { "dataCodingScheme", "gsm_ss.dataCodingScheme",
1729         FT_BYTES, BASE_HEX, NULL, 0,
1730         "NameSet/dataCodingScheme", HFILL }},
1731     { &hf_gsm_ss_lengthInCharacters,
1732       { "lengthInCharacters", "gsm_ss.lengthInCharacters",
1733         FT_INT32, BASE_DEC, NULL, 0,
1734         "NameSet/lengthInCharacters", HFILL }},
1735     { &hf_gsm_ss_nameString,
1736       { "nameString", "gsm_ss.nameString",
1737         FT_BYTES, BASE_HEX, NULL, 0,
1738         "NameSet/nameString", HFILL }},
1739     { &hf_gsm_ss_presentationAllowedAddress,
1740       { "presentationAllowedAddress", "gsm_ss.presentationAllowedAddress",
1741         FT_NONE, BASE_NONE, NULL, 0,
1742         "RDN/presentationAllowedAddress", HFILL }},
1743     { &hf_gsm_ss_numberNotAvailableDueToInterworking,
1744       { "numberNotAvailableDueToInterworking", "gsm_ss.numberNotAvailableDueToInterworking",
1745         FT_NONE, BASE_NONE, NULL, 0,
1746         "RDN/numberNotAvailableDueToInterworking", HFILL }},
1747     { &hf_gsm_ss_presentationRestrictedAddress,
1748       { "presentationRestrictedAddress", "gsm_ss.presentationRestrictedAddress",
1749         FT_NONE, BASE_NONE, NULL, 0,
1750         "RDN/presentationRestrictedAddress", HFILL }},
1751     { &hf_gsm_ss_partyNumber,
1752       { "partyNumber", "gsm_ss.partyNumber",
1753         FT_BYTES, BASE_HEX, NULL, 0,
1754         "RemotePartyNumber/partyNumber", HFILL }},
1755     { &hf_gsm_ss_partyNumberSubaddress,
1756       { "partyNumberSubaddress", "gsm_ss.partyNumberSubaddress",
1757         FT_BYTES, BASE_HEX, NULL, 0,
1758         "RemotePartyNumber/partyNumberSubaddress", HFILL }},
1759     { &hf_gsm_ss_ccbs_Feature1,
1760       { "ccbs-Feature", "gsm_ss.ccbs_Feature",
1761         FT_NONE, BASE_NONE, NULL, 0,
1762         "RegisterCC-EntryRes/ccbs-Feature", HFILL }},
1763     { &hf_gsm_ss_ccbs_Index,
1764       { "ccbs-Index", "gsm_ss.ccbs_Index",
1765         FT_UINT32, BASE_DEC, NULL, 0,
1766         "RegisterCC-EntryRes/ccbs-Feature/ccbs-Index", HFILL }},
1767     { &hf_gsm_ss_b_subscriberNumber,
1768       { "b-subscriberNumber", "gsm_ss.b_subscriberNumber",
1769         FT_BYTES, BASE_HEX, NULL, 0,
1770         "RegisterCC-EntryRes/ccbs-Feature/b-subscriberNumber", HFILL }},
1771     { &hf_gsm_ss_b_subscriberSubaddress,
1772       { "b-subscriberSubaddress", "gsm_ss.b_subscriberSubaddress",
1773         FT_BYTES, BASE_HEX, NULL, 0,
1774         "RegisterCC-EntryRes/ccbs-Feature/b-subscriberSubaddress", HFILL }},
1775     { &hf_gsm_ss_basicServiceGroup,
1776       { "basicServiceGroup", "gsm_ss.basicServiceGroup",
1777         FT_UINT32, BASE_DEC, VALS(gsm_ss_T_basicServiceGroup_vals), 0,
1778         "RegisterCC-EntryRes/ccbs-Feature/basicServiceGroup", HFILL }},
1779     { &hf_gsm_ss_bearerService,
1780       { "bearerService", "gsm_ss.bearerService",
1781         FT_BYTES, BASE_HEX, NULL, 0,
1782         "RegisterCC-EntryRes/ccbs-Feature/basicServiceGroup/bearerService", HFILL }},
1783     { &hf_gsm_ss_teleservice,
1784       { "teleservice", "gsm_ss.teleservice",
1785         FT_BYTES, BASE_HEX, NULL, 0,
1786         "RegisterCC-EntryRes/ccbs-Feature/basicServiceGroup/teleservice", HFILL }},
1787     { &hf_gsm_ss_deflectedToNumber,
1788       { "deflectedToNumber", "gsm_ss.deflectedToNumber",
1789         FT_BYTES, BASE_HEX, NULL, 0,
1790         "CallDeflectionArg/deflectedToNumber", HFILL }},
1791     { &hf_gsm_ss_deflectedToSubaddress,
1792       { "deflectedToSubaddress", "gsm_ss.deflectedToSubaddress",
1793         FT_BYTES, BASE_HEX, NULL, 0,
1794         "CallDeflectionArg/deflectedToSubaddress", HFILL }},
1795     { &hf_gsm_ss_uUS_Service,
1796       { "uUS-Service", "gsm_ss.uUS_Service",
1797         FT_UINT32, BASE_DEC, VALS(gsm_ss_UUS_Service_vals), 0,
1798         "UserUserServiceArg/uUS-Service", HFILL }},
1799     { &hf_gsm_ss_uUS_Required,
1800       { "uUS-Required", "gsm_ss.uUS_Required",
1801         FT_BOOLEAN, 8, NULL, 0,
1802         "UserUserServiceArg/uUS-Required", HFILL }},
1803     { &hf_gsm_ss_notificationType,
1804       { "notificationType", "gsm_ss.notificationType",
1805         FT_UINT32, BASE_DEC, VALS(gsm_map_NotificationToMSUser_vals), 0,
1806         "LocationNotificationArg/notificationType", HFILL }},
1807     { &hf_gsm_ss_locationType,
1808       { "locationType", "gsm_ss.locationType",
1809         FT_NONE, BASE_NONE, NULL, 0,
1810         "", HFILL }},
1811     { &hf_gsm_ss_lcsClientExternalID,
1812       { "lcsClientExternalID", "gsm_ss.lcsClientExternalID",
1813         FT_NONE, BASE_NONE, NULL, 0,
1814         "", HFILL }},
1815     { &hf_gsm_ss_lcsClientName,
1816       { "lcsClientName", "gsm_ss.lcsClientName",
1817         FT_NONE, BASE_NONE, NULL, 0,
1818         "LocationNotificationArg/lcsClientName", HFILL }},
1819     { &hf_gsm_ss_lcsRequestorID,
1820       { "lcsRequestorID", "gsm_ss.lcsRequestorID",
1821         FT_NONE, BASE_NONE, NULL, 0,
1822         "LocationNotificationArg/lcsRequestorID", HFILL }},
1823     { &hf_gsm_ss_lcsCodeword,
1824       { "lcsCodeword", "gsm_ss.lcsCodeword",
1825         FT_NONE, BASE_NONE, NULL, 0,
1826         "LocationNotificationArg/lcsCodeword", HFILL }},
1827     { &hf_gsm_ss_lcsServiceTypeID,
1828       { "lcsServiceTypeID", "gsm_ss.lcsServiceTypeID",
1829         FT_UINT32, BASE_DEC, NULL, 0,
1830         "", HFILL }},
1831     { &hf_gsm_ss_verificationResponse,
1832       { "verificationResponse", "gsm_ss.verificationResponse",
1833         FT_UINT32, BASE_DEC, VALS(gsm_ss_VerificationResponse_vals), 0,
1834         "LocationNotificationRes/verificationResponse", HFILL }},
1835     { &hf_gsm_ss_molr_Type,
1836       { "molr-Type", "gsm_ss.molr_Type",
1837         FT_UINT32, BASE_DEC, VALS(gsm_ss_MOLR_Type_vals), 0,
1838         "LCS-MOLRArg/molr-Type", HFILL }},
1839     { &hf_gsm_ss_locationMethod,
1840       { "locationMethod", "gsm_ss.locationMethod",
1841         FT_UINT32, BASE_DEC, VALS(gsm_ss_LocationMethod_vals), 0,
1842         "LCS-MOLRArg/locationMethod", HFILL }},
1843     { &hf_gsm_ss_lcs_QoS,
1844       { "lcs-QoS", "gsm_ss.lcs_QoS",
1845         FT_NONE, BASE_NONE, NULL, 0,
1846         "LCS-MOLRArg/lcs-QoS", HFILL }},
1847     { &hf_gsm_ss_mlc_Number,
1848       { "mlc-Number", "gsm_ss.mlc_Number",
1849         FT_BYTES, BASE_HEX, NULL, 0,
1850         "LCS-MOLRArg/mlc-Number", HFILL }},
1851     { &hf_gsm_ss_gpsAssistanceData,
1852       { "gpsAssistanceData", "gsm_ss.gpsAssistanceData",
1853         FT_BYTES, BASE_HEX, NULL, 0,
1854         "LCS-MOLRArg/gpsAssistanceData", HFILL }},
1855     { &hf_gsm_ss_supportedGADShapes,
1856       { "supportedGADShapes", "gsm_ss.supportedGADShapes",
1857         FT_BYTES, BASE_HEX, NULL, 0,
1858         "LCS-MOLRArg/supportedGADShapes", HFILL }},
1859     { &hf_gsm_ss_ageOfLocationInfo,
1860       { "ageOfLocationInfo", "gsm_ss.ageOfLocationInfo",
1861         FT_UINT32, BASE_DEC, NULL, 0,
1862         "LCS-MOLRArg/ageOfLocationInfo", HFILL }},
1863     { &hf_gsm_ss_pseudonymIndicator,
1864       { "pseudonymIndicator", "gsm_ss.pseudonymIndicator",
1865         FT_NONE, BASE_NONE, NULL, 0,
1866         "LCS-MOLRArg/pseudonymIndicator", HFILL }},
1867     { &hf_gsm_ss_locationEstimate,
1868       { "locationEstimate", "gsm_ss.locationEstimate",
1869         FT_BYTES, BASE_HEX, NULL, 0,
1870         "LCS-MOLRRes/locationEstimate", HFILL }},
1871     { &hf_gsm_ss_decipheringKeys,
1872       { "decipheringKeys", "gsm_ss.decipheringKeys",
1873         FT_BYTES, BASE_HEX, NULL, 0,
1874         "LCS-MOLRRes/decipheringKeys", HFILL }},
1875     { &hf_gsm_ss_add_LocationEstimate,
1876       { "add-LocationEstimate", "gsm_ss.add_LocationEstimate",
1877         FT_BYTES, BASE_HEX, NULL, 0,
1878         "LCS-MOLRRes/add-LocationEstimate", HFILL }},
1879     { &hf_gsm_ss_referenceNumber,
1880       { "referenceNumber", "gsm_ss.referenceNumber",
1881         FT_BYTES, BASE_HEX, NULL, 0,
1882         "", HFILL }},
1883     { &hf_gsm_ss_h_gmlc_address,
1884       { "h-gmlc-address", "gsm_ss.h_gmlc_address",
1885         FT_BYTES, BASE_HEX, NULL, 0,
1886         "", HFILL }},
1887     { &hf_gsm_ss_deferredLocationEventType,
1888       { "deferredLocationEventType", "gsm_ss.deferredLocationEventType",
1889         FT_BYTES, BASE_HEX, NULL, 0,
1890         "LCS-AreaEventRequestArg/deferredLocationEventType", HFILL }},
1891     { &hf_gsm_ss_areaEventInfo,
1892       { "areaEventInfo", "gsm_ss.areaEventInfo",
1893         FT_NONE, BASE_NONE, NULL, 0,
1894         "LCS-AreaEventRequestArg/areaEventInfo", HFILL }},
1895
1896 /*--- End of included file: packet-gsm_ss-hfarr.c ---*/
1897 #line 389 "packet-gsm_ss-template.c"
1898   };
1899
1900   /* List of subtrees */
1901   static gint *ett[] = {
1902
1903 /*--- Included file: packet-gsm_ss-ettarr.c ---*/
1904 #line 1 "packet-gsm_ss-ettarr.c"
1905     &ett_gsm_ss_DummySS_operationsArg,
1906     &ett_gsm_ss_DummySS_operationsRes,
1907     &ett_gsm_ss_NotifySS_Arg,
1908     &ett_gsm_ss_ForwardChargeAdviceArg,
1909     &ett_gsm_ss_ChargingInformation,
1910     &ett_gsm_ss_ForwardCUG_InfoArg,
1911     &ett_gsm_ss_ECT_Indicator,
1912     &ett_gsm_ss_NameIndicator,
1913     &ett_gsm_ss_Name,
1914     &ett_gsm_ss_NameSet,
1915     &ett_gsm_ss_RDN,
1916     &ett_gsm_ss_RemotePartyNumber,
1917     &ett_gsm_ss_AccessRegisterCCEntryArg,
1918     &ett_gsm_ss_RegisterCC_EntryRes,
1919     &ett_gsm_ss_T_ccbs_Feature,
1920     &ett_gsm_ss_T_basicServiceGroup,
1921     &ett_gsm_ss_CallDeflectionArg,
1922     &ett_gsm_ss_UserUserServiceArg,
1923     &ett_gsm_ss_LocationNotificationArg,
1924     &ett_gsm_ss_LocationNotificationRes,
1925     &ett_gsm_ss_LCS_MOLRArg,
1926     &ett_gsm_ss_LCS_MOLRRes,
1927     &ett_gsm_ss_LCS_AreaEventRequestArg,
1928     &ett_gsm_ss_LCS_AreaEventReportArg,
1929     &ett_gsm_ss_LCS_AreaEventCancellationArg,
1930
1931 /*--- End of included file: packet-gsm_ss-ettarr.c ---*/
1932 #line 394 "packet-gsm_ss-template.c"
1933   };
1934
1935   /* Register protocol */
1936   proto_gsm_ss = proto_register_protocol(PNAME, PSNAME, PFNAME); 
1937 /*XXX  register_dissector("gsm_ss", dissect_gsm_ss, proto_gsm_ss);*/
1938   /* Register fields and subtrees */
1939   proto_register_field_array(proto_gsm_ss, hf, array_length(hf));
1940   proto_register_subtree_array(ett, array_length(ett));
1941
1942
1943 }
1944
1945