Grab-bag of dead initializers and two actual bugs.
[metze/wireshark/wip.git] / epan / dissectors / packet-atn-cm.c
1 /* Do not modify this file. Changes will be overwritten.                      */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3 /* packet-atn-cm.c                                                            */
4 /* ../../tools/asn2wrs.py -u -L -p atn-cm -c ./atn-cm.cnf -s ./packet-atn-cm-template -D . -O ../../epan/dissectors atn-cm.asn */
5
6 /* Input file: packet-atn-cm-template.c */
7
8 #line 1 "../../asn1/atn-cm/packet-atn-cm-template.c"
9 /* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t
10  * vi: set shiftwidth=2 tabstop=2 noexpandtab:
11  * :indentSize=2:tabSize=2:noTabs=false:
12  */
13
14
15 /* packet-atn-cm.c
16  * By Mathias Guettler <guettler@web.de>
17  * Copyright 2013
18  *
19  * Routines for ATN context management protocol packet disassembly.
20  * ATN context management allows an aircraft
21  * to log on to a ground facility.
22
23  * details see:
24  * http://en.wikipedia.org/wiki/CPDLC
25  * http://members.optusnet.com.au/~cjr/introduction.htm
26
27  * standards:
28  * http://legacy.icao.int/anb/panels/acp/repository.cfm
29
30  * note:
31  * We are dealing with ATN/CPDLC aka ICAO Doc 9705 Ed2 here
32  * (CPDLC may also be transmitted via ACARS/AOA aka "FANS-1/A ").
33
34
35  * Wireshark - Network traffic analyzer
36  * By Gerald Combs <gerald@wireshark.org>
37  * Copyright 1998 Gerald Combs
38  *
39  * This program is free software; you can redistribute it and/or
40  * modify it under the terms of the GNU General Public License
41  * as published by the Free Software Foundation; either version 2
42  * of the License, or (at your option) any later version.
43  *
44  * This program is distributed in the hope that it will be useful,
45  * but WITHOUT ANY WARRANTY; without even the implied warranty of
46  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
47  * GNU General Public License for more details.
48  *
49  * You should have received a copy of the GNU General Public License
50  * along with this program; if not, write to the Free Software
51  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
52  */
53
54 #include "config.h"
55
56 #include <glib.h>
57 #include <epan/packet.h>
58 #include <epan/exceptions.h>
59 #include <epan/conversation.h>
60 #include <epan/dissectors/packet-ber.h>
61 #include <epan/dissectors/packet-per.h>
62
63 #include "packet-atn-ulcs.h"
64
65 #define ATN_CM_PROTO "ICAO Doc9705 CM"
66
67 void proto_register_atn_cm(void);
68 void proto_reg_handoff_atn_cm(void);
69
70
71 /*--- Included file: packet-atn-cm-hf.c ---*/
72 #line 1 "../../asn1/atn-cm/packet-atn-cm-hf.c"
73 static int hf_atn_cm_CMAircraftMessage_PDU = -1;  /* CMAircraftMessage */
74 static int hf_atn_cm_CMGroundMessage_PDU = -1;    /* CMGroundMessage */
75 static int hf_atn_cm_cmLogonRequest = -1;         /* CMLogonRequest */
76 static int hf_atn_cm_cmContactResponse = -1;      /* CMContactResponse */
77 static int hf_atn_cm_cmAbortReason = -1;          /* CMAbortReason */
78 static int hf_atn_cm_cmLogonResponse = -1;        /* CMLogonResponse */
79 static int hf_atn_cm_cmUpdate = -1;               /* CMUpdate */
80 static int hf_atn_cm_cmContactRequest = -1;       /* CMContactRequest */
81 static int hf_atn_cm_cmForwardRequest = -1;       /* CMForwardRequest */
82 static int hf_atn_cm_cmForwardResponse = -1;      /* CMForwardResponse */
83 static int hf_atn_cm_longTsap = -1;               /* LongTsap */
84 static int hf_atn_cm_shortTsap = -1;              /* ShortTsap */
85 static int hf_atn_cm_aeQualifier = -1;            /* AEQualifier */
86 static int hf_atn_cm_apVersion = -1;              /* VersionNumber */
87 static int hf_atn_cm_apAddress = -1;              /* APAddress */
88 static int hf_atn_cm_facilityDesignation = -1;    /* FacilityDesignation */
89 static int hf_atn_cm_address = -1;                /* LongTsap */
90 static int hf_atn_cm_aircraftFlightIdentification = -1;  /* AircraftFlightIdentification */
91 static int hf_atn_cm_cMLongTSAP = -1;             /* LongTsap */
92 static int hf_atn_cm_groundInitiatedApplications = -1;  /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress */
93 static int hf_atn_cm_groundInitiatedApplications_item = -1;  /* AEQualifierVersionAddress */
94 static int hf_atn_cm_airOnlyInitiatedApplications = -1;  /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersion */
95 static int hf_atn_cm_airOnlyInitiatedApplications_item = -1;  /* AEQualifierVersion */
96 static int hf_atn_cm_airportDeparture = -1;       /* Airport */
97 static int hf_atn_cm_airportDestination = -1;     /* Airport */
98 static int hf_atn_cm_dateTimeDepartureETD = -1;   /* DateTime */
99 static int hf_atn_cm_airInitiatedApplications = -1;  /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress */
100 static int hf_atn_cm_airInitiatedApplications_item = -1;  /* AEQualifierVersionAddress */
101 static int hf_atn_cm_groundOnlyInitiatedApplications = -1;  /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersion */
102 static int hf_atn_cm_groundOnlyInitiatedApplications_item = -1;  /* AEQualifierVersion */
103 static int hf_atn_cm_year = -1;                   /* Year */
104 static int hf_atn_cm_month = -1;                  /* Month */
105 static int hf_atn_cm_day = -1;                    /* Day */
106 static int hf_atn_cm_date = -1;                   /* Date */
107 static int hf_atn_cm_time = -1;                   /* Time */
108 static int hf_atn_cm_rDP = -1;                    /* OCTET_STRING_SIZE_5 */
109 static int hf_atn_cm_aRS = -1;                    /* OCTET_STRING_SIZE_3 */
110 static int hf_atn_cm_locSysNselTsel = -1;         /* OCTET_STRING_SIZE_10_11 */
111 static int hf_atn_cm_hours = -1;                  /* Timehours */
112 static int hf_atn_cm_minutes = -1;                /* Timeminutes */
113
114 /*--- End of included file: packet-atn-cm-hf.c ---*/
115 #line 63 "../../asn1/atn-cm/packet-atn-cm-template.c"
116
117
118 /*--- Included file: packet-atn-cm-ett.c ---*/
119 #line 1 "../../asn1/atn-cm/packet-atn-cm-ett.c"
120 static gint ett_atn_cm_CMAircraftMessage = -1;
121 static gint ett_atn_cm_CMGroundMessage = -1;
122 static gint ett_atn_cm_APAddress = -1;
123 static gint ett_atn_cm_AEQualifierVersion = -1;
124 static gint ett_atn_cm_AEQualifierVersionAddress = -1;
125 static gint ett_atn_cm_CMContactRequest = -1;
126 static gint ett_atn_cm_CMLogonRequest = -1;
127 static gint ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress = -1;
128 static gint ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion = -1;
129 static gint ett_atn_cm_CMLogonResponse = -1;
130 static gint ett_atn_cm_Date = -1;
131 static gint ett_atn_cm_DateTime = -1;
132 static gint ett_atn_cm_LongTsap = -1;
133 static gint ett_atn_cm_ShortTsap = -1;
134 static gint ett_atn_cm_Time = -1;
135
136 /*--- End of included file: packet-atn-cm-ett.c ---*/
137 #line 65 "../../asn1/atn-cm/packet-atn-cm-template.c"
138 static gint ett_atn_cm = -1;
139
140
141 /*--- Included file: packet-atn-cm-fn.c ---*/
142 #line 1 "../../asn1/atn-cm/packet-atn-cm-fn.c"
143
144
145 static int
146 dissect_atn_cm_AircraftFlightIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
147   offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
148                                           2, 8, FALSE);
149
150   return offset;
151 }
152
153
154
155 static int
156 dissect_atn_cm_OCTET_STRING_SIZE_5(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
157   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
158                                        5, 5, FALSE, NULL);
159
160   return offset;
161 }
162
163
164
165 static int
166 dissect_atn_cm_OCTET_STRING_SIZE_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
167   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
168                                        3, 3, FALSE, NULL);
169
170   return offset;
171 }
172
173
174
175 static int
176 dissect_atn_cm_OCTET_STRING_SIZE_10_11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
177   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
178                                        10, 11, FALSE, NULL);
179
180   return offset;
181 }
182
183
184 static const per_sequence_t ShortTsap_sequence[] = {
185   { &hf_atn_cm_aRS          , ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_OCTET_STRING_SIZE_3 },
186   { &hf_atn_cm_locSysNselTsel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_OCTET_STRING_SIZE_10_11 },
187   { NULL, 0, 0, NULL }
188 };
189
190 static int
191 dissect_atn_cm_ShortTsap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
192   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
193                                    ett_atn_cm_ShortTsap, ShortTsap_sequence);
194
195   return offset;
196 }
197
198
199 static const per_sequence_t LongTsap_sequence[] = {
200   { &hf_atn_cm_rDP          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_OCTET_STRING_SIZE_5 },
201   { &hf_atn_cm_shortTsap    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_ShortTsap },
202   { NULL, 0, 0, NULL }
203 };
204
205 static int
206 dissect_atn_cm_LongTsap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
207   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
208                                    ett_atn_cm_LongTsap, LongTsap_sequence);
209
210   return offset;
211 }
212
213
214
215 static int
216 dissect_atn_cm_AEQualifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
217   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
218                                                             0U, 255U, NULL, FALSE);
219
220   return offset;
221 }
222
223
224
225 static int
226 dissect_atn_cm_VersionNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
227   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
228                                                             1U, 255U, NULL, FALSE);
229
230   return offset;
231 }
232
233
234 static const value_string atn_cm_APAddress_vals[] = {
235   {   0, "longTsap" },
236   {   1, "shortTsap" },
237   { 0, NULL }
238 };
239
240 static const per_choice_t APAddress_choice[] = {
241   {   0, &hf_atn_cm_longTsap     , ASN1_NO_EXTENSIONS     , dissect_atn_cm_LongTsap },
242   {   1, &hf_atn_cm_shortTsap    , ASN1_NO_EXTENSIONS     , dissect_atn_cm_ShortTsap },
243   { 0, NULL, 0, NULL }
244 };
245
246 static int
247 dissect_atn_cm_APAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
248   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
249                                  ett_atn_cm_APAddress, APAddress_choice,
250                                  NULL);
251
252   return offset;
253 }
254
255
256 static const per_sequence_t AEQualifierVersionAddress_sequence[] = {
257   { &hf_atn_cm_aeQualifier  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifier },
258   { &hf_atn_cm_apVersion    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_VersionNumber },
259   { &hf_atn_cm_apAddress    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_APAddress },
260   { NULL, 0, 0, NULL }
261 };
262
263 static int
264 dissect_atn_cm_AEQualifierVersionAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
265   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
266                                    ett_atn_cm_AEQualifierVersionAddress, AEQualifierVersionAddress_sequence);
267
268   return offset;
269 }
270
271
272 static const per_sequence_t SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress_sequence_of[1] = {
273   { &hf_atn_cm_groundInitiatedApplications_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifierVersionAddress },
274 };
275
276 static int
277 dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
278   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
279                                                   ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress, SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress_sequence_of,
280                                                   1, 256, FALSE);
281
282   return offset;
283 }
284
285
286 static const per_sequence_t AEQualifierVersion_sequence[] = {
287   { &hf_atn_cm_aeQualifier  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifier },
288   { &hf_atn_cm_apVersion    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_VersionNumber },
289   { NULL, 0, 0, NULL }
290 };
291
292 static int
293 dissect_atn_cm_AEQualifierVersion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
294   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
295                                    ett_atn_cm_AEQualifierVersion, AEQualifierVersion_sequence);
296
297   return offset;
298 }
299
300
301 static const per_sequence_t SEQUENCE_SIZE_1_256_OF_AEQualifierVersion_sequence_of[1] = {
302   { &hf_atn_cm_airOnlyInitiatedApplications_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifierVersion },
303 };
304
305 static int
306 dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
307   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
308                                                   ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion, SEQUENCE_SIZE_1_256_OF_AEQualifierVersion_sequence_of,
309                                                   1, 256, FALSE);
310
311   return offset;
312 }
313
314
315
316 static int
317 dissect_atn_cm_FacilityDesignation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
318   offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
319                                           4, 8, FALSE);
320
321   return offset;
322 }
323
324
325
326 static int
327 dissect_atn_cm_Airport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
328   offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
329                                           4, 4, FALSE);
330
331   return offset;
332 }
333
334
335
336 static int
337 dissect_atn_cm_Year(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
338   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
339                                                             1996U, 2095U, NULL, FALSE);
340
341   return offset;
342 }
343
344
345
346 static int
347 dissect_atn_cm_Month(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
348   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
349                                                             1U, 12U, NULL, FALSE);
350
351   return offset;
352 }
353
354
355
356 static int
357 dissect_atn_cm_Day(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
358   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
359                                                             1U, 31U, NULL, FALSE);
360
361   return offset;
362 }
363
364
365 static const per_sequence_t Date_sequence[] = {
366   { &hf_atn_cm_year         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Year },
367   { &hf_atn_cm_month        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Month },
368   { &hf_atn_cm_day          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Day },
369   { NULL, 0, 0, NULL }
370 };
371
372 static int
373 dissect_atn_cm_Date(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
374   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
375                                    ett_atn_cm_Date, Date_sequence);
376
377   return offset;
378 }
379
380
381
382 static int
383 dissect_atn_cm_Timehours(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
384   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
385                                                             0U, 23U, NULL, FALSE);
386
387   return offset;
388 }
389
390
391
392 static int
393 dissect_atn_cm_Timeminutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
394   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
395                                                             0U, 59U, NULL, FALSE);
396
397   return offset;
398 }
399
400
401 static const per_sequence_t Time_sequence[] = {
402   { &hf_atn_cm_hours        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Timehours },
403   { &hf_atn_cm_minutes      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Timeminutes },
404   { NULL, 0, 0, NULL }
405 };
406
407 static int
408 dissect_atn_cm_Time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
409   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
410                                    ett_atn_cm_Time, Time_sequence);
411
412   return offset;
413 }
414
415
416 static const per_sequence_t DateTime_sequence[] = {
417   { &hf_atn_cm_date         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Date },
418   { &hf_atn_cm_time         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_Time },
419   { NULL, 0, 0, NULL }
420 };
421
422 static int
423 dissect_atn_cm_DateTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
424   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
425                                    ett_atn_cm_DateTime, DateTime_sequence);
426
427   return offset;
428 }
429
430
431 static const per_sequence_t CMLogonRequest_sequence[] = {
432   { &hf_atn_cm_aircraftFlightIdentification, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_AircraftFlightIdentification },
433   { &hf_atn_cm_cMLongTSAP   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_LongTsap },
434   { &hf_atn_cm_groundInitiatedApplications, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress },
435   { &hf_atn_cm_airOnlyInitiatedApplications, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion },
436   { &hf_atn_cm_facilityDesignation, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_FacilityDesignation },
437   { &hf_atn_cm_airportDeparture, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_Airport },
438   { &hf_atn_cm_airportDestination, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_Airport },
439   { &hf_atn_cm_dateTimeDepartureETD, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_DateTime },
440   { NULL, 0, 0, NULL }
441 };
442
443 static int
444 dissect_atn_cm_CMLogonRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
445   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
446                                    ett_atn_cm_CMLogonRequest, CMLogonRequest_sequence);
447
448   return offset;
449 }
450
451
452 static const value_string atn_cm_Response_vals[] = {
453   {   0, "contactSuccess" },
454   {   1, "contactNotSuccessful" },
455   { 0, NULL }
456 };
457
458
459 static int
460 dissect_atn_cm_Response(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
461   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
462                                      2, NULL, FALSE, 0, NULL);
463
464   return offset;
465 }
466
467
468
469 static int
470 dissect_atn_cm_CMContactResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
471   offset = dissect_atn_cm_Response(tvb, offset, actx, tree, hf_index);
472
473   return offset;
474 }
475
476
477 static const value_string atn_cm_CMAbortReason_vals[] = {
478   {   0, "timer-expired" },
479   {   1, "undefined-error" },
480   {   2, "invalid-PDU" },
481   {   3, "protocol-error" },
482   {   4, "dialogue-acceptance-not-permitted" },
483   {   5, "dialogue-end-not-accepted" },
484   {   6, "communication-service-error" },
485   {   7, "communication-service-failure" },
486   {   8, "invalid-QOS-parameter" },
487   {   9, "expected-PDU-missing" },
488   { 0, NULL }
489 };
490
491
492 static int
493 dissect_atn_cm_CMAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
494   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
495                                      10, NULL, TRUE, 0, NULL);
496
497   return offset;
498 }
499
500
501 static const value_string atn_cm_CMAircraftMessage_vals[] = {
502   {   0, "cmLogonRequest" },
503   {   1, "cmContactResponse" },
504   {   2, "cmAbortReason" },
505   { 0, NULL }
506 };
507
508 static const per_choice_t CMAircraftMessage_choice[] = {
509   {   0, &hf_atn_cm_cmLogonRequest, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMLogonRequest },
510   {   1, &hf_atn_cm_cmContactResponse, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMContactResponse },
511   {   2, &hf_atn_cm_cmAbortReason, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMAbortReason },
512   { 0, NULL, 0, NULL }
513 };
514
515 static int
516 dissect_atn_cm_CMAircraftMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
517   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
518                                  ett_atn_cm_CMAircraftMessage, CMAircraftMessage_choice,
519                                  NULL);
520
521   return offset;
522 }
523
524
525 static const per_sequence_t CMLogonResponse_sequence[] = {
526   { &hf_atn_cm_airInitiatedApplications, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress },
527   { &hf_atn_cm_groundOnlyInitiatedApplications, ASN1_NO_EXTENSIONS     , ASN1_OPTIONAL    , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion },
528   { NULL, 0, 0, NULL }
529 };
530
531 static int
532 dissect_atn_cm_CMLogonResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
533   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
534                                    ett_atn_cm_CMLogonResponse, CMLogonResponse_sequence);
535
536   return offset;
537 }
538
539
540
541 static int
542 dissect_atn_cm_CMUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
543   offset = dissect_atn_cm_CMLogonResponse(tvb, offset, actx, tree, hf_index);
544
545   return offset;
546 }
547
548
549 static const per_sequence_t CMContactRequest_sequence[] = {
550   { &hf_atn_cm_facilityDesignation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_FacilityDesignation },
551   { &hf_atn_cm_address      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_atn_cm_LongTsap },
552   { NULL, 0, 0, NULL }
553 };
554
555 static int
556 dissect_atn_cm_CMContactRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
557   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
558                                    ett_atn_cm_CMContactRequest, CMContactRequest_sequence);
559
560   return offset;
561 }
562
563
564
565 static int
566 dissect_atn_cm_CMForwardRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
567   offset = dissect_atn_cm_CMLogonRequest(tvb, offset, actx, tree, hf_index);
568
569   return offset;
570 }
571
572
573 static const value_string atn_cm_CMForwardResponse_vals[] = {
574   {   0, "success" },
575   {   1, "incompatible-version" },
576   {   2, "service-not-supported" },
577   { 0, NULL }
578 };
579
580
581 static int
582 dissect_atn_cm_CMForwardResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
583   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
584                                      3, NULL, FALSE, 0, NULL);
585
586   return offset;
587 }
588
589
590 static const value_string atn_cm_CMGroundMessage_vals[] = {
591   {   0, "cmLogonResponse" },
592   {   1, "cmUpdate" },
593   {   2, "cmContactRequest" },
594   {   3, "cmForwardRequest" },
595   {   4, "cmAbortReason" },
596   {   5, "cmForwardResponse" },
597   { 0, NULL }
598 };
599
600 static const per_choice_t CMGroundMessage_choice[] = {
601   {   0, &hf_atn_cm_cmLogonResponse, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMLogonResponse },
602   {   1, &hf_atn_cm_cmUpdate     , ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMUpdate },
603   {   2, &hf_atn_cm_cmContactRequest, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMContactRequest },
604   {   3, &hf_atn_cm_cmForwardRequest, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMForwardRequest },
605   {   4, &hf_atn_cm_cmAbortReason, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMAbortReason },
606   {   5, &hf_atn_cm_cmForwardResponse, ASN1_EXTENSION_ROOT    , dissect_atn_cm_CMForwardResponse },
607   { 0, NULL, 0, NULL }
608 };
609
610 static int
611 dissect_atn_cm_CMGroundMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
612   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
613                                  ett_atn_cm_CMGroundMessage, CMGroundMessage_choice,
614                                  NULL);
615
616   return offset;
617 }
618
619 /*--- PDUs ---*/
620
621 static void dissect_CMAircraftMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
622   asn1_ctx_t asn1_ctx;
623   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
624   dissect_atn_cm_CMAircraftMessage(tvb, 0, &asn1_ctx, tree, hf_atn_cm_CMAircraftMessage_PDU);
625 }
626 static void dissect_CMGroundMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
627   asn1_ctx_t asn1_ctx;
628   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
629   dissect_atn_cm_CMGroundMessage(tvb, 0, &asn1_ctx, tree, hf_atn_cm_CMGroundMessage_PDU);
630 }
631
632
633 /*--- End of included file: packet-atn-cm-fn.c ---*/
634 #line 68 "../../asn1/atn-cm/packet-atn-cm-template.c"
635 static int proto_atn_cm = -1;
636
637 static int
638 dissect_atn_cm(
639                 tvbuff_t *tvb,
640                 packet_info *pinfo,
641                 proto_tree *tree,
642                 void *data _U_)
643 {
644                 int     type;
645                 proto_item *ti;
646                 proto_tree *sub_tree;
647
648                 ti = proto_tree_add_text(
649                         tree,
650                         tvb,
651                         0,
652                         tvb_reported_length_remaining(tvb, 0) ,
653                         ATN_CM_PROTO);
654
655                 sub_tree = proto_item_add_subtree(
656                         ti,
657                         ett_atn_cm);
658
659                 /* ti = proto_tree_add_item(tree, proto_atn_cm, tvb, 0, 0 , ENC_NA); */
660                 /* sub_tree = proto_item_add_subtree(ti, ett_atn_cm_pdu); */
661
662                 /* determine whether it is uplink or downlink */
663                 type = check_heur_msg_type(pinfo);
664
665                 switch(type){
666                                 case um:
667                                                 dissect_CMGroundMessage_PDU(
668                                                         tvb,
669                                                         pinfo,
670                                                         sub_tree);
671                                                 break;
672                                 case dm:
673                                                 dissect_CMAircraftMessage_PDU(
674                                                         tvb,
675                                                         pinfo,
676                                                         sub_tree);
677                                                 break;
678                                 default:
679                                                 break;
680                 }
681                 return tvb_reported_length_remaining(tvb, 0);
682 }
683
684 static gboolean
685 dissect_atn_cm_heur(
686                 tvbuff_t *tvb,
687                 packet_info *pinfo,
688                 proto_tree *tree,
689                 void *data _U_)
690 {
691                 atn_conversation_t *atn_cv = NULL;
692                 volatile gboolean is_atn_cm = FALSE;
693                 int type;
694
695                 /* determine whether it is uplink or downlink */
696                 type = check_heur_msg_type(pinfo);
697
698                 /* heuristically decode message */
699                 switch(type){
700                                 case um:
701                                                 TRY {
702                                                                 dissect_CMGroundMessage_PDU(
703                                                                         tvb,
704                                                                         pinfo,
705                                                                         NULL);
706                                                                 /* no exception thrown: looks like it is a CM PDU */
707                                                                 is_atn_cm = TRUE; }
708                                                 CATCH_ALL {
709                                                                 is_atn_cm = FALSE; }
710                                                 ENDTRY;
711                                                 break;
712                                 case dm:
713                                                 TRY {
714                                                                 dissect_CMAircraftMessage_PDU(
715                                                                                 tvb,
716                                                                                 pinfo,
717                                                                                 NULL);
718                                                                 /* no exception thrown: looks like it is a CM PDU */
719                                                                 is_atn_cm = TRUE;}
720                                                 CATCH_ALL {
721                                                                 is_atn_cm = FALSE; }
722                                                 ENDTRY;
723                                                 break;
724                                 default:
725                                                 break;
726                 }
727
728                 if (is_atn_cm  == TRUE) {
729                                 /* note: */
730                                 /* all subsequent PDU's belonging to this conversation are considered CM */
731                                 /* if the first CM PDU has been decoded succesfully */
732                                 /* (This is done in "atn-ulcs" by using "call_dissector_with_data()") */
733
734                                 /* DT: dstref present, srcref is always zero */
735                                 if((pinfo->clnp_dstref) &&
736                                                 (!pinfo->clnp_srcref)){
737
738                                         atn_cv = find_atn_conversation(
739                                                                 &pinfo->dst,
740                                                                 pinfo->clnp_dstref,
741                                                                 &pinfo->src );
742                                 }
743                                 /* CR: srcref present, dstref is always zero */
744                                 if((!pinfo->clnp_dstref) &&
745                                                 (pinfo->clnp_srcref)){
746
747                                         atn_cv = find_atn_conversation(
748                                                                 &pinfo->src,
749                                                                 pinfo->clnp_srcref,
750                                                                 &pinfo->dst );
751
752                                 }
753                                 /* CC: srcref and dstref present  */
754                                 if((pinfo->clnp_dstref) &&
755                                                 (pinfo->clnp_srcref)){
756                                                 atn_cv = find_atn_conversation(
757                                                                 &pinfo->src,
758                                                                 pinfo->clnp_srcref,
759                                                                 &pinfo->dst );
760                                 }
761                                 if(atn_cv){
762                                                 atn_cv->ae_qualifier = cma;
763                                 }
764                                 dissect_atn_cm(
765                                                 tvb,
766                                                 pinfo,
767                                                 tree,
768                                                 NULL);
769                 }
770
771                 return is_atn_cm;
772 }
773
774
775 void proto_register_atn_cm (void)
776 {
777     static hf_register_info hf_atn_cm[] = {
778
779 /*--- Included file: packet-atn-cm-hfarr.c ---*/
780 #line 1 "../../asn1/atn-cm/packet-atn-cm-hfarr.c"
781     { &hf_atn_cm_CMAircraftMessage_PDU,
782       { "CMAircraftMessage", "atn-cm.CMAircraftMessage",
783         FT_UINT32, BASE_DEC, VALS(atn_cm_CMAircraftMessage_vals), 0,
784         NULL, HFILL }},
785     { &hf_atn_cm_CMGroundMessage_PDU,
786       { "CMGroundMessage", "atn-cm.CMGroundMessage",
787         FT_UINT32, BASE_DEC, VALS(atn_cm_CMGroundMessage_vals), 0,
788         NULL, HFILL }},
789     { &hf_atn_cm_cmLogonRequest,
790       { "cmLogonRequest", "atn-cm.cmLogonRequest_element",
791         FT_NONE, BASE_NONE, NULL, 0,
792         NULL, HFILL }},
793     { &hf_atn_cm_cmContactResponse,
794       { "cmContactResponse", "atn-cm.cmContactResponse",
795         FT_UINT32, BASE_DEC, VALS(atn_cm_Response_vals), 0,
796         NULL, HFILL }},
797     { &hf_atn_cm_cmAbortReason,
798       { "cmAbortReason", "atn-cm.cmAbortReason",
799         FT_UINT32, BASE_DEC, VALS(atn_cm_CMAbortReason_vals), 0,
800         NULL, HFILL }},
801     { &hf_atn_cm_cmLogonResponse,
802       { "cmLogonResponse", "atn-cm.cmLogonResponse_element",
803         FT_NONE, BASE_NONE, NULL, 0,
804         NULL, HFILL }},
805     { &hf_atn_cm_cmUpdate,
806       { "cmUpdate", "atn-cm.cmUpdate_element",
807         FT_NONE, BASE_NONE, NULL, 0,
808         NULL, HFILL }},
809     { &hf_atn_cm_cmContactRequest,
810       { "cmContactRequest", "atn-cm.cmContactRequest_element",
811         FT_NONE, BASE_NONE, NULL, 0,
812         NULL, HFILL }},
813     { &hf_atn_cm_cmForwardRequest,
814       { "cmForwardRequest", "atn-cm.cmForwardRequest_element",
815         FT_NONE, BASE_NONE, NULL, 0,
816         NULL, HFILL }},
817     { &hf_atn_cm_cmForwardResponse,
818       { "cmForwardResponse", "atn-cm.cmForwardResponse",
819         FT_UINT32, BASE_DEC, VALS(atn_cm_CMForwardResponse_vals), 0,
820         NULL, HFILL }},
821     { &hf_atn_cm_longTsap,
822       { "longTsap", "atn-cm.longTsap_element",
823         FT_NONE, BASE_NONE, NULL, 0,
824         NULL, HFILL }},
825     { &hf_atn_cm_shortTsap,
826       { "shortTsap", "atn-cm.shortTsap_element",
827         FT_NONE, BASE_NONE, NULL, 0,
828         NULL, HFILL }},
829     { &hf_atn_cm_aeQualifier,
830       { "aeQualifier", "atn-cm.aeQualifier",
831         FT_UINT32, BASE_DEC, NULL, 0,
832         NULL, HFILL }},
833     { &hf_atn_cm_apVersion,
834       { "apVersion", "atn-cm.apVersion",
835         FT_UINT32, BASE_DEC, NULL, 0,
836         "VersionNumber", HFILL }},
837     { &hf_atn_cm_apAddress,
838       { "apAddress", "atn-cm.apAddress",
839         FT_UINT32, BASE_DEC, VALS(atn_cm_APAddress_vals), 0,
840         NULL, HFILL }},
841     { &hf_atn_cm_facilityDesignation,
842       { "facilityDesignation", "atn-cm.facilityDesignation",
843         FT_STRING, BASE_NONE, NULL, 0,
844         NULL, HFILL }},
845     { &hf_atn_cm_address,
846       { "address", "atn-cm.address_element",
847         FT_NONE, BASE_NONE, NULL, 0,
848         "LongTsap", HFILL }},
849     { &hf_atn_cm_aircraftFlightIdentification,
850       { "aircraftFlightIdentification", "atn-cm.aircraftFlightIdentification",
851         FT_STRING, BASE_NONE, NULL, 0,
852         NULL, HFILL }},
853     { &hf_atn_cm_cMLongTSAP,
854       { "cMLongTSAP", "atn-cm.cMLongTSAP_element",
855         FT_NONE, BASE_NONE, NULL, 0,
856         "LongTsap", HFILL }},
857     { &hf_atn_cm_groundInitiatedApplications,
858       { "groundInitiatedApplications", "atn-cm.groundInitiatedApplications",
859         FT_UINT32, BASE_DEC, NULL, 0,
860         "SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress", HFILL }},
861     { &hf_atn_cm_groundInitiatedApplications_item,
862       { "AEQualifierVersionAddress", "atn-cm.AEQualifierVersionAddress_element",
863         FT_NONE, BASE_NONE, NULL, 0,
864         NULL, HFILL }},
865     { &hf_atn_cm_airOnlyInitiatedApplications,
866       { "airOnlyInitiatedApplications", "atn-cm.airOnlyInitiatedApplications",
867         FT_UINT32, BASE_DEC, NULL, 0,
868         "SEQUENCE_SIZE_1_256_OF_AEQualifierVersion", HFILL }},
869     { &hf_atn_cm_airOnlyInitiatedApplications_item,
870       { "AEQualifierVersion", "atn-cm.AEQualifierVersion_element",
871         FT_NONE, BASE_NONE, NULL, 0,
872         NULL, HFILL }},
873     { &hf_atn_cm_airportDeparture,
874       { "airportDeparture", "atn-cm.airportDeparture",
875         FT_STRING, BASE_NONE, NULL, 0,
876         "Airport", HFILL }},
877     { &hf_atn_cm_airportDestination,
878       { "airportDestination", "atn-cm.airportDestination",
879         FT_STRING, BASE_NONE, NULL, 0,
880         "Airport", HFILL }},
881     { &hf_atn_cm_dateTimeDepartureETD,
882       { "dateTimeDepartureETD", "atn-cm.dateTimeDepartureETD_element",
883         FT_NONE, BASE_NONE, NULL, 0,
884         "DateTime", HFILL }},
885     { &hf_atn_cm_airInitiatedApplications,
886       { "airInitiatedApplications", "atn-cm.airInitiatedApplications",
887         FT_UINT32, BASE_DEC, NULL, 0,
888         "SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress", HFILL }},
889     { &hf_atn_cm_airInitiatedApplications_item,
890       { "AEQualifierVersionAddress", "atn-cm.AEQualifierVersionAddress_element",
891         FT_NONE, BASE_NONE, NULL, 0,
892         NULL, HFILL }},
893     { &hf_atn_cm_groundOnlyInitiatedApplications,
894       { "groundOnlyInitiatedApplications", "atn-cm.groundOnlyInitiatedApplications",
895         FT_UINT32, BASE_DEC, NULL, 0,
896         "SEQUENCE_SIZE_1_256_OF_AEQualifierVersion", HFILL }},
897     { &hf_atn_cm_groundOnlyInitiatedApplications_item,
898       { "AEQualifierVersion", "atn-cm.AEQualifierVersion_element",
899         FT_NONE, BASE_NONE, NULL, 0,
900         NULL, HFILL }},
901     { &hf_atn_cm_year,
902       { "year", "atn-cm.year",
903         FT_UINT32, BASE_DEC, NULL, 0,
904         NULL, HFILL }},
905     { &hf_atn_cm_month,
906       { "month", "atn-cm.month",
907         FT_UINT32, BASE_DEC, NULL, 0,
908         NULL, HFILL }},
909     { &hf_atn_cm_day,
910       { "day", "atn-cm.day",
911         FT_UINT32, BASE_DEC, NULL, 0,
912         NULL, HFILL }},
913     { &hf_atn_cm_date,
914       { "date", "atn-cm.date_element",
915         FT_NONE, BASE_NONE, NULL, 0,
916         NULL, HFILL }},
917     { &hf_atn_cm_time,
918       { "time", "atn-cm.time_element",
919         FT_NONE, BASE_NONE, NULL, 0,
920         NULL, HFILL }},
921     { &hf_atn_cm_rDP,
922       { "rDP", "atn-cm.rDP",
923         FT_BYTES, BASE_NONE, NULL, 0,
924         "OCTET_STRING_SIZE_5", HFILL }},
925     { &hf_atn_cm_aRS,
926       { "aRS", "atn-cm.aRS",
927         FT_BYTES, BASE_NONE, NULL, 0,
928         "OCTET_STRING_SIZE_3", HFILL }},
929     { &hf_atn_cm_locSysNselTsel,
930       { "locSysNselTsel", "atn-cm.locSysNselTsel",
931         FT_BYTES, BASE_NONE, NULL, 0,
932         "OCTET_STRING_SIZE_10_11", HFILL }},
933     { &hf_atn_cm_hours,
934       { "hours", "atn-cm.hours",
935         FT_UINT32, BASE_DEC, NULL, 0,
936         "Timehours", HFILL }},
937     { &hf_atn_cm_minutes,
938       { "minutes", "atn-cm.minutes",
939         FT_UINT32, BASE_DEC, NULL, 0,
940         "Timeminutes", HFILL }},
941
942 /*--- End of included file: packet-atn-cm-hfarr.c ---*/
943 #line 212 "../../asn1/atn-cm/packet-atn-cm-template.c"
944     };
945                 static gint *ett[] = {
946
947 /*--- Included file: packet-atn-cm-ettarr.c ---*/
948 #line 1 "../../asn1/atn-cm/packet-atn-cm-ettarr.c"
949     &ett_atn_cm_CMAircraftMessage,
950     &ett_atn_cm_CMGroundMessage,
951     &ett_atn_cm_APAddress,
952     &ett_atn_cm_AEQualifierVersion,
953     &ett_atn_cm_AEQualifierVersionAddress,
954     &ett_atn_cm_CMContactRequest,
955     &ett_atn_cm_CMLogonRequest,
956     &ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress,
957     &ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion,
958     &ett_atn_cm_CMLogonResponse,
959     &ett_atn_cm_Date,
960     &ett_atn_cm_DateTime,
961     &ett_atn_cm_LongTsap,
962     &ett_atn_cm_ShortTsap,
963     &ett_atn_cm_Time,
964
965 /*--- End of included file: packet-atn-cm-ettarr.c ---*/
966 #line 215 "../../asn1/atn-cm/packet-atn-cm-template.c"
967                         &ett_atn_cm
968                 };
969
970                 /* register CM application */
971                 proto_atn_cm = proto_register_protocol(
972                                 ATN_CM_PROTO ,
973                                 "ATN-CM",
974                                 "atn-cm");
975
976                 proto_register_field_array(
977                                 proto_atn_cm,
978                                 hf_atn_cm,
979                                 array_length(hf_atn_cm));
980
981                 proto_register_subtree_array(
982                                 ett,
983                                 array_length(ett));
984
985                 new_register_dissector(
986                                 "atn-cm",
987                                 dissect_atn_cm,
988                                 proto_atn_cm);
989 }
990
991 void proto_reg_handoff_atn_cm(void)
992 {
993                 /* add session dissector to subdissector list*/
994                 heur_dissector_add(
995                                 "atn-ulcs",
996                                 dissect_atn_cm_heur,
997                                 proto_atn_cm);
998 }
999
1000 /*
1001  * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
1002  *
1003  * Local variables:
1004  * c-basic-offset: 2
1005  * tab-width: 2
1006  * indent-tabs-mode: t
1007  * End:
1008  *
1009  * vi: set shiftwidth=2 tabstop=2 noexpandtab:
1010  * :indentSize=2:tabSize=2:noTabs=false:
1011  */
1012