aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-09-05 05:26:04 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-09-05 05:26:04 +0000
commit80cd0dca1d93b595b0406b7cbd232f84cf8e81ee (patch)
tree2d8c2a803f61ada4ebda585bd55ad4d8d53c9322 /epan/dissectors
parentedbade845864676e2132d8a0b21a210c6c9a9f86 (diff)
From Mathias Guettler:
New dissector for Air/Ground Datalink ICAO doc 9705 Ed2: ULCS, CM, CPDLC. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8903 svn path=/trunk/; revision=51766
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-atn-cm.c1014
-rw-r--r--epan/dissectors/packet-atn-cpdlc.c8113
-rw-r--r--epan/dissectors/packet-atn-ulcs.c2640
-rw-r--r--epan/dissectors/packet-atn-ulcs.h122
4 files changed, 11889 insertions, 0 deletions
diff --git a/epan/dissectors/packet-atn-cm.c b/epan/dissectors/packet-atn-cm.c
new file mode 100644
index 0000000000..dc115bd72e
--- /dev/null
+++ b/epan/dissectors/packet-atn-cm.c
@@ -0,0 +1,1014 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-atn-cm.c */
+/* ../../tools/asn2wrs.py -u -L -p atn-cm -c ./atn-cm.cnf -s ./packet-atn-cm-template -D . -O ../../epan/dissectors atn-cm.asn */
+
+/* Input file: packet-atn-cm-template.c */
+
+#line 1 "../../asn1/atn-cm/packet-atn-cm-template.c"
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+
+
+/* packet-atn-cm.c
+ * By Mathias Guettler <guettler@web.de>
+ * Copyright 2013
+ *
+ * Routines for ATN context management protocol packet disassembly.
+ * ATN context management allows an aircraft
+ * to log on to a ground facility.
+
+ * details see:
+ * http://en.wikipedia.org/wiki/CPDLC
+ * http://members.optusnet.com.au/~cjr/introduction.htm
+
+ * standards:
+ * http://legacy.icao.int/anb/panels/acp/repository.cfm
+
+ * note:
+ * We are dealing with ATN/CPDLC aka ICAO Doc 9705 Ed2 here
+ * (CPDLC may also be transmitted via ACARS/AOA aka "FANS-1/A ").
+
+
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+#include <epan/dissectors/packet-ber.h>
+#include <epan/dissectors/packet-per.h>
+#include <epan/emem.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "packet-atn-ulcs.h"
+
+#define ATN_CM_PROTO "ICAO Doc9705 CM"
+
+
+/*--- Included file: packet-atn-cm-hf.c ---*/
+#line 1 "../../asn1/atn-cm/packet-atn-cm-hf.c"
+static int hf_atn_cm_CMAircraftMessage_PDU = -1; /* CMAircraftMessage */
+static int hf_atn_cm_CMGroundMessage_PDU = -1; /* CMGroundMessage */
+static int hf_atn_cm_cmLogonRequest = -1; /* CMLogonRequest */
+static int hf_atn_cm_cmContactResponse = -1; /* CMContactResponse */
+static int hf_atn_cm_cmAbortReason = -1; /* CMAbortReason */
+static int hf_atn_cm_cmLogonResponse = -1; /* CMLogonResponse */
+static int hf_atn_cm_cmUpdate = -1; /* CMUpdate */
+static int hf_atn_cm_cmContactRequest = -1; /* CMContactRequest */
+static int hf_atn_cm_cmForwardRequest = -1; /* CMForwardRequest */
+static int hf_atn_cm_cmForwardResponse = -1; /* CMForwardResponse */
+static int hf_atn_cm_longTsap = -1; /* LongTsap */
+static int hf_atn_cm_shortTsap = -1; /* ShortTsap */
+static int hf_atn_cm_aeQualifier = -1; /* AEQualifier */
+static int hf_atn_cm_apVersion = -1; /* VersionNumber */
+static int hf_atn_cm_apAddress = -1; /* APAddress */
+static int hf_atn_cm_facilityDesignation = -1; /* FacilityDesignation */
+static int hf_atn_cm_address = -1; /* LongTsap */
+static int hf_atn_cm_aircraftFlightIdentification = -1; /* AircraftFlightIdentification */
+static int hf_atn_cm_cMLongTSAP = -1; /* LongTsap */
+static int hf_atn_cm_groundInitiatedApplications = -1; /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress */
+static int hf_atn_cm_groundInitiatedApplications_item = -1; /* AEQualifierVersionAddress */
+static int hf_atn_cm_airOnlyInitiatedApplications = -1; /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersion */
+static int hf_atn_cm_airOnlyInitiatedApplications_item = -1; /* AEQualifierVersion */
+static int hf_atn_cm_airportDeparture = -1; /* Airport */
+static int hf_atn_cm_airportDestination = -1; /* Airport */
+static int hf_atn_cm_dateTimeDepartureETD = -1; /* DateTime */
+static int hf_atn_cm_airInitiatedApplications = -1; /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress */
+static int hf_atn_cm_airInitiatedApplications_item = -1; /* AEQualifierVersionAddress */
+static int hf_atn_cm_groundOnlyInitiatedApplications = -1; /* SEQUENCE_SIZE_1_256_OF_AEQualifierVersion */
+static int hf_atn_cm_groundOnlyInitiatedApplications_item = -1; /* AEQualifierVersion */
+static int hf_atn_cm_year = -1; /* Year */
+static int hf_atn_cm_month = -1; /* Month */
+static int hf_atn_cm_day = -1; /* Day */
+static int hf_atn_cm_date = -1; /* Date */
+static int hf_atn_cm_time = -1; /* Time */
+static int hf_atn_cm_rDP = -1; /* OCTET_STRING_SIZE_5 */
+static int hf_atn_cm_aRS = -1; /* OCTET_STRING_SIZE_3 */
+static int hf_atn_cm_locSysNselTsel = -1; /* OCTET_STRING_SIZE_10_11 */
+static int hf_atn_cm_hours = -1; /* Timehours */
+static int hf_atn_cm_minutes = -1; /* Timeminutes */
+
+/*--- End of included file: packet-atn-cm-hf.c ---*/
+#line 65 "../../asn1/atn-cm/packet-atn-cm-template.c"
+
+
+/*--- Included file: packet-atn-cm-ett.c ---*/
+#line 1 "../../asn1/atn-cm/packet-atn-cm-ett.c"
+static gint ett_atn_cm_CMAircraftMessage = -1;
+static gint ett_atn_cm_CMGroundMessage = -1;
+static gint ett_atn_cm_APAddress = -1;
+static gint ett_atn_cm_AEQualifierVersion = -1;
+static gint ett_atn_cm_AEQualifierVersionAddress = -1;
+static gint ett_atn_cm_CMContactRequest = -1;
+static gint ett_atn_cm_CMLogonRequest = -1;
+static gint ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress = -1;
+static gint ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion = -1;
+static gint ett_atn_cm_CMLogonResponse = -1;
+static gint ett_atn_cm_Date = -1;
+static gint ett_atn_cm_DateTime = -1;
+static gint ett_atn_cm_LongTsap = -1;
+static gint ett_atn_cm_ShortTsap = -1;
+static gint ett_atn_cm_Time = -1;
+
+/*--- End of included file: packet-atn-cm-ett.c ---*/
+#line 67 "../../asn1/atn-cm/packet-atn-cm-template.c"
+static gint ett_atn_cm = -1;
+
+
+/*--- Included file: packet-atn-cm-fn.c ---*/
+#line 1 "../../asn1/atn-cm/packet-atn-cm-fn.c"
+
+
+static int
+dissect_atn_cm_AircraftFlightIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 2, 8, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 5, 5, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 3, 3, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 10, 11, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ShortTsap_sequence[] = {
+ { &hf_atn_cm_aRS , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_OCTET_STRING_SIZE_3 },
+ { &hf_atn_cm_locSysNselTsel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_OCTET_STRING_SIZE_10_11 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_ShortTsap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_ShortTsap, ShortTsap_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LongTsap_sequence[] = {
+ { &hf_atn_cm_rDP , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_OCTET_STRING_SIZE_5 },
+ { &hf_atn_cm_shortTsap , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_ShortTsap },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_LongTsap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_LongTsap, LongTsap_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_AEQualifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_VersionNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_APAddress_vals[] = {
+ { 0, "longTsap" },
+ { 1, "shortTsap" },
+ { 0, NULL }
+};
+
+static const per_choice_t APAddress_choice[] = {
+ { 0, &hf_atn_cm_longTsap , ASN1_NO_EXTENSIONS , dissect_atn_cm_LongTsap },
+ { 1, &hf_atn_cm_shortTsap , ASN1_NO_EXTENSIONS , dissect_atn_cm_ShortTsap },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cm_APAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_APAddress, APAddress_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t AEQualifierVersionAddress_sequence[] = {
+ { &hf_atn_cm_aeQualifier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifier },
+ { &hf_atn_cm_apVersion , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_VersionNumber },
+ { &hf_atn_cm_apAddress , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_APAddress },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_AEQualifierVersionAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_AEQualifierVersionAddress, AEQualifierVersionAddress_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress_sequence_of[1] = {
+ { &hf_atn_cm_groundInitiatedApplications_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifierVersionAddress },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress, SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress_sequence_of,
+ 1, 256, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AEQualifierVersion_sequence[] = {
+ { &hf_atn_cm_aeQualifier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifier },
+ { &hf_atn_cm_apVersion , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_VersionNumber },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_AEQualifierVersion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_AEQualifierVersion, AEQualifierVersion_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_256_OF_AEQualifierVersion_sequence_of[1] = {
+ { &hf_atn_cm_airOnlyInitiatedApplications_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_AEQualifierVersion },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion, SEQUENCE_SIZE_1_256_OF_AEQualifierVersion_sequence_of,
+ 1, 256, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_FacilityDesignation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 4, 8, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Airport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Year(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1996U, 2095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Month(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 12U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Day(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 31U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Date_sequence[] = {
+ { &hf_atn_cm_year , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Year },
+ { &hf_atn_cm_month , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Month },
+ { &hf_atn_cm_day , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Day },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_Date(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_Date, Date_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Timehours(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 23U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_Timeminutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Time_sequence[] = {
+ { &hf_atn_cm_hours , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Timehours },
+ { &hf_atn_cm_minutes , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Timeminutes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_Time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_Time, Time_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t DateTime_sequence[] = {
+ { &hf_atn_cm_date , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Date },
+ { &hf_atn_cm_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_Time },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_DateTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_DateTime, DateTime_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t CMLogonRequest_sequence[] = {
+ { &hf_atn_cm_aircraftFlightIdentification, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_AircraftFlightIdentification },
+ { &hf_atn_cm_cMLongTSAP , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_LongTsap },
+ { &hf_atn_cm_groundInitiatedApplications, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress },
+ { &hf_atn_cm_airOnlyInitiatedApplications, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion },
+ { &hf_atn_cm_facilityDesignation, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_FacilityDesignation },
+ { &hf_atn_cm_airportDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_Airport },
+ { &hf_atn_cm_airportDestination, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_Airport },
+ { &hf_atn_cm_dateTimeDepartureETD, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_DateTime },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_CMLogonRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_CMLogonRequest, CMLogonRequest_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_Response_vals[] = {
+ { 0, "contactSuccess" },
+ { 1, "contactNotSuccessful" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cm_Response(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_CMContactResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_cm_Response(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_CMAbortReason_vals[] = {
+ { 0, "timer-expired" },
+ { 1, "undefined-error" },
+ { 2, "invalid-PDU" },
+ { 3, "protocol-error" },
+ { 4, "dialogue-acceptance-not-permitted" },
+ { 5, "dialogue-end-not-accepted" },
+ { 6, "communication-service-error" },
+ { 7, "communication-service-failure" },
+ { 8, "invalid-QOS-parameter" },
+ { 9, "expected-PDU-missing" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cm_CMAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 10, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_CMAircraftMessage_vals[] = {
+ { 0, "cmLogonRequest" },
+ { 1, "cmContactResponse" },
+ { 2, "cmAbortReason" },
+ { 0, NULL }
+};
+
+static const per_choice_t CMAircraftMessage_choice[] = {
+ { 0, &hf_atn_cm_cmLogonRequest, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMLogonRequest },
+ { 1, &hf_atn_cm_cmContactResponse, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMContactResponse },
+ { 2, &hf_atn_cm_cmAbortReason, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMAbortReason },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cm_CMAircraftMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_CMAircraftMessage, CMAircraftMessage_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t CMLogonResponse_sequence[] = {
+ { &hf_atn_cm_airInitiatedApplications, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress },
+ { &hf_atn_cm_groundOnlyInitiatedApplications, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_CMLogonResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_CMLogonResponse, CMLogonResponse_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_CMUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_cm_CMLogonResponse(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const per_sequence_t CMContactRequest_sequence[] = {
+ { &hf_atn_cm_facilityDesignation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_FacilityDesignation },
+ { &hf_atn_cm_address , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cm_LongTsap },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cm_CMContactRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_CMContactRequest, CMContactRequest_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cm_CMForwardRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_cm_CMLogonRequest(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_CMForwardResponse_vals[] = {
+ { 0, "success" },
+ { 1, "incompatible-version" },
+ { 2, "service-not-supported" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cm_CMForwardResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cm_CMGroundMessage_vals[] = {
+ { 0, "cmLogonResponse" },
+ { 1, "cmUpdate" },
+ { 2, "cmContactRequest" },
+ { 3, "cmForwardRequest" },
+ { 4, "cmAbortReason" },
+ { 5, "cmForwardResponse" },
+ { 0, NULL }
+};
+
+static const per_choice_t CMGroundMessage_choice[] = {
+ { 0, &hf_atn_cm_cmLogonResponse, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMLogonResponse },
+ { 1, &hf_atn_cm_cmUpdate , ASN1_EXTENSION_ROOT , dissect_atn_cm_CMUpdate },
+ { 2, &hf_atn_cm_cmContactRequest, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMContactRequest },
+ { 3, &hf_atn_cm_cmForwardRequest, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMForwardRequest },
+ { 4, &hf_atn_cm_cmAbortReason, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMAbortReason },
+ { 5, &hf_atn_cm_cmForwardResponse, ASN1_EXTENSION_ROOT , dissect_atn_cm_CMForwardResponse },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cm_CMGroundMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cm_CMGroundMessage, CMGroundMessage_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static void dissect_CMAircraftMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cm_CMAircraftMessage(tvb, 0, &asn1_ctx, tree, hf_atn_cm_CMAircraftMessage_PDU);
+}
+static void dissect_CMGroundMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cm_CMGroundMessage(tvb, 0, &asn1_ctx, tree, hf_atn_cm_CMGroundMessage_PDU);
+}
+
+
+/*--- End of included file: packet-atn-cm-fn.c ---*/
+#line 70 "../../asn1/atn-cm/packet-atn-cm-template.c"
+static int proto_atn_cm = -1;
+
+static int
+dissect_atn_cm(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ int type = no_msg;
+ proto_item *ti = NULL;
+ proto_tree *sub_tree = NULL;
+
+ ti = proto_tree_add_text(
+ tree,
+ tvb,
+ 0,
+ tvb_reported_length_remaining(tvb, 0) ,
+ ATN_CM_PROTO);
+
+ sub_tree = proto_item_add_subtree(
+ ti,
+ ett_atn_cm);
+
+ /* ti = proto_tree_add_item(tree, proto_atn_cm, tvb, 0, 0 , FALSE); */
+ /* sub_tree = proto_item_add_subtree(ti, ett_atn_cm_pdu); */
+
+ /* determine whether it is uplink or downlink */
+ type = check_heur_msg_type(pinfo);
+
+ switch(type){
+ case um:
+ dissect_CMGroundMessage_PDU(
+ tvb,
+ pinfo,
+ sub_tree);
+ break;
+ case dm:
+ dissect_CMAircraftMessage_PDU(
+ tvb,
+ pinfo,
+ sub_tree);
+ break;
+ default:
+ break;
+ }
+ return tvb_reported_length_remaining(tvb, 0);
+}
+
+static gboolean
+dissect_atn_cm_heur(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ atn_conversation_t *atn_cv = NULL;
+ gboolean is_atn_cm = FALSE;
+ int type;
+
+ /* determine whether it is uplink or downlink */
+ type = check_heur_msg_type(pinfo);
+
+ /* heuristically decode message */
+ switch(type){
+ case um:
+ TRY {
+ dissect_CMGroundMessage_PDU(
+ tvb,
+ pinfo,
+ NULL);
+ /* no exception thrown: looks like it is a CM PDU */
+ is_atn_cm = TRUE; }
+ CATCH_ALL {
+ is_atn_cm = FALSE; }
+ ENDTRY;
+ break;
+ case dm:
+ TRY {
+ dissect_CMAircraftMessage_PDU(
+ tvb,
+ pinfo,
+ NULL);
+ /* no exception thrown: looks like it is a CM PDU */
+ is_atn_cm = TRUE;}
+ CATCH_ALL {
+ is_atn_cm = FALSE; }
+ ENDTRY;
+ break;
+ default:
+ break;
+ }
+
+ if (is_atn_cm == TRUE) {
+ /* note: */
+ /* all subsequent PDU's belonging to this conversation are considered CM */
+ /* if the first CM PDU has been decoded succesfully */
+ /* (This is done in "atn-ulcs" by using "call_dissector_with_data()") */
+
+ /* DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) &&
+ (!pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+ }
+ /* CR: srcref present, dstref is always zero */
+ if((!pinfo->clnp_dstref) &&
+ (pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+
+ }
+ /* CC: srcref and dstref present */
+ if((pinfo->clnp_dstref) &&
+ (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+ if(atn_cv){
+ atn_cv->ae_qualifier = cma;
+ }
+ dissect_atn_cm(
+ tvb,
+ pinfo,
+ tree,
+ NULL);
+ }
+
+ return is_atn_cm;
+}
+
+
+void proto_register_atn_cm (void)
+{
+ static hf_register_info hf_atn_cm[] = {
+
+/*--- Included file: packet-atn-cm-hfarr.c ---*/
+#line 1 "../../asn1/atn-cm/packet-atn-cm-hfarr.c"
+ { &hf_atn_cm_CMAircraftMessage_PDU,
+ { "CMAircraftMessage", "atn-cm.CMAircraftMessage",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_CMAircraftMessage_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_CMGroundMessage_PDU,
+ { "CMGroundMessage", "atn-cm.CMGroundMessage",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_CMGroundMessage_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmLogonRequest,
+ { "cmLogonRequest", "atn-cm.cmLogonRequest_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmContactResponse,
+ { "cmContactResponse", "atn-cm.cmContactResponse",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_Response_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmAbortReason,
+ { "cmAbortReason", "atn-cm.cmAbortReason",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_CMAbortReason_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmLogonResponse,
+ { "cmLogonResponse", "atn-cm.cmLogonResponse_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmUpdate,
+ { "cmUpdate", "atn-cm.cmUpdate_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmContactRequest,
+ { "cmContactRequest", "atn-cm.cmContactRequest_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmForwardRequest,
+ { "cmForwardRequest", "atn-cm.cmForwardRequest_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cmForwardResponse,
+ { "cmForwardResponse", "atn-cm.cmForwardResponse",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_CMForwardResponse_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_longTsap,
+ { "longTsap", "atn-cm.longTsap_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_shortTsap,
+ { "shortTsap", "atn-cm.shortTsap_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_aeQualifier,
+ { "aeQualifier", "atn-cm.aeQualifier",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_apVersion,
+ { "apVersion", "atn-cm.apVersion",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "VersionNumber", HFILL }},
+ { &hf_atn_cm_apAddress,
+ { "apAddress", "atn-cm.apAddress",
+ FT_UINT32, BASE_DEC, VALS(atn_cm_APAddress_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_facilityDesignation,
+ { "facilityDesignation", "atn-cm.facilityDesignation",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_address,
+ { "address", "atn-cm.address_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LongTsap", HFILL }},
+ { &hf_atn_cm_aircraftFlightIdentification,
+ { "aircraftFlightIdentification", "atn-cm.aircraftFlightIdentification",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_cMLongTSAP,
+ { "cMLongTSAP", "atn-cm.cMLongTSAP_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LongTsap", HFILL }},
+ { &hf_atn_cm_groundInitiatedApplications,
+ { "groundInitiatedApplications", "atn-cm.groundInitiatedApplications",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress", HFILL }},
+ { &hf_atn_cm_groundInitiatedApplications_item,
+ { "AEQualifierVersionAddress", "atn-cm.AEQualifierVersionAddress_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_airOnlyInitiatedApplications,
+ { "airOnlyInitiatedApplications", "atn-cm.airOnlyInitiatedApplications",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_256_OF_AEQualifierVersion", HFILL }},
+ { &hf_atn_cm_airOnlyInitiatedApplications_item,
+ { "AEQualifierVersion", "atn-cm.AEQualifierVersion_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_airportDeparture,
+ { "airportDeparture", "atn-cm.airportDeparture",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Airport", HFILL }},
+ { &hf_atn_cm_airportDestination,
+ { "airportDestination", "atn-cm.airportDestination",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Airport", HFILL }},
+ { &hf_atn_cm_dateTimeDepartureETD,
+ { "dateTimeDepartureETD", "atn-cm.dateTimeDepartureETD_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DateTime", HFILL }},
+ { &hf_atn_cm_airInitiatedApplications,
+ { "airInitiatedApplications", "atn-cm.airInitiatedApplications",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress", HFILL }},
+ { &hf_atn_cm_airInitiatedApplications_item,
+ { "AEQualifierVersionAddress", "atn-cm.AEQualifierVersionAddress_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_groundOnlyInitiatedApplications,
+ { "groundOnlyInitiatedApplications", "atn-cm.groundOnlyInitiatedApplications",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_256_OF_AEQualifierVersion", HFILL }},
+ { &hf_atn_cm_groundOnlyInitiatedApplications_item,
+ { "AEQualifierVersion", "atn-cm.AEQualifierVersion_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_year,
+ { "year", "atn-cm.year",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_month,
+ { "month", "atn-cm.month",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_day,
+ { "day", "atn-cm.day",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_date,
+ { "date", "atn-cm.date_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_time,
+ { "time", "atn-cm.time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cm_rDP,
+ { "rDP", "atn-cm.rDP",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING_SIZE_5", HFILL }},
+ { &hf_atn_cm_aRS,
+ { "aRS", "atn-cm.aRS",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING_SIZE_3", HFILL }},
+ { &hf_atn_cm_locSysNselTsel,
+ { "locSysNselTsel", "atn-cm.locSysNselTsel",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING_SIZE_10_11", HFILL }},
+ { &hf_atn_cm_hours,
+ { "hours", "atn-cm.hours",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Timehours", HFILL }},
+ { &hf_atn_cm_minutes,
+ { "minutes", "atn-cm.minutes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Timeminutes", HFILL }},
+
+/*--- End of included file: packet-atn-cm-hfarr.c ---*/
+#line 214 "../../asn1/atn-cm/packet-atn-cm-template.c"
+ };
+ static gint *ett[] = {
+
+/*--- Included file: packet-atn-cm-ettarr.c ---*/
+#line 1 "../../asn1/atn-cm/packet-atn-cm-ettarr.c"
+ &ett_atn_cm_CMAircraftMessage,
+ &ett_atn_cm_CMGroundMessage,
+ &ett_atn_cm_APAddress,
+ &ett_atn_cm_AEQualifierVersion,
+ &ett_atn_cm_AEQualifierVersionAddress,
+ &ett_atn_cm_CMContactRequest,
+ &ett_atn_cm_CMLogonRequest,
+ &ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersionAddress,
+ &ett_atn_cm_SEQUENCE_SIZE_1_256_OF_AEQualifierVersion,
+ &ett_atn_cm_CMLogonResponse,
+ &ett_atn_cm_Date,
+ &ett_atn_cm_DateTime,
+ &ett_atn_cm_LongTsap,
+ &ett_atn_cm_ShortTsap,
+ &ett_atn_cm_Time,
+
+/*--- End of included file: packet-atn-cm-ettarr.c ---*/
+#line 217 "../../asn1/atn-cm/packet-atn-cm-template.c"
+ &ett_atn_cm
+ };
+
+ /* register CM application */
+ proto_atn_cm = proto_register_protocol(
+ ATN_CM_PROTO ,
+ "ATN-CM",
+ "atn-cm");
+
+ proto_register_field_array(
+ proto_atn_cm,
+ hf_atn_cm,
+ array_length(hf_atn_cm));
+
+ proto_register_subtree_array(
+ ett,
+ array_length(ett));
+
+ new_register_dissector(
+ "atn-cm",
+ dissect_atn_cm,
+ proto_atn_cm);
+}
+
+void proto_reg_handoff_atn_cm(void)
+{
+ /* add session dissector to subdissector list*/
+ heur_dissector_add(
+ "atn-ulcs",
+ dissect_atn_cm_heur,
+ proto_atn_cm);
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+
diff --git a/epan/dissectors/packet-atn-cpdlc.c b/epan/dissectors/packet-atn-cpdlc.c
new file mode 100644
index 0000000000..3e7ae26ee5
--- /dev/null
+++ b/epan/dissectors/packet-atn-cpdlc.c
@@ -0,0 +1,8113 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-atn-cpdlc.c */
+/* ../../tools/asn2wrs.py -u -L -p atn-cpdlc -c ./atn-cpdlc.cnf -s ./packet-atn-cpdlc-template -D . -O ../../epan/dissectors atn-cpdlc.asn */
+
+/* Input file: packet-atn-cpdlc-template.c */
+
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+
+/* packet-atn-cpdlc-template.c
+ * By Mathias Guettler <guettler@web.de>
+ * Copyright 2013
+
+ * Routines for ATN Cpdlcc protocol packet disassembly
+
+ * details see:
+ * http://en.wikipedia.org/wiki/CPDLC
+ * http://members.optusnet.com.au/~cjr/introduction.htm
+
+ * standards:
+ * http://legacy.icao.int/anb/panels/acp/repository.cfm
+
+ * note:
+ * We are dealing with ATN/CPDLC aka ICAO Doc 9705 Ed2 here
+ * (CPDLC may also be transmitted via ACARS/AOA aka "FANS-1/A ").
+
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ developper comments:
+ Which CPDLC messages are supported ?
+ Protected Mode CPDLC (AeQualifier 22) and Plain Old CPDLC (AeQualifier 2)
+ The dissector has been tested with ICAO doc9705 Edition2 compliant traffic.
+*/
+
+#include "config.h"
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+#include <epan/dissectors/packet-ber.h>
+#include <epan/dissectors/packet-per.h>
+#include <epan/emem.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-atn-ulcs.h"
+
+#define ATN_CPDLC_PROTO "ICAO Doc9705 CPDLC"
+
+static const char *object_identifier_id;
+
+/* forward declarations */
+static void dissect_GroundPDUs_PDU(
+ tvbuff_t *tvb _U_,
+ packet_info *pinfo _U_,
+ proto_tree *tree _U_);
+static void dissect_AircraftPDUs_PDU(
+ tvbuff_t *tvb _U_,
+ packet_info *pinfo _U_,
+ proto_tree *tree _U_);
+static void dissect_ProtectedGroundPDUs_PDU(
+ tvbuff_t *tvb _U_,
+ packet_info *pinfo _U_,
+ proto_tree *tree _U_);
+static void dissect_ProtectedAircraftPDUs_PDU(
+ tvbuff_t *tvb _U_,
+ packet_info *pinfo _U_,
+ proto_tree *tree _U_);
+
+
+/*--- Included file: packet-atn-cpdlc-hf.c ---*/
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-hf.c"
+static int hf_atn_cpdlc_GroundPDUs_PDU = -1; /* GroundPDUs */
+static int hf_atn_cpdlc_AircraftPDUs_PDU = -1; /* AircraftPDUs */
+static int hf_atn_cpdlc_ProtectedGroundPDUs_PDU = -1; /* ProtectedGroundPDUs */
+static int hf_atn_cpdlc_ProtectedAircraftPDUs_PDU = -1; /* ProtectedAircraftPDUs */
+static int hf_atn_cpdlc_abortUser = -1; /* CPDLCUserAbortReason */
+static int hf_atn_cpdlc_abortProvider = -1; /* CPDLCProviderAbortReason */
+static int hf_atn_cpdlc_startup = -1; /* UplinkMessage */
+static int hf_atn_cpdlc_groundpdus_send = -1; /* ATCUplinkMessage */
+static int hf_atn_cpdlc_forward = -1; /* ATCForwardMessage */
+static int hf_atn_cpdlc_forwardresponse = -1; /* ATCForwardResponse */
+static int hf_atn_cpdlc_noMessage = -1; /* NULL */
+static int hf_atn_cpdlc_aTCUplinkMessage = -1; /* ATCUplinkMessage */
+static int hf_atn_cpdlc_startdown = -1; /* StartDownMessage */
+static int hf_atn_cpdlc_aircraftpdus_send = -1; /* ATCDownlinkMessage */
+static int hf_atn_cpdlc_mode = -1; /* Mode */
+static int hf_atn_cpdlc_startDownlinkMessage = -1; /* DownlinkMessage */
+static int hf_atn_cpdlc_aTCDownlinkMessage = -1; /* ATCDownlinkMessage */
+static int hf_atn_cpdlc_pmcpdlcuserabortreason = -1; /* PMCPDLCUserAbortReason */
+static int hf_atn_cpdlc_pmcpdlcproviderabortreason = -1; /* PMCPDLCProviderAbortReason */
+static int hf_atn_cpdlc_protecteduplinkmessage = -1; /* ProtectedUplinkMessage */
+static int hf_atn_cpdlc_algorithmIdentifier = -1; /* AlgorithmIdentifier */
+static int hf_atn_cpdlc_protectedMessage = -1; /* CPDLCMessage */
+static int hf_atn_cpdlc_integrityCheck = -1; /* BIT_STRING */
+static int hf_atn_cpdlc_forwardHeader = -1; /* ForwardHeader */
+static int hf_atn_cpdlc_forwardMessage = -1; /* ForwardMessage */
+static int hf_atn_cpdlc_dateTime = -1; /* DateTimeGroup */
+static int hf_atn_cpdlc_aircraftID = -1; /* AircraftFlightIdentification */
+static int hf_atn_cpdlc_aircraftAddress = -1; /* AircraftAddress */
+static int hf_atn_cpdlc_upElementIDs = -1; /* BIT_STRING */
+static int hf_atn_cpdlc_downElementIDs = -1; /* BIT_STRING */
+static int hf_atn_cpdlc_protectedstartDownmessage = -1; /* ProtectedStartDownMessage */
+static int hf_atn_cpdlc_send = -1; /* ProtectedDownlinkMessage */
+static int hf_atn_cpdlc_protectedmode = -1; /* ProtectedMode */
+static int hf_atn_cpdlc_protecteddownlinkmessage = -1; /* ProtectedDownlinkMessage */
+static int hf_atn_cpdlc_header = -1; /* ATCMessageHeader */
+static int hf_atn_cpdlc_atcuplinkmessage_messagedata = -1; /* ATCUplinkMessageData */
+static int hf_atn_cpdlc_atcuplinkmessagedata_elementids = -1; /* SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId */
+static int hf_atn_cpdlc_atcuplinkmessagedata_elementids_item = -1; /* ATCUplinkMsgElementId */
+static int hf_atn_cpdlc_atcuplinkmessagedata_constraineddata = -1; /* T_atcuplinkmessagedata_constraineddata */
+static int hf_atn_cpdlc_routeClearanceData = -1; /* SEQUENCE_SIZE_1_2_OF_RouteClearance */
+static int hf_atn_cpdlc_routeClearanceData_item = -1; /* RouteClearance */
+static int hf_atn_cpdlc_atcdownlinkmessage_messagedata = -1; /* ATCDownlinkMessageData */
+static int hf_atn_cpdlc_atcdownlinkmessagedata_elementids = -1; /* SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId */
+static int hf_atn_cpdlc_atcdownlinkmessagedata_elementids_item = -1; /* ATCDownlinkMsgElementId */
+static int hf_atn_cpdlc_atcdownlinkmessagedata_constraineddata = -1; /* T_atcdownlinkmessagedata_constraineddata */
+static int hf_atn_cpdlc_messageIdNumber = -1; /* MsgIdentificationNumber */
+static int hf_atn_cpdlc_messageRefNumber = -1; /* MsgReferenceNumber */
+static int hf_atn_cpdlc_logicalAck = -1; /* LogicalAck */
+static int hf_atn_cpdlc_uM0NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM1NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM2NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM3NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM4NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM5NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM6Level = -1; /* Level */
+static int hf_atn_cpdlc_uM7Time = -1; /* Time */
+static int hf_atn_cpdlc_uM8Position = -1; /* Position */
+static int hf_atn_cpdlc_uM9Time = -1; /* Time */
+static int hf_atn_cpdlc_uM10Position = -1; /* Position */
+static int hf_atn_cpdlc_uM11Time = -1; /* Time */
+static int hf_atn_cpdlc_uM12Position = -1; /* Position */
+static int hf_atn_cpdlc_uM13TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_uM14PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM15TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_uM16PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM17TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_uM18PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM19Level = -1; /* Level */
+static int hf_atn_cpdlc_uM20Level = -1; /* Level */
+static int hf_atn_cpdlc_uM21TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_uM22PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM23Level = -1; /* Level */
+static int hf_atn_cpdlc_uM24TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_uM25PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM26LevelTime = -1; /* LevelTime */
+static int hf_atn_cpdlc_uM27LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM28LevelTime = -1; /* LevelTime */
+static int hf_atn_cpdlc_uM29LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM30LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_uM31LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_uM32LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_uM33NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM34Level = -1; /* Level */
+static int hf_atn_cpdlc_uM35Level = -1; /* Level */
+static int hf_atn_cpdlc_uM36Level = -1; /* Level */
+static int hf_atn_cpdlc_uM37Level = -1; /* Level */
+static int hf_atn_cpdlc_uM38Level = -1; /* Level */
+static int hf_atn_cpdlc_uM39Level = -1; /* Level */
+static int hf_atn_cpdlc_uM40NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM41NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM42PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM43PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM44PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM45PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM46PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM47PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM48PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM49PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM50PositionLevelLevel = -1; /* PositionLevelLevel */
+static int hf_atn_cpdlc_uM51PositionTime = -1; /* PositionTime */
+static int hf_atn_cpdlc_uM52PositionTime = -1; /* PositionTime */
+static int hf_atn_cpdlc_uM53PositionTime = -1; /* PositionTime */
+static int hf_atn_cpdlc_uM54PositionTimeTime = -1; /* PositionTimeTime */
+static int hf_atn_cpdlc_uM55PositionSpeed = -1; /* PositionSpeed */
+static int hf_atn_cpdlc_uM56PositionSpeed = -1; /* PositionSpeed */
+static int hf_atn_cpdlc_uM57PositionSpeed = -1; /* PositionSpeed */
+static int hf_atn_cpdlc_uM58PositionTimeLevel = -1; /* PositionTimeLevel */
+static int hf_atn_cpdlc_uM59PositionTimeLevel = -1; /* PositionTimeLevel */
+static int hf_atn_cpdlc_uM60PositionTimeLevel = -1; /* PositionTimeLevel */
+static int hf_atn_cpdlc_uM61PositionLevelSpeed = -1; /* PositionLevelSpeed */
+static int hf_atn_cpdlc_uM62TimePositionLevel = -1; /* TimePositionLevel */
+static int hf_atn_cpdlc_uM63TimePositionLevelSpeed = -1; /* TimePositionLevelSpeed */
+static int hf_atn_cpdlc_uM64DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_uM65PositionDistanceSpecifiedDirection = -1; /* PositionDistanceSpecifiedDirection */
+static int hf_atn_cpdlc_uM66TimeDistanceSpecifiedDirection = -1; /* TimeDistanceSpecifiedDirection */
+static int hf_atn_cpdlc_uM67NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM68Position = -1; /* Position */
+static int hf_atn_cpdlc_uM69Time = -1; /* Time */
+static int hf_atn_cpdlc_uM70Position = -1; /* Position */
+static int hf_atn_cpdlc_uM71Time = -1; /* Time */
+static int hf_atn_cpdlc_uM72NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM73DepartureClearance = -1; /* DepartureClearance */
+static int hf_atn_cpdlc_uM74Position = -1; /* Position */
+static int hf_atn_cpdlc_uM75Position = -1; /* Position */
+static int hf_atn_cpdlc_uM76TimePosition = -1; /* TimePosition */
+static int hf_atn_cpdlc_uM77PositionPosition = -1; /* PositionPosition */
+static int hf_atn_cpdlc_uM78LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM79PositionRouteClearance = -1; /* PositionRouteClearanceIndex */
+static int hf_atn_cpdlc_uM80RouteClearance = -1; /* RouteClearanceIndex */
+static int hf_atn_cpdlc_uM81ProcedureName = -1; /* ProcedureName */
+static int hf_atn_cpdlc_uM82DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_uM83PositionRouteClearance = -1; /* PositionRouteClearanceIndex */
+static int hf_atn_cpdlc_uM84PositionProcedureName = -1; /* PositionProcedureName */
+static int hf_atn_cpdlc_uM85RouteClearance = -1; /* RouteClearanceIndex */
+static int hf_atn_cpdlc_uM86PositionRouteClearance = -1; /* PositionRouteClearanceIndex */
+static int hf_atn_cpdlc_uM87Position = -1; /* Position */
+static int hf_atn_cpdlc_uM88PositionPosition = -1; /* PositionPosition */
+static int hf_atn_cpdlc_uM89TimePosition = -1; /* TimePosition */
+static int hf_atn_cpdlc_uM90LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM91HoldClearance = -1; /* HoldClearance */
+static int hf_atn_cpdlc_uM92PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM93Time = -1; /* Time */
+static int hf_atn_cpdlc_uM94DirectionDegrees = -1; /* DirectionDegrees */
+static int hf_atn_cpdlc_uM95DirectionDegrees = -1; /* DirectionDegrees */
+static int hf_atn_cpdlc_uM96NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM97PositionDegrees = -1; /* PositionDegrees */
+static int hf_atn_cpdlc_uM98DirectionDegrees = -1; /* DirectionDegrees */
+static int hf_atn_cpdlc_uM99ProcedureName = -1; /* ProcedureName */
+static int hf_atn_cpdlc_uM100TimeSpeed = -1; /* TimeSpeed */
+static int hf_atn_cpdlc_uM101PositionSpeed = -1; /* PositionSpeed */
+static int hf_atn_cpdlc_uM102LevelSpeed = -1; /* LevelSpeed */
+static int hf_atn_cpdlc_uM103TimeSpeedSpeed = -1; /* TimeSpeedSpeed */
+static int hf_atn_cpdlc_uM104PositionSpeedSpeed = -1; /* PositionSpeedSpeed */
+static int hf_atn_cpdlc_uM105LevelSpeedSpeed = -1; /* LevelSpeedSpeed */
+static int hf_atn_cpdlc_uM106Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM107NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM108Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM109Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM110SpeedSpeed = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_uM111Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM112Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM113Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM114Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM115Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM116NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM117UnitNameFrequency = -1; /* UnitNameFrequency */
+static int hf_atn_cpdlc_uM118PositionUnitNameFrequency = -1; /* PositionUnitNameFrequency */
+static int hf_atn_cpdlc_uM119TimeUnitNameFrequency = -1; /* TimeUnitNameFrequency */
+static int hf_atn_cpdlc_uM120UnitNameFrequency = -1; /* UnitNameFrequency */
+static int hf_atn_cpdlc_uM121PositionUnitNameFrequency = -1; /* PositionUnitNameFrequency */
+static int hf_atn_cpdlc_uM122TimeUnitNameFrequency = -1; /* TimeUnitNameFrequency */
+static int hf_atn_cpdlc_uM123Code = -1; /* Code */
+static int hf_atn_cpdlc_uM124NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM125NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM126NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM127NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM128Level = -1; /* Level */
+static int hf_atn_cpdlc_uM129Level = -1; /* Level */
+static int hf_atn_cpdlc_uM130Position = -1; /* Position */
+static int hf_atn_cpdlc_uM131NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM132NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM133NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM134SpeedTypeSpeedTypeSpeedType = -1; /* SpeedTypeSpeedTypeSpeedType */
+static int hf_atn_cpdlc_uM135NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM136NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM137NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM138NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM139NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM140NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM141NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM142NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM143NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM144NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM145NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM146NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM147NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM148Level = -1; /* Level */
+static int hf_atn_cpdlc_uM149LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM150LevelTime = -1; /* LevelTime */
+static int hf_atn_cpdlc_uM151Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM152DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_uM153Altimeter = -1; /* Altimeter */
+static int hf_atn_cpdlc_uM154NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM155Position = -1; /* Position */
+static int hf_atn_cpdlc_uM156NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM157Frequency = -1; /* Frequency */
+static int hf_atn_cpdlc_uM158AtisCode = -1; /* ATISCode */
+static int hf_atn_cpdlc_uM159ErrorInformation = -1; /* ErrorInformation */
+static int hf_atn_cpdlc_uM160Facility = -1; /* Facility */
+static int hf_atn_cpdlc_uM161NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM162NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM163FacilityDesignation = -1; /* FacilityDesignation */
+static int hf_atn_cpdlc_uM164NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM165NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM166TrafficType = -1; /* TrafficType */
+static int hf_atn_cpdlc_uM167NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM168NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM169FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM170FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM171VerticalRate = -1; /* VerticalRate */
+static int hf_atn_cpdlc_uM172VerticalRate = -1; /* VerticalRate */
+static int hf_atn_cpdlc_uM173VerticalRate = -1; /* VerticalRate */
+static int hf_atn_cpdlc_uM174VerticalRate = -1; /* VerticalRate */
+static int hf_atn_cpdlc_uM175Level = -1; /* Level */
+static int hf_atn_cpdlc_uM176NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM177NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM178NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM179NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM180LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_uM181ToFromPosition = -1; /* ToFromPosition */
+static int hf_atn_cpdlc_uM182NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM183FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM184TimeToFromPosition = -1; /* TimeToFromPosition */
+static int hf_atn_cpdlc_uM185PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM186PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_uM187FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM188PositionSpeed = -1; /* PositionSpeed */
+static int hf_atn_cpdlc_uM189Speed = -1; /* Speed */
+static int hf_atn_cpdlc_uM190Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_uM191NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM192LevelTime = -1; /* LevelTime */
+static int hf_atn_cpdlc_uM193NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM194FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM195FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM196FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM197FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM198FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM199FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM200NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM201NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM202NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM203FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM204FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM205FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM206FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM207FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM208FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_uM209LevelPosition = -1; /* LevelPosition */
+static int hf_atn_cpdlc_uM210Position = -1; /* Position */
+static int hf_atn_cpdlc_uM211NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM212FacilityDesignationATISCode = -1; /* FacilityDesignationATISCode */
+static int hf_atn_cpdlc_uM213FacilityDesignationAltimeter = -1; /* FacilityDesignationAltimeter */
+static int hf_atn_cpdlc_uM214RunwayRVR = -1; /* RunwayRVR */
+static int hf_atn_cpdlc_uM215DirectionDegrees = -1; /* DirectionDegrees */
+static int hf_atn_cpdlc_uM216NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM217NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM218NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM219Level = -1; /* Level */
+static int hf_atn_cpdlc_uM220Level = -1; /* Level */
+static int hf_atn_cpdlc_uM221Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_uM222NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM223NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM224NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM225NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM226Time = -1; /* Time */
+static int hf_atn_cpdlc_uM227NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM228Position = -1; /* Position */
+static int hf_atn_cpdlc_uM229NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM230NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM231NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM232NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM233NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM234NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM235NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM236NULL = -1; /* NULL */
+static int hf_atn_cpdlc_uM237NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM0NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM1NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM2NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM3NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM4NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM5NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM6Level = -1; /* Level */
+static int hf_atn_cpdlc_dM7LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_dM8Level = -1; /* Level */
+static int hf_atn_cpdlc_dM9Level = -1; /* Level */
+static int hf_atn_cpdlc_dM10Level = -1; /* Level */
+static int hf_atn_cpdlc_dM11PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_dM12PositionLevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_dM13TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_dM14TimeLevel = -1; /* TimeLevel */
+static int hf_atn_cpdlc_dM15DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM16PositionDistanceSpecifiedDirection = -1; /* PositionDistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM17TimeDistanceSpecifiedDirection = -1; /* TimeDistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM18Speed = -1; /* Speed */
+static int hf_atn_cpdlc_dM19SpeedSpeed = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_dM20NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM21Frequency = -1; /* Frequency */
+static int hf_atn_cpdlc_dM22Position = -1; /* Position */
+static int hf_atn_cpdlc_dM23ProcedureName = -1; /* ProcedureName */
+static int hf_atn_cpdlc_dM24RouteClearance = -1; /* RouteClearanceIndex */
+static int hf_atn_cpdlc_dM25ClearanceType = -1; /* ClearanceType */
+static int hf_atn_cpdlc_dM26PositionRouteClearance = -1; /* PositionRouteClearanceIndex */
+static int hf_atn_cpdlc_dM27DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM28Level = -1; /* Level */
+static int hf_atn_cpdlc_dM29Level = -1; /* Level */
+static int hf_atn_cpdlc_dM30Level = -1; /* Level */
+static int hf_atn_cpdlc_dM31Position = -1; /* Position */
+static int hf_atn_cpdlc_dM32Level = -1; /* Level */
+static int hf_atn_cpdlc_dM33Position = -1; /* Position */
+static int hf_atn_cpdlc_dM34Speed = -1; /* Speed */
+static int hf_atn_cpdlc_dM35Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_dM36Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_dM37Level = -1; /* Level */
+static int hf_atn_cpdlc_dM38Level = -1; /* Level */
+static int hf_atn_cpdlc_dM39Speed = -1; /* Speed */
+static int hf_atn_cpdlc_dM40RouteClearance = -1; /* RouteClearanceIndex */
+static int hf_atn_cpdlc_dM41NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM42Position = -1; /* Position */
+static int hf_atn_cpdlc_dM43Time = -1; /* Time */
+static int hf_atn_cpdlc_dM44Position = -1; /* Position */
+static int hf_atn_cpdlc_dM45Position = -1; /* Position */
+static int hf_atn_cpdlc_dM46Time = -1; /* Time */
+static int hf_atn_cpdlc_dM47Code = -1; /* Code */
+static int hf_atn_cpdlc_dM48PositionReport = -1; /* PositionReport */
+static int hf_atn_cpdlc_dM49Speed = -1; /* Speed */
+static int hf_atn_cpdlc_dM50SpeedSpeed = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_dM51NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM52NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM53NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM54Level = -1; /* Level */
+static int hf_atn_cpdlc_dM55NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM56NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM57RemainingFuelPersonsOnBoard = -1; /* RemainingFuelPersonsOnBoard */
+static int hf_atn_cpdlc_dM58NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM59PositionRouteClearance = -1; /* PositionRouteClearanceIndex */
+static int hf_atn_cpdlc_dM60DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM61Level = -1; /* Level */
+static int hf_atn_cpdlc_dM62ErrorInformation = -1; /* ErrorInformation */
+static int hf_atn_cpdlc_dM63NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM64FacilityDesignation = -1; /* FacilityDesignation */
+static int hf_atn_cpdlc_dM65NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM66NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM67FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM68FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM69NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM70Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_dM71Degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_dM72Level = -1; /* Level */
+static int hf_atn_cpdlc_dM73Versionnumber = -1; /* VersionNumber */
+static int hf_atn_cpdlc_dM74NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM75NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM76LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_dM77LevelLevel = -1; /* LevelLevel */
+static int hf_atn_cpdlc_dM78TimeDistanceToFromPosition = -1; /* TimeDistanceToFromPosition */
+static int hf_atn_cpdlc_dM79AtisCode = -1; /* ATISCode */
+static int hf_atn_cpdlc_dM80DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM81LevelTime = -1; /* LevelTime */
+static int hf_atn_cpdlc_dM82Level = -1; /* Level */
+static int hf_atn_cpdlc_dM83SpeedTime = -1; /* SpeedTime */
+static int hf_atn_cpdlc_dM84Speed = -1; /* Speed */
+static int hf_atn_cpdlc_dM85DistanceSpecifiedDirectionTime = -1; /* DistanceSpecifiedDirectionTime */
+static int hf_atn_cpdlc_dM86DistanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_dM87Level = -1; /* Level */
+static int hf_atn_cpdlc_dM88Level = -1; /* Level */
+static int hf_atn_cpdlc_dM89UnitnameFrequency = -1; /* UnitNameFrequency */
+static int hf_atn_cpdlc_dM90FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM91FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM92FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM93FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM94FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM95FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM96FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM97FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM98FreeText = -1; /* FreeText */
+static int hf_atn_cpdlc_dM99NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM100NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM101NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM102NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM103NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM104PositionTime = -1; /* PositionTime */
+static int hf_atn_cpdlc_dM105Airport = -1; /* Airport */
+static int hf_atn_cpdlc_dM106Level = -1; /* Level */
+static int hf_atn_cpdlc_dM107NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM108NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM109Time = -1; /* Time */
+static int hf_atn_cpdlc_dM110Position = -1; /* Position */
+static int hf_atn_cpdlc_dM111TimePosition = -1; /* TimePosition */
+static int hf_atn_cpdlc_dM112NULL = -1; /* NULL */
+static int hf_atn_cpdlc_dM113SpeedTypeSpeedTypeSpeedTypeSpeed = -1; /* SpeedTypeSpeedTypeSpeedTypeSpeed */
+static int hf_atn_cpdlc_altimeterEnglish = -1; /* AltimeterEnglish */
+static int hf_atn_cpdlc_altimeterMetric = -1; /* AltimeterMetric */
+static int hf_atn_cpdlc_position = -1; /* Position */
+static int hf_atn_cpdlc_aTWDistance = -1; /* ATWDistance */
+static int hf_atn_cpdlc_speed = -1; /* Speed */
+static int hf_atn_cpdlc_aTWLevels = -1; /* ATWLevelSequence */
+static int hf_atn_cpdlc_atw = -1; /* ATWLevelTolerance */
+static int hf_atn_cpdlc_level = -1; /* Level */
+static int hf_atn_cpdlc_ATWLevelSequence_item = -1; /* ATWLevel */
+static int hf_atn_cpdlc_atwDistanceTolerance = -1; /* ATWDistanceTolerance */
+static int hf_atn_cpdlc_distance = -1; /* Distance */
+static int hf_atn_cpdlc_Code_item = -1; /* CodeOctalDigit */
+static int hf_atn_cpdlc_time = -1; /* Time */
+static int hf_atn_cpdlc_timeTolerance = -1; /* TimeTolerance */
+static int hf_atn_cpdlc_year = -1; /* Year */
+static int hf_atn_cpdlc_month = -1; /* Month */
+static int hf_atn_cpdlc_day = -1; /* Day */
+static int hf_atn_cpdlc_date = -1; /* Date */
+static int hf_atn_cpdlc_timehhmmss = -1; /* Timehhmmss */
+static int hf_atn_cpdlc_degreesMagnetic = -1; /* DegreesMagnetic */
+static int hf_atn_cpdlc_degreesTrue = -1; /* DegreesTrue */
+static int hf_atn_cpdlc_aircraftFlightIdentification = -1; /* AircraftFlightIdentification */
+static int hf_atn_cpdlc_clearanceLimit = -1; /* Position */
+static int hf_atn_cpdlc_flightInformation = -1; /* FlightInformation */
+static int hf_atn_cpdlc_furtherInstructions = -1; /* FurtherInstructions */
+static int hf_atn_cpdlc_direction = -1; /* Direction */
+static int hf_atn_cpdlc_degrees = -1; /* Degrees */
+static int hf_atn_cpdlc_distanceNm = -1; /* DistanceNm */
+static int hf_atn_cpdlc_distanceKm = -1; /* DistanceKm */
+static int hf_atn_cpdlc_distanceSpecifiedNm = -1; /* DistanceSpecifiedNm */
+static int hf_atn_cpdlc_distanceSpecifiedKm = -1; /* DistanceSpecifiedKm */
+static int hf_atn_cpdlc_distanceSpecified = -1; /* DistanceSpecified */
+static int hf_atn_cpdlc_distanceSpecifiedDirection = -1; /* DistanceSpecifiedDirection */
+static int hf_atn_cpdlc_noFacility = -1; /* NULL */
+static int hf_atn_cpdlc_facilityDesignation = -1; /* FacilityDesignation */
+static int hf_atn_cpdlc_altimeter = -1; /* Altimeter */
+static int hf_atn_cpdlc_aTISCode = -1; /* ATISCode */
+static int hf_atn_cpdlc_fixname_name = -1; /* Fix */
+static int hf_atn_cpdlc_latlon = -1; /* LatitudeLongitude */
+static int hf_atn_cpdlc_routeOfFlight = -1; /* RouteInformation */
+static int hf_atn_cpdlc_levelsOfFlight = -1; /* LevelsOfFlight */
+static int hf_atn_cpdlc_routeAndLevels = -1; /* RouteAndLevels */
+static int hf_atn_cpdlc_frequencyhf = -1; /* Frequencyhf */
+static int hf_atn_cpdlc_frequencyvhf = -1; /* Frequencyvhf */
+static int hf_atn_cpdlc_frequencyuhf = -1; /* Frequencyuhf */
+static int hf_atn_cpdlc_frequencysatchannel = -1; /* Frequencysatchannel */
+static int hf_atn_cpdlc_code = -1; /* Code */
+static int hf_atn_cpdlc_frequencyDeparture = -1; /* UnitNameFrequency */
+static int hf_atn_cpdlc_clearanceExpiryTime = -1; /* Time */
+static int hf_atn_cpdlc_airportDeparture = -1; /* Airport */
+static int hf_atn_cpdlc_airportDestination = -1; /* Airport */
+static int hf_atn_cpdlc_timeDeparture = -1; /* TimeDeparture */
+static int hf_atn_cpdlc_runwayDeparture = -1; /* Runway */
+static int hf_atn_cpdlc_revisionNumber = -1; /* RevisionNumber */
+static int hf_atn_cpdlc_holdatwaypointspeedlow = -1; /* Speed */
+static int hf_atn_cpdlc_aTWlevel = -1; /* ATWLevel */
+static int hf_atn_cpdlc_holdatwaypointspeedhigh = -1; /* Speed */
+static int hf_atn_cpdlc_eFCtime = -1; /* Time */
+static int hf_atn_cpdlc_legtype = -1; /* LegType */
+static int hf_atn_cpdlc_legType = -1; /* LegType */
+static int hf_atn_cpdlc_fromSelection = -1; /* InterceptCourseFromSelection */
+static int hf_atn_cpdlc_publishedIdentifier = -1; /* PublishedIdentifier */
+static int hf_atn_cpdlc_latitudeLongitude = -1; /* LatitudeLongitude */
+static int hf_atn_cpdlc_placeBearingPlaceBearing = -1; /* PlaceBearingPlaceBearing */
+static int hf_atn_cpdlc_placeBearingDistance = -1; /* PlaceBearingDistance */
+static int hf_atn_cpdlc_latitudeType = -1; /* LatitudeType */
+static int hf_atn_cpdlc_latitudeDirection = -1; /* LatitudeDirection */
+static int hf_atn_cpdlc_latitudeWholeDegrees = -1; /* LatitudeWholeDegrees */
+static int hf_atn_cpdlc_minutesLatLon = -1; /* MinutesLatLon */
+static int hf_atn_cpdlc_latlonWholeMinutes = -1; /* LatLonWholeMinutes */
+static int hf_atn_cpdlc_secondsLatLon = -1; /* SecondsLatLon */
+static int hf_atn_cpdlc_latitude = -1; /* Latitude */
+static int hf_atn_cpdlc_longitude = -1; /* Longitude */
+static int hf_atn_cpdlc_latitudeDegrees = -1; /* LatitudeDegrees */
+static int hf_atn_cpdlc_latitudeDegreesMinutes = -1; /* LatitudeDegreesMinutes */
+static int hf_atn_cpdlc_latitudeDMS = -1; /* LatitudeDegreesMinutesSeconds */
+static int hf_atn_cpdlc_latitudeReportingPoints = -1; /* LatitudeReportingPoints */
+static int hf_atn_cpdlc_longitudeReportingPoints = -1; /* LongitudeReportingPoints */
+static int hf_atn_cpdlc_legDistanceEnglish = -1; /* LegDistanceEnglish */
+static int hf_atn_cpdlc_legDistanceMetric = -1; /* LegDistanceMetric */
+static int hf_atn_cpdlc_legDistance = -1; /* LegDistance */
+static int hf_atn_cpdlc_legTime = -1; /* LegTime */
+static int hf_atn_cpdlc_singleLevel = -1; /* LevelType */
+static int hf_atn_cpdlc_blockLevel = -1; /* SEQUENCE_SIZE_2_OF_LevelType */
+static int hf_atn_cpdlc_blockLevel_item = -1; /* LevelType */
+static int hf_atn_cpdlc_LevelLevel_item = -1; /* Level */
+static int hf_atn_cpdlc_procedureName = -1; /* ProcedureName */
+static int hf_atn_cpdlc_levelProcedureName = -1; /* LevelProcedureName */
+static int hf_atn_cpdlc_levelspeed_speed = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_speeds = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_levelFeet = -1; /* LevelFeet */
+static int hf_atn_cpdlc_levelMeters = -1; /* LevelMeters */
+static int hf_atn_cpdlc_levelFlightLevel = -1; /* LevelFlightLevel */
+static int hf_atn_cpdlc_levelFlightLevelMetric = -1; /* LevelFlightLevelMetric */
+static int hf_atn_cpdlc_longitudeType = -1; /* LongitudeType */
+static int hf_atn_cpdlc_longitudeDirection = -1; /* LongitudeDirection */
+static int hf_atn_cpdlc_longitudeWholeDegrees = -1; /* LongitudeWholeDegrees */
+static int hf_atn_cpdlc_latLonWholeMinutes = -1; /* LatLonWholeMinutes */
+static int hf_atn_cpdlc_longitudeDegrees = -1; /* LongitudeDegrees */
+static int hf_atn_cpdlc_longitudeDegreesMinutes = -1; /* LongitudeDegreesMinutes */
+static int hf_atn_cpdlc_longitudeDMS = -1; /* LongitudeDegreesMinutesSeconds */
+static int hf_atn_cpdlc_navaid_name = -1; /* NavaidName */
+static int hf_atn_cpdlc_PlaceBearingPlaceBearing_item = -1; /* PlaceBearing */
+static int hf_atn_cpdlc_fixName = -1; /* FixName */
+static int hf_atn_cpdlc_navaid = -1; /* Navaid */
+static int hf_atn_cpdlc_airport = -1; /* Airport */
+static int hf_atn_cpdlc_levels = -1; /* LevelLevel */
+static int hf_atn_cpdlc_positionlevel = -1; /* PositionLevel */
+static int hf_atn_cpdlc_PositionPosition_item = -1; /* Position */
+static int hf_atn_cpdlc_positioncurrent = -1; /* Position */
+static int hf_atn_cpdlc_timeatpositioncurrent = -1; /* Time */
+static int hf_atn_cpdlc_fixnext = -1; /* Position */
+static int hf_atn_cpdlc_timeetaatfixnext = -1; /* Time */
+static int hf_atn_cpdlc_fixnextplusone = -1; /* Position */
+static int hf_atn_cpdlc_timeetaatdestination = -1; /* Time */
+static int hf_atn_cpdlc_remainingFuel = -1; /* RemainingFuel */
+static int hf_atn_cpdlc_temperature = -1; /* Temperature */
+static int hf_atn_cpdlc_winds = -1; /* Winds */
+static int hf_atn_cpdlc_turbulence = -1; /* Turbulence */
+static int hf_atn_cpdlc_icing = -1; /* Icing */
+static int hf_atn_cpdlc_speedground = -1; /* SpeedGround */
+static int hf_atn_cpdlc_verticalChange = -1; /* VerticalChange */
+static int hf_atn_cpdlc_trackAngle = -1; /* Degrees */
+static int hf_atn_cpdlc_heading = -1; /* Degrees */
+static int hf_atn_cpdlc_humidity = -1; /* Humidity */
+static int hf_atn_cpdlc_reportedWaypointPosition = -1; /* Position */
+static int hf_atn_cpdlc_reportedWaypointTime = -1; /* Time */
+static int hf_atn_cpdlc_reportedWaypointLevel = -1; /* Level */
+static int hf_atn_cpdlc_routeClearanceIndex = -1; /* RouteClearanceIndex */
+static int hf_atn_cpdlc_positionTime = -1; /* PositionTime */
+static int hf_atn_cpdlc_times = -1; /* TimeTime */
+static int hf_atn_cpdlc_unitname = -1; /* UnitName */
+static int hf_atn_cpdlc_frequency = -1; /* Frequency */
+static int hf_atn_cpdlc_type = -1; /* ProcedureType */
+static int hf_atn_cpdlc_procedure = -1; /* Procedure */
+static int hf_atn_cpdlc_transition = -1; /* ProcedureTransition */
+static int hf_atn_cpdlc_personsOnBoard = -1; /* PersonsOnBoard */
+static int hf_atn_cpdlc_latLonReportingPoints = -1; /* LatLonReportingPoints */
+static int hf_atn_cpdlc_degreeIncrement = -1; /* DegreeIncrement */
+static int hf_atn_cpdlc_procedureDeparture = -1; /* ProcedureName */
+static int hf_atn_cpdlc_runwayArrival = -1; /* Runway */
+static int hf_atn_cpdlc_procedureApproach = -1; /* ProcedureName */
+static int hf_atn_cpdlc_procedureArrival = -1; /* ProcedureName */
+static int hf_atn_cpdlc_routeInformations = -1; /* SEQUENCE_SIZE_1_128_OF_RouteInformation */
+static int hf_atn_cpdlc_routeInformations_item = -1; /* RouteInformation */
+static int hf_atn_cpdlc_routeInformationAdditional = -1; /* RouteInformationAdditional */
+static int hf_atn_cpdlc_aTSRouteDesignator = -1; /* ATSRouteDesignator */
+static int hf_atn_cpdlc_aTWAlongTrackWaypoints = -1; /* SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint */
+static int hf_atn_cpdlc_aTWAlongTrackWaypoints_item = -1; /* ATWAlongTrackWaypoint */
+static int hf_atn_cpdlc_reportingpoints = -1; /* ReportingPoints */
+static int hf_atn_cpdlc_interceptCourseFroms = -1; /* SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom */
+static int hf_atn_cpdlc_interceptCourseFroms_item = -1; /* InterceptCourseFrom */
+static int hf_atn_cpdlc_holdAtWaypoints = -1; /* SEQUENCE_SIZE_1_8_OF_Holdatwaypoint */
+static int hf_atn_cpdlc_holdAtWaypoints_item = -1; /* Holdatwaypoint */
+static int hf_atn_cpdlc_waypointSpeedLevels = -1; /* SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel */
+static int hf_atn_cpdlc_waypointSpeedLevels_item = -1; /* WaypointSpeedLevel */
+static int hf_atn_cpdlc_rTARequiredTimeArrivals = -1; /* SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival */
+static int hf_atn_cpdlc_rTARequiredTimeArrivals_item = -1; /* RTARequiredTimeArrival */
+static int hf_atn_cpdlc_rTATime = -1; /* RTATime */
+static int hf_atn_cpdlc_rTATolerance = -1; /* RTATolerance */
+static int hf_atn_cpdlc_runway_direction = -1; /* RunwayDirection */
+static int hf_atn_cpdlc_configuration = -1; /* RunwayConfiguration */
+static int hf_atn_cpdlc_runway = -1; /* Runway */
+static int hf_atn_cpdlc_rVR = -1; /* RVR */
+static int hf_atn_cpdlc_rVRFeet = -1; /* RVRFeet */
+static int hf_atn_cpdlc_rVRMeters = -1; /* RVRMeters */
+static int hf_atn_cpdlc_speedIndicated = -1; /* SpeedIndicated */
+static int hf_atn_cpdlc_speedIndicatedMetric = -1; /* SpeedIndicatedMetric */
+static int hf_atn_cpdlc_speedTrue = -1; /* SpeedTrue */
+static int hf_atn_cpdlc_speedTrueMetric = -1; /* SpeedTrueMetric */
+static int hf_atn_cpdlc_speedGround = -1; /* SpeedGround */
+static int hf_atn_cpdlc_speedGroundMetric = -1; /* SpeedGroundMetric */
+static int hf_atn_cpdlc_speedMach = -1; /* SpeedMach */
+static int hf_atn_cpdlc_SpeedSpeed_item = -1; /* Speed */
+static int hf_atn_cpdlc_SpeedTypeSpeedTypeSpeedType_item = -1; /* SpeedType */
+static int hf_atn_cpdlc_speedTypes = -1; /* SpeedTypeSpeedTypeSpeedType */
+static int hf_atn_cpdlc_hours = -1; /* TimeHours */
+static int hf_atn_cpdlc_minutes = -1; /* TimeMinutes */
+static int hf_atn_cpdlc_timeDepartureAllocated = -1; /* Time */
+static int hf_atn_cpdlc_timeDepartureControlled = -1; /* ControlledTime */
+static int hf_atn_cpdlc_timeDepartureClearanceExpected = -1; /* Time */
+static int hf_atn_cpdlc_departureMinimumInterval = -1; /* DepartureMinimumInterval */
+static int hf_atn_cpdlc_tofrom = -1; /* ToFrom */
+static int hf_atn_cpdlc_hoursminutes = -1; /* Time */
+static int hf_atn_cpdlc_seconds = -1; /* TimeSeconds */
+static int hf_atn_cpdlc_unitName = -1; /* UnitName */
+static int hf_atn_cpdlc_timeposition = -1; /* TimePosition */
+static int hf_atn_cpdlc_levelspeed = -1; /* LevelSpeed */
+static int hf_atn_cpdlc_speedspeed = -1; /* SpeedSpeed */
+static int hf_atn_cpdlc_TimeTime_item = -1; /* Time */
+static int hf_atn_cpdlc_toFrom = -1; /* ToFrom */
+static int hf_atn_cpdlc_facilityName = -1; /* FacilityName */
+static int hf_atn_cpdlc_facilityFunction = -1; /* FacilityFunction */
+static int hf_atn_cpdlc_vertical_direction = -1; /* VerticalDirection */
+static int hf_atn_cpdlc_rate = -1; /* VerticalRate */
+static int hf_atn_cpdlc_verticalRateEnglish = -1; /* VerticalRateEnglish */
+static int hf_atn_cpdlc_verticalRateMetric = -1; /* VerticalRateMetric */
+static int hf_atn_cpdlc_winds_direction = -1; /* WindDirection */
+static int hf_atn_cpdlc_winds_speed = -1; /* WindSpeed */
+static int hf_atn_cpdlc_windSpeedEnglish = -1; /* WindSpeedEnglish */
+static int hf_atn_cpdlc_windSpeedMetric = -1; /* WindSpeedMetric */
+
+/*--- End of included file: packet-atn-cpdlc-hf.c ---*/
+#line 87 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+
+
+/*--- Included file: packet-atn-cpdlc-ett.c ---*/
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-ett.c"
+static gint ett_atn_cpdlc_GroundPDUs = -1;
+static gint ett_atn_cpdlc_UplinkMessage = -1;
+static gint ett_atn_cpdlc_AircraftPDUs = -1;
+static gint ett_atn_cpdlc_StartDownMessage = -1;
+static gint ett_atn_cpdlc_DownlinkMessage = -1;
+static gint ett_atn_cpdlc_ProtectedGroundPDUs = -1;
+static gint ett_atn_cpdlc_ProtectedUplinkMessage = -1;
+static gint ett_atn_cpdlc_ATCForwardMessage = -1;
+static gint ett_atn_cpdlc_ForwardHeader = -1;
+static gint ett_atn_cpdlc_ForwardMessage = -1;
+static gint ett_atn_cpdlc_ProtectedAircraftPDUs = -1;
+static gint ett_atn_cpdlc_ProtectedStartDownMessage = -1;
+static gint ett_atn_cpdlc_ProtectedDownlinkMessage = -1;
+static gint ett_atn_cpdlc_ATCUplinkMessage = -1;
+static gint ett_atn_cpdlc_ATCUplinkMessageData = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId = -1;
+static gint ett_atn_cpdlc_T_atcuplinkmessagedata_constraineddata = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance = -1;
+static gint ett_atn_cpdlc_ATCDownlinkMessage = -1;
+static gint ett_atn_cpdlc_ATCDownlinkMessageData = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId = -1;
+static gint ett_atn_cpdlc_T_atcdownlinkmessagedata_constraineddata = -1;
+static gint ett_atn_cpdlc_ATCMessageHeader = -1;
+static gint ett_atn_cpdlc_ATCUplinkMsgElementId = -1;
+static gint ett_atn_cpdlc_ATCDownlinkMsgElementId = -1;
+static gint ett_atn_cpdlc_Altimeter = -1;
+static gint ett_atn_cpdlc_ATWAlongTrackWaypoint = -1;
+static gint ett_atn_cpdlc_ATWLevel = -1;
+static gint ett_atn_cpdlc_ATWLevelSequence = -1;
+static gint ett_atn_cpdlc_ATWDistance = -1;
+static gint ett_atn_cpdlc_Code = -1;
+static gint ett_atn_cpdlc_ControlledTime = -1;
+static gint ett_atn_cpdlc_Date = -1;
+static gint ett_atn_cpdlc_DateTimeGroup = -1;
+static gint ett_atn_cpdlc_Degrees = -1;
+static gint ett_atn_cpdlc_DepartureClearance = -1;
+static gint ett_atn_cpdlc_DirectionDegrees = -1;
+static gint ett_atn_cpdlc_Distance = -1;
+static gint ett_atn_cpdlc_DistanceSpecified = -1;
+static gint ett_atn_cpdlc_DistanceSpecifiedDirection = -1;
+static gint ett_atn_cpdlc_DistanceSpecifiedDirectionTime = -1;
+static gint ett_atn_cpdlc_Facility = -1;
+static gint ett_atn_cpdlc_FacilityDesignationAltimeter = -1;
+static gint ett_atn_cpdlc_FacilityDesignationATISCode = -1;
+static gint ett_atn_cpdlc_FixName = -1;
+static gint ett_atn_cpdlc_FlightInformation = -1;
+static gint ett_atn_cpdlc_Frequency = -1;
+static gint ett_atn_cpdlc_FurtherInstructions = -1;
+static gint ett_atn_cpdlc_Holdatwaypoint = -1;
+static gint ett_atn_cpdlc_HoldClearance = -1;
+static gint ett_atn_cpdlc_InterceptCourseFrom = -1;
+static gint ett_atn_cpdlc_InterceptCourseFromSelection = -1;
+static gint ett_atn_cpdlc_Latitude = -1;
+static gint ett_atn_cpdlc_LatitudeDegreesMinutes = -1;
+static gint ett_atn_cpdlc_LatitudeDegreesMinutesSeconds = -1;
+static gint ett_atn_cpdlc_LatitudeLongitude = -1;
+static gint ett_atn_cpdlc_LatitudeReportingPoints = -1;
+static gint ett_atn_cpdlc_LatitudeType = -1;
+static gint ett_atn_cpdlc_LatLonReportingPoints = -1;
+static gint ett_atn_cpdlc_LegDistance = -1;
+static gint ett_atn_cpdlc_LegType = -1;
+static gint ett_atn_cpdlc_Level = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_2_OF_LevelType = -1;
+static gint ett_atn_cpdlc_LevelLevel = -1;
+static gint ett_atn_cpdlc_LevelPosition = -1;
+static gint ett_atn_cpdlc_LevelProcedureName = -1;
+static gint ett_atn_cpdlc_LevelsOfFlight = -1;
+static gint ett_atn_cpdlc_LevelSpeed = -1;
+static gint ett_atn_cpdlc_LevelSpeedSpeed = -1;
+static gint ett_atn_cpdlc_LevelTime = -1;
+static gint ett_atn_cpdlc_LevelType = -1;
+static gint ett_atn_cpdlc_Longitude = -1;
+static gint ett_atn_cpdlc_LongitudeDegreesMinutes = -1;
+static gint ett_atn_cpdlc_LongitudeDegreesMinutesSeconds = -1;
+static gint ett_atn_cpdlc_LongitudeReportingPoints = -1;
+static gint ett_atn_cpdlc_LongitudeType = -1;
+static gint ett_atn_cpdlc_Navaid = -1;
+static gint ett_atn_cpdlc_PlaceBearing = -1;
+static gint ett_atn_cpdlc_PlaceBearingDistance = -1;
+static gint ett_atn_cpdlc_PlaceBearingPlaceBearing = -1;
+static gint ett_atn_cpdlc_Position = -1;
+static gint ett_atn_cpdlc_PositionDegrees = -1;
+static gint ett_atn_cpdlc_PositionDistanceSpecifiedDirection = -1;
+static gint ett_atn_cpdlc_PositionLevel = -1;
+static gint ett_atn_cpdlc_PositionLevelLevel = -1;
+static gint ett_atn_cpdlc_PositionLevelSpeed = -1;
+static gint ett_atn_cpdlc_PositionPosition = -1;
+static gint ett_atn_cpdlc_PositionProcedureName = -1;
+static gint ett_atn_cpdlc_PositionReport = -1;
+static gint ett_atn_cpdlc_PositionRouteClearanceIndex = -1;
+static gint ett_atn_cpdlc_PositionSpeed = -1;
+static gint ett_atn_cpdlc_PositionSpeedSpeed = -1;
+static gint ett_atn_cpdlc_PositionTime = -1;
+static gint ett_atn_cpdlc_PositionTimeLevel = -1;
+static gint ett_atn_cpdlc_PositionTimeTime = -1;
+static gint ett_atn_cpdlc_PositionUnitNameFrequency = -1;
+static gint ett_atn_cpdlc_ProcedureName = -1;
+static gint ett_atn_cpdlc_PublishedIdentifier = -1;
+static gint ett_atn_cpdlc_RemainingFuelPersonsOnBoard = -1;
+static gint ett_atn_cpdlc_ReportingPoints = -1;
+static gint ett_atn_cpdlc_RouteAndLevels = -1;
+static gint ett_atn_cpdlc_RouteClearance = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_128_OF_RouteInformation = -1;
+static gint ett_atn_cpdlc_RouteInformation = -1;
+static gint ett_atn_cpdlc_RouteInformationAdditional = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_Holdatwaypoint = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel = -1;
+static gint ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival = -1;
+static gint ett_atn_cpdlc_RTARequiredTimeArrival = -1;
+static gint ett_atn_cpdlc_RTATime = -1;
+static gint ett_atn_cpdlc_Runway = -1;
+static gint ett_atn_cpdlc_RunwayRVR = -1;
+static gint ett_atn_cpdlc_RVR = -1;
+static gint ett_atn_cpdlc_Speed = -1;
+static gint ett_atn_cpdlc_SpeedSpeed = -1;
+static gint ett_atn_cpdlc_SpeedTime = -1;
+static gint ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedType = -1;
+static gint ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedTypeSpeed = -1;
+static gint ett_atn_cpdlc_Time = -1;
+static gint ett_atn_cpdlc_TimeLevel = -1;
+static gint ett_atn_cpdlc_TimeDeparture = -1;
+static gint ett_atn_cpdlc_TimeDistanceSpecifiedDirection = -1;
+static gint ett_atn_cpdlc_TimeDistanceToFromPosition = -1;
+static gint ett_atn_cpdlc_Timehhmmss = -1;
+static gint ett_atn_cpdlc_TimeUnitNameFrequency = -1;
+static gint ett_atn_cpdlc_TimePosition = -1;
+static gint ett_atn_cpdlc_TimePositionLevel = -1;
+static gint ett_atn_cpdlc_TimePositionLevelSpeed = -1;
+static gint ett_atn_cpdlc_TimeSpeed = -1;
+static gint ett_atn_cpdlc_TimeSpeedSpeed = -1;
+static gint ett_atn_cpdlc_TimeTime = -1;
+static gint ett_atn_cpdlc_TimeToFromPosition = -1;
+static gint ett_atn_cpdlc_ToFromPosition = -1;
+static gint ett_atn_cpdlc_UnitName = -1;
+static gint ett_atn_cpdlc_UnitNameFrequency = -1;
+static gint ett_atn_cpdlc_VerticalChange = -1;
+static gint ett_atn_cpdlc_VerticalRate = -1;
+static gint ett_atn_cpdlc_WaypointSpeedLevel = -1;
+static gint ett_atn_cpdlc_Winds = -1;
+static gint ett_atn_cpdlc_WindSpeed = -1;
+
+/*--- End of included file: packet-atn-cpdlc-ett.c ---*/
+#line 89 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+static gint ett_atn_cpdlc = -1;
+
+
+/*--- Included file: packet-atn-cpdlc-fn.c ---*/
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-fn.c"
+
+static const value_string atn_cpdlc_CPDLCUserAbortReason_vals[] = {
+ { 0, "undefined" },
+ { 1, "no-message-identification-numbers-available" },
+ { 2, "duplicate-message-identification-numbers" },
+ { 3, "no-longer-next-data-authority" },
+ { 4, "current-data-authority-abort" },
+ { 5, "commanded-termination" },
+ { 6, "invalid-response" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_CPDLCUserAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 7, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_CPDLCProviderAbortReason_vals[] = {
+ { 0, "timer-expired" },
+ { 1, "undefined-error" },
+ { 2, "invalid-PDU" },
+ { 3, "protocol-error" },
+ { 4, "communication-service-error" },
+ { 5, "communication-service-failure" },
+ { 6, "invalid-QOS-parameter" },
+ { 7, "expected-PDU-missing" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_CPDLCProviderAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_MsgIdentificationNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 63U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_MsgReferenceNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 63U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Year(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1996U, 2095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Month(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 12U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Day(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 31U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Date_sequence[] = {
+ { &hf_atn_cpdlc_year , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Year },
+ { &hf_atn_cpdlc_month , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Month },
+ { &hf_atn_cpdlc_day , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Day },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Date(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Date, Date_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_TimeHours(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 23U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_TimeMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Time_sequence[] = {
+ { &hf_atn_cpdlc_hours , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeHours },
+ { &hf_atn_cpdlc_minutes , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeMinutes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Time, Time_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_TimeSeconds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Timehhmmss_sequence[] = {
+ { &hf_atn_cpdlc_hoursminutes, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_seconds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeSeconds },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Timehhmmss(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Timehhmmss, Timehhmmss_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t DateTimeGroup_sequence[] = {
+ { &hf_atn_cpdlc_date , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Date },
+ { &hf_atn_cpdlc_timehhmmss, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Timehhmmss },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DateTimeGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DateTimeGroup, DateTimeGroup_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LogicalAck_vals[] = {
+ { 0, "required" },
+ { 1, "notRequired" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_LogicalAck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCMessageHeader_sequence[] = {
+ { &hf_atn_cpdlc_messageIdNumber, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_MsgIdentificationNumber },
+ { &hf_atn_cpdlc_messageRefNumber, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_MsgReferenceNumber },
+ { &hf_atn_cpdlc_dateTime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DateTimeGroup },
+ { &hf_atn_cpdlc_logicalAck, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_LogicalAck },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCMessageHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCMessageHeader, ATCMessageHeader_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LevelFeet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -60, 7000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LevelMeters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -30, 25000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LevelFlightLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 30U, 700U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LevelFlightLevelMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 100U, 2500U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LevelType_vals[] = {
+ { 0, "levelFeet" },
+ { 1, "levelMeters" },
+ { 2, "levelFlightLevel" },
+ { 3, "levelFlightLevelMetric" },
+ { 0, NULL }
+};
+
+static const per_choice_t LevelType_choice[] = {
+ { 0, &hf_atn_cpdlc_levelFeet , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelFeet },
+ { 1, &hf_atn_cpdlc_levelMeters, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelMeters },
+ { 2, &hf_atn_cpdlc_levelFlightLevel, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelFlightLevel },
+ { 3, &hf_atn_cpdlc_levelFlightLevelMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelFlightLevelMetric },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelType, LevelType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_2_OF_LevelType_sequence_of[1] = {
+ { &hf_atn_cpdlc_blockLevel_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LevelType },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_2_OF_LevelType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_2_OF_LevelType, SEQUENCE_SIZE_2_OF_LevelType_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Level_vals[] = {
+ { 0, "singleLevel" },
+ { 1, "blockLevel" },
+ { 0, NULL }
+};
+
+static const per_choice_t Level_choice[] = {
+ { 0, &hf_atn_cpdlc_singleLevel, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelType },
+ { 1, &hf_atn_cpdlc_blockLevel, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SEQUENCE_SIZE_2_OF_LevelType },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Level(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Level, Level_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Fix(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LatitudeDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 90000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LatitudeWholeDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 89U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_MinutesLatLon(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 5999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t LatitudeDegreesMinutes_sequence[] = {
+ { &hf_atn_cpdlc_latitudeWholeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeWholeDegrees },
+ { &hf_atn_cpdlc_minutesLatLon, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_MinutesLatLon },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatitudeDegreesMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatitudeDegreesMinutes, LatitudeDegreesMinutes_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LatLonWholeMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SecondsLatLon(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t LatitudeDegreesMinutesSeconds_sequence[] = {
+ { &hf_atn_cpdlc_latitudeWholeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeWholeDegrees },
+ { &hf_atn_cpdlc_latlonWholeMinutes, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatLonWholeMinutes },
+ { &hf_atn_cpdlc_secondsLatLon, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SecondsLatLon },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatitudeDegreesMinutesSeconds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatitudeDegreesMinutesSeconds, LatitudeDegreesMinutesSeconds_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LatitudeType_vals[] = {
+ { 0, "latitudeDegrees" },
+ { 1, "latitudeDegreesMinutes" },
+ { 2, "latitudeDMS" },
+ { 0, NULL }
+};
+
+static const per_choice_t LatitudeType_choice[] = {
+ { 0, &hf_atn_cpdlc_latitudeDegrees, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeDegrees },
+ { 1, &hf_atn_cpdlc_latitudeDegreesMinutes, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeDegreesMinutes },
+ { 2, &hf_atn_cpdlc_latitudeDMS, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeDegreesMinutesSeconds },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatitudeType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatitudeType, LatitudeType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LatitudeDirection_vals[] = {
+ { 0, "north" },
+ { 1, "south" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_LatitudeDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Latitude_sequence[] = {
+ { &hf_atn_cpdlc_latitudeType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeType },
+ { &hf_atn_cpdlc_latitudeDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeDirection },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Latitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Latitude, Latitude_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LongitudeDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 180000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LongitudeWholeDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 179U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t LongitudeDegreesMinutes_sequence[] = {
+ { &hf_atn_cpdlc_longitudeWholeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeWholeDegrees },
+ { &hf_atn_cpdlc_minutesLatLon, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_MinutesLatLon },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LongitudeDegreesMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LongitudeDegreesMinutes, LongitudeDegreesMinutes_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LongitudeDegreesMinutesSeconds_sequence[] = {
+ { &hf_atn_cpdlc_longitudeWholeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeWholeDegrees },
+ { &hf_atn_cpdlc_latLonWholeMinutes, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatLonWholeMinutes },
+ { &hf_atn_cpdlc_secondsLatLon, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SecondsLatLon },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LongitudeDegreesMinutesSeconds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LongitudeDegreesMinutesSeconds, LongitudeDegreesMinutesSeconds_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LongitudeType_vals[] = {
+ { 0, "longitudeDegrees" },
+ { 1, "longitudeDegreesMinutes" },
+ { 2, "longitudeDMS" },
+ { 0, NULL }
+};
+
+static const per_choice_t LongitudeType_choice[] = {
+ { 0, &hf_atn_cpdlc_longitudeDegrees, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LongitudeDegrees },
+ { 1, &hf_atn_cpdlc_longitudeDegreesMinutes, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LongitudeDegreesMinutes },
+ { 2, &hf_atn_cpdlc_longitudeDMS, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LongitudeDegreesMinutesSeconds },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LongitudeType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LongitudeType, LongitudeType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LongitudeDirection_vals[] = {
+ { 0, "east" },
+ { 1, "west" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_LongitudeDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Longitude_sequence[] = {
+ { &hf_atn_cpdlc_longitudeType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeType },
+ { &hf_atn_cpdlc_longitudeDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeDirection },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Longitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Longitude, Longitude_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LatitudeLongitude_sequence[] = {
+ { &hf_atn_cpdlc_latitude , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Latitude },
+ { &hf_atn_cpdlc_longitude , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Longitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatitudeLongitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatitudeLongitude, LatitudeLongitude_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t FixName_sequence[] = {
+ { &hf_atn_cpdlc_fixname_name, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Fix },
+ { &hf_atn_cpdlc_latlon , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_LatitudeLongitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_FixName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_FixName, FixName_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_NavaidName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 4, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Navaid_sequence[] = {
+ { &hf_atn_cpdlc_navaid_name, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_NavaidName },
+ { &hf_atn_cpdlc_latlon , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_LatitudeLongitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Navaid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Navaid, Navaid_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Airport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 4, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_PublishedIdentifier_vals[] = {
+ { 0, "fixName" },
+ { 1, "navaid" },
+ { 0, NULL }
+};
+
+static const per_choice_t PublishedIdentifier_choice[] = {
+ { 0, &hf_atn_cpdlc_fixName , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_FixName },
+ { 1, &hf_atn_cpdlc_navaid , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Navaid },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PublishedIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PublishedIdentifier, PublishedIdentifier_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DegreesMagnetic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 360U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DegreesTrue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 360U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Degrees_vals[] = {
+ { 0, "degreesMagnetic" },
+ { 1, "degreesTrue" },
+ { 0, NULL }
+};
+
+static const per_choice_t Degrees_choice[] = {
+ { 0, &hf_atn_cpdlc_degreesMagnetic, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DegreesMagnetic },
+ { 1, &hf_atn_cpdlc_degreesTrue, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DegreesTrue },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Degrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Degrees, Degrees_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DistanceNm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 9999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DistanceKm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 8000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Distance_vals[] = {
+ { 0, "distanceNm" },
+ { 1, "distanceKm" },
+ { 0, NULL }
+};
+
+static const per_choice_t Distance_choice[] = {
+ { 0, &hf_atn_cpdlc_distanceNm, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DistanceNm },
+ { 1, &hf_atn_cpdlc_distanceKm, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DistanceKm },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Distance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Distance, Distance_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t PlaceBearingDistance_sequence[] = {
+ { &hf_atn_cpdlc_publishedIdentifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PublishedIdentifier },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { &hf_atn_cpdlc_distance , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Distance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PlaceBearingDistance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PlaceBearingDistance, PlaceBearingDistance_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Position_vals[] = {
+ { 0, "fixName" },
+ { 1, "navaid" },
+ { 2, "airport" },
+ { 3, "latitudeLongitude" },
+ { 4, "placeBearingDistance" },
+ { 0, NULL }
+};
+
+static const per_choice_t Position_choice[] = {
+ { 0, &hf_atn_cpdlc_fixName , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_FixName },
+ { 1, &hf_atn_cpdlc_navaid , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Navaid },
+ { 2, &hf_atn_cpdlc_airport , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Airport },
+ { 3, &hf_atn_cpdlc_latitudeLongitude, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeLongitude },
+ { 4, &hf_atn_cpdlc_placeBearingDistance, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PlaceBearingDistance },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Position(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Position, Position_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeLevel_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeLevel, TimeLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionLevel_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionLevel, PositionLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelTime_sequence[] = {
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelTime, LevelTime_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelPosition_sequence[] = {
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelPosition, LevelPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelLevel_sequence_of[1] = {
+ { &hf_atn_cpdlc_LevelLevel_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+};
+
+static int
+dissect_atn_cpdlc_LevelLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelLevel, LevelLevel_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionLevelLevel_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_levels , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LevelLevel },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionLevelLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionLevelLevel, PositionLevelLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionTime_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionTime, PositionTime_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeTime_sequence_of[1] = {
+ { &hf_atn_cpdlc_TimeTime_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+};
+
+static int
+dissect_atn_cpdlc_TimeTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeTime, TimeTime_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionTimeTime_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_times , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeTime },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionTimeTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionTimeTime, PositionTimeTime_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedIndicated(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 400U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedIndicatedMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 800U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedTrue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 2000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedTrueMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedGround(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -50, 2000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedGroundMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -100, 4000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_SpeedMach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 500U, 4000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Speed_vals[] = {
+ { 0, "speedIndicated" },
+ { 1, "speedIndicatedMetric" },
+ { 2, "speedTrue" },
+ { 3, "speedTrueMetric" },
+ { 4, "speedGround" },
+ { 5, "speedGroundMetric" },
+ { 6, "speedMach" },
+ { 0, NULL }
+};
+
+static const per_choice_t Speed_choice[] = {
+ { 0, &hf_atn_cpdlc_speedIndicated, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedIndicated },
+ { 1, &hf_atn_cpdlc_speedIndicatedMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedIndicatedMetric },
+ { 2, &hf_atn_cpdlc_speedTrue , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedTrue },
+ { 3, &hf_atn_cpdlc_speedTrueMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedTrueMetric },
+ { 4, &hf_atn_cpdlc_speedGround, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedGround },
+ { 5, &hf_atn_cpdlc_speedGroundMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedGroundMetric },
+ { 6, &hf_atn_cpdlc_speedMach , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_SpeedMach },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Speed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Speed, Speed_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionSpeed_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionSpeed, PositionSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionTimeLevel_sequence[] = {
+ { &hf_atn_cpdlc_positionTime, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PositionTime },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionTimeLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionTimeLevel, PositionTimeLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionLevelSpeed_sequence[] = {
+ { &hf_atn_cpdlc_positionlevel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PositionLevel },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionLevelSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionLevelSpeed, PositionLevelSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimePosition_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimePosition, TimePosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimePositionLevel_sequence[] = {
+ { &hf_atn_cpdlc_timeposition, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimePosition },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimePositionLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimePositionLevel, TimePositionLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SpeedSpeed_sequence_of[1] = {
+ { &hf_atn_cpdlc_SpeedSpeed_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+};
+
+static int
+dissect_atn_cpdlc_SpeedSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SpeedSpeed, SpeedSpeed_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelSpeed_sequence[] = {
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_levelspeed_speed, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelSpeed, LevelSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimePositionLevelSpeed_sequence[] = {
+ { &hf_atn_cpdlc_timeposition, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimePosition },
+ { &hf_atn_cpdlc_levelspeed, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LevelSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimePositionLevelSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimePositionLevelSpeed, TimePositionLevelSpeed_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DistanceSpecifiedNm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 250U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DistanceSpecifiedKm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 500U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_DistanceSpecified_vals[] = {
+ { 0, "distanceSpecifiedNm" },
+ { 1, "distanceSpecifiedKm" },
+ { 0, NULL }
+};
+
+static const per_choice_t DistanceSpecified_choice[] = {
+ { 0, &hf_atn_cpdlc_distanceSpecifiedNm, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DistanceSpecifiedNm },
+ { 1, &hf_atn_cpdlc_distanceSpecifiedKm, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_DistanceSpecifiedKm },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DistanceSpecified(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DistanceSpecified, DistanceSpecified_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Direction_vals[] = {
+ { 0, "left" },
+ { 1, "right" },
+ { 2, "eitherSide" },
+ { 3, "north" },
+ { 4, "south" },
+ { 5, "east" },
+ { 6, "west" },
+ { 7, "northEast" },
+ { 8, "northWest" },
+ { 9, "southEast" },
+ { 10, "southWest" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_Direction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 11, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t DistanceSpecifiedDirection_sequence[] = {
+ { &hf_atn_cpdlc_distanceSpecified, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DistanceSpecified },
+ { &hf_atn_cpdlc_direction , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Direction },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DistanceSpecifiedDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DistanceSpecifiedDirection, DistanceSpecifiedDirection_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionDistanceSpecifiedDirection_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_distanceSpecifiedDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionDistanceSpecifiedDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionDistanceSpecifiedDirection, PositionDistanceSpecifiedDirection_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeDistanceSpecifiedDirection_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_distanceSpecifiedDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeDistanceSpecifiedDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeDistanceSpecifiedDirection, TimeDistanceSpecifiedDirection_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_AircraftFlightIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 8, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t PlaceBearing_sequence[] = {
+ { &hf_atn_cpdlc_publishedIdentifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PublishedIdentifier },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PlaceBearing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PlaceBearing, PlaceBearing_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PlaceBearingPlaceBearing_sequence_of[1] = {
+ { &hf_atn_cpdlc_PlaceBearingPlaceBearing_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PlaceBearing },
+};
+
+static int
+dissect_atn_cpdlc_PlaceBearingPlaceBearing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PlaceBearingPlaceBearing, PlaceBearingPlaceBearing_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_ATSRouteDesignator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 7, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_RouteInformation_vals[] = {
+ { 0, "publishedIdentifier" },
+ { 1, "latitudeLongitude" },
+ { 2, "placeBearingPlaceBearing" },
+ { 3, "placeBearingDistance" },
+ { 4, "aTSRouteDesignator" },
+ { 0, NULL }
+};
+
+static const per_choice_t RouteInformation_choice[] = {
+ { 0, &hf_atn_cpdlc_publishedIdentifier, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PublishedIdentifier },
+ { 1, &hf_atn_cpdlc_latitudeLongitude, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeLongitude },
+ { 2, &hf_atn_cpdlc_placeBearingPlaceBearing, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PlaceBearingPlaceBearing },
+ { 3, &hf_atn_cpdlc_placeBearingDistance, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PlaceBearingDistance },
+ { 4, &hf_atn_cpdlc_aTSRouteDesignator, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_ATSRouteDesignator },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RouteInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RouteInformation, RouteInformation_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ProcedureType_vals[] = {
+ { 0, "arrival" },
+ { 1, "approach" },
+ { 2, "departure" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ProcedureType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Procedure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 20, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_ProcedureTransition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ProcedureName_sequence[] = {
+ { &hf_atn_cpdlc_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ProcedureType },
+ { &hf_atn_cpdlc_procedure , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Procedure },
+ { &hf_atn_cpdlc_transition, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ProcedureTransition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProcedureName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProcedureName, ProcedureName_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelProcedureName_sequence[] = {
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_procedureName, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ProcedureName },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelProcedureName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelProcedureName, LevelProcedureName_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LevelsOfFlight_vals[] = {
+ { 0, "level" },
+ { 1, "procedureName" },
+ { 2, "levelProcedureName" },
+ { 0, NULL }
+};
+
+static const per_choice_t LevelsOfFlight_choice[] = {
+ { 0, &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Level },
+ { 1, &hf_atn_cpdlc_procedureName, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_ProcedureName },
+ { 2, &hf_atn_cpdlc_levelProcedureName, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelProcedureName },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelsOfFlight(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelsOfFlight, LevelsOfFlight_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t RouteAndLevels_sequence[] = {
+ { &hf_atn_cpdlc_routeOfFlight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RouteInformation },
+ { &hf_atn_cpdlc_levelsOfFlight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LevelsOfFlight },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RouteAndLevels(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RouteAndLevels, RouteAndLevels_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_FlightInformation_vals[] = {
+ { 0, "routeOfFlight" },
+ { 1, "levelsOfFlight" },
+ { 2, "routeAndLevels" },
+ { 0, NULL }
+};
+
+static const per_choice_t FlightInformation_choice[] = {
+ { 0, &hf_atn_cpdlc_routeOfFlight, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_RouteInformation },
+ { 1, &hf_atn_cpdlc_levelsOfFlight, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LevelsOfFlight },
+ { 2, &hf_atn_cpdlc_routeAndLevels, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_RouteAndLevels },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_FlightInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_FlightInformation, FlightInformation_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_CodeOctalDigit(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Code_sequence_of[1] = {
+ { &hf_atn_cpdlc_Code_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_CodeOctalDigit },
+};
+
+static int
+dissect_atn_cpdlc_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Code, Code_sequence_of,
+ 4, 4, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_FacilityDesignation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 8, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_FacilityName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,3, 18, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_FacilityFunction_vals[] = {
+ { 0, "center" },
+ { 1, "approach" },
+ { 2, "tower" },
+ { 3, "final" },
+ { 4, "groundControl" },
+ { 5, "clearanceDelivery" },
+ { 6, "departure" },
+ { 7, "control" },
+ { 8, "radio" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_FacilityFunction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 9, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t UnitName_sequence[] = {
+ { &hf_atn_cpdlc_facilityDesignation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_FacilityDesignation },
+ { &hf_atn_cpdlc_facilityName, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_FacilityName },
+ { &hf_atn_cpdlc_facilityFunction, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_FacilityFunction },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_UnitName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_UnitName, UnitName_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Frequencyhf(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 2850U, 28000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Frequencyvhf(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 23600U, 27398U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Frequencyuhf(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 9000U, 15999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Frequencysatchannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_NumericString(tvb, offset, actx, tree, hf_index,
+ 12, 12, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Frequency_vals[] = {
+ { 0, "frequencyhf" },
+ { 1, "frequencyvhf" },
+ { 2, "frequencyuhf" },
+ { 3, "frequencysatchannel" },
+ { 0, NULL }
+};
+
+static const per_choice_t Frequency_choice[] = {
+ { 0, &hf_atn_cpdlc_frequencyhf, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Frequencyhf },
+ { 1, &hf_atn_cpdlc_frequencyvhf, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Frequencyvhf },
+ { 2, &hf_atn_cpdlc_frequencyuhf, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Frequencyuhf },
+ { 3, &hf_atn_cpdlc_frequencysatchannel, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_Frequencysatchannel },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Frequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Frequency, Frequency_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t UnitNameFrequency_sequence[] = {
+ { &hf_atn_cpdlc_unitName , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_UnitName },
+ { &hf_atn_cpdlc_frequency , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Frequency },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_UnitNameFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_UnitNameFrequency, UnitNameFrequency_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_TimeTolerance_vals[] = {
+ { 0, "at" },
+ { 1, "atorafter" },
+ { 2, "atorbefore" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_TimeTolerance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ControlledTime_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_timeTolerance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeTolerance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ControlledTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ControlledTime, ControlledTime_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DepartureMinimumInterval(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 150U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeDeparture_sequence[] = {
+ { &hf_atn_cpdlc_timeDepartureAllocated, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_timeDepartureControlled, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ControlledTime },
+ { &hf_atn_cpdlc_timeDepartureClearanceExpected, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_departureMinimumInterval, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_DepartureMinimumInterval },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeDeparture(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeDeparture, TimeDeparture_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RunwayDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 36U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_RunwayConfiguration_vals[] = {
+ { 0, "left" },
+ { 1, "right" },
+ { 2, "center" },
+ { 3, "none" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_RunwayConfiguration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Runway_sequence[] = {
+ { &hf_atn_cpdlc_runway_direction, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RunwayDirection },
+ { &hf_atn_cpdlc_configuration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RunwayConfiguration },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Runway(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Runway, Runway_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RevisionNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 16U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_ATISCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 1, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t FurtherInstructions_sequence[] = {
+ { &hf_atn_cpdlc_code , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Code },
+ { &hf_atn_cpdlc_frequencyDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_UnitNameFrequency },
+ { &hf_atn_cpdlc_clearanceExpiryTime, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_airportDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Airport },
+ { &hf_atn_cpdlc_airportDestination, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Airport },
+ { &hf_atn_cpdlc_timeDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_TimeDeparture },
+ { &hf_atn_cpdlc_runwayDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Runway },
+ { &hf_atn_cpdlc_revisionNumber, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_RevisionNumber },
+ { &hf_atn_cpdlc_aTISCode , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ATISCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_FurtherInstructions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_FurtherInstructions, FurtherInstructions_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t DepartureClearance_sequence[] = {
+ { &hf_atn_cpdlc_aircraftFlightIdentification, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_AircraftFlightIdentification },
+ { &hf_atn_cpdlc_clearanceLimit, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_flightInformation, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_FlightInformation },
+ { &hf_atn_cpdlc_furtherInstructions, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_FurtherInstructions },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DepartureClearance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DepartureClearance, DepartureClearance_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionPosition_sequence_of[1] = {
+ { &hf_atn_cpdlc_PositionPosition_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+};
+
+static int
+dissect_atn_cpdlc_PositionPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionPosition, PositionPosition_sequence_of,
+ 2, 2, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RouteClearanceIndex(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 2U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionRouteClearanceIndex_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_routeClearanceIndex, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RouteClearanceIndex },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionRouteClearanceIndex(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionRouteClearanceIndex, PositionRouteClearanceIndex_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionProcedureName_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_procedureName, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ProcedureName },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionProcedureName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionProcedureName, PositionProcedureName_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LegDistanceEnglish(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 50U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LegDistanceMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 128U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LegDistance_vals[] = {
+ { 0, "legDistanceEnglish" },
+ { 1, "legDistanceMetric" },
+ { 0, NULL }
+};
+
+static const per_choice_t LegDistance_choice[] = {
+ { 0, &hf_atn_cpdlc_legDistanceEnglish, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LegDistanceEnglish },
+ { 1, &hf_atn_cpdlc_legDistanceMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LegDistanceMetric },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LegDistance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LegDistance, LegDistance_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_LegTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 10U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LegType_vals[] = {
+ { 0, "legDistance" },
+ { 1, "legTime" },
+ { 0, NULL }
+};
+
+static const per_choice_t LegType_choice[] = {
+ { 0, &hf_atn_cpdlc_legDistance, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LegDistance },
+ { 1, &hf_atn_cpdlc_legTime , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LegTime },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LegType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LegType, LegType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t HoldClearance_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { &hf_atn_cpdlc_direction , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Direction },
+ { &hf_atn_cpdlc_legType , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_LegType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_HoldClearance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_HoldClearance, HoldClearance_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t DirectionDegrees_sequence[] = {
+ { &hf_atn_cpdlc_direction , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Direction },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DirectionDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DirectionDegrees, DirectionDegrees_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionDegrees_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionDegrees(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionDegrees, PositionDegrees_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeSpeed_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeSpeed, TimeSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeSpeedSpeed_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_speedspeed, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeSpeedSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeSpeedSpeed, TimeSpeedSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionSpeedSpeed_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_speeds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionSpeedSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionSpeedSpeed, PositionSpeedSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LevelSpeedSpeed_sequence[] = {
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_speeds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LevelSpeedSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LevelSpeedSpeed, LevelSpeedSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionUnitNameFrequency_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_unitname , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_UnitName },
+ { &hf_atn_cpdlc_frequency , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Frequency },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionUnitNameFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionUnitNameFrequency, PositionUnitNameFrequency_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeUnitNameFrequency_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_unitName , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_UnitName },
+ { &hf_atn_cpdlc_frequency , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Frequency },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeUnitNameFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeUnitNameFrequency, TimeUnitNameFrequency_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_SpeedType_vals[] = {
+ { 0, "noneSpecified" },
+ { 1, "indicated" },
+ { 2, "true" },
+ { 3, "ground" },
+ { 4, "mach" },
+ { 5, "approach" },
+ { 6, "cruise" },
+ { 7, "minimum" },
+ { 8, "maximum" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_SpeedType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 9, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t SpeedTypeSpeedTypeSpeedType_sequence_of[1] = {
+ { &hf_atn_cpdlc_SpeedTypeSpeedTypeSpeedType_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedType },
+};
+
+static int
+dissect_atn_cpdlc_SpeedTypeSpeedTypeSpeedType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedType, SpeedTypeSpeedTypeSpeedType_sequence_of,
+ 3, 3, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_AltimeterEnglish(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 2200U, 3200U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_AltimeterMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 7500U, 12500U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Altimeter_vals[] = {
+ { 0, "altimeterEnglish" },
+ { 1, "altimeterMetric" },
+ { 0, NULL }
+};
+
+static const per_choice_t Altimeter_choice[] = {
+ { 0, &hf_atn_cpdlc_altimeterEnglish, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_AltimeterEnglish },
+ { 1, &hf_atn_cpdlc_altimeterMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_AltimeterMetric },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Altimeter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Altimeter, Altimeter_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ErrorInformation_vals[] = {
+ { 0, "unrecognizedMsgReferenceNumber" },
+ { 1, "logicalAcknowledgmentNotAccepted" },
+ { 2, "insufficientResources" },
+ { 3, "invalidMessageElementCombination" },
+ { 4, "invalidMessageElement" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ErrorInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 5, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Facility_vals[] = {
+ { 0, "noFacility" },
+ { 1, "facilityDesignation" },
+ { 0, NULL }
+};
+
+static const per_choice_t Facility_choice[] = {
+ { 0, &hf_atn_cpdlc_noFacility, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_NULL },
+ { 1, &hf_atn_cpdlc_facilityDesignation, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_FacilityDesignation },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Facility(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Facility, Facility_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_TrafficType_vals[] = {
+ { 0, "noneSpecified" },
+ { 1, "oppositeDirection" },
+ { 2, "sameDirection" },
+ { 3, "converging" },
+ { 4, "crossing" },
+ { 5, "diverging" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_TrafficType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 6, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_FreeText(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 256, FALSE, ia5alpha , 127, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_VerticalRateEnglish(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_VerticalRateMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_VerticalRate_vals[] = {
+ { 0, "verticalRateEnglish" },
+ { 1, "verticalRateMetric" },
+ { 0, NULL }
+};
+
+static const per_choice_t VerticalRate_choice[] = {
+ { 0, &hf_atn_cpdlc_verticalRateEnglish, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_VerticalRateEnglish },
+ { 1, &hf_atn_cpdlc_verticalRateMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_VerticalRateMetric },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_VerticalRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_VerticalRate, VerticalRate_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ToFrom_vals[] = {
+ { 0, "to" },
+ { 1, "from" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ToFrom(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ToFromPosition_sequence[] = {
+ { &hf_atn_cpdlc_toFrom , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ToFrom },
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ToFromPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ToFromPosition, ToFromPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeToFromPosition_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_tofrom , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ToFrom },
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeToFromPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeToFromPosition, TimeToFromPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t FacilityDesignationATISCode_sequence[] = {
+ { &hf_atn_cpdlc_facilityDesignation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_FacilityDesignation },
+ { &hf_atn_cpdlc_aTISCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATISCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_FacilityDesignationATISCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_FacilityDesignationATISCode, FacilityDesignationATISCode_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t FacilityDesignationAltimeter_sequence[] = {
+ { &hf_atn_cpdlc_facilityDesignation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_FacilityDesignation },
+ { &hf_atn_cpdlc_altimeter , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Altimeter },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_FacilityDesignationAltimeter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_FacilityDesignationAltimeter, FacilityDesignationAltimeter_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RVRFeet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 6100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RVRMeters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1500U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_RVR_vals[] = {
+ { 0, "rVRFeet" },
+ { 1, "rVRMeters" },
+ { 0, NULL }
+};
+
+static const per_choice_t RVR_choice[] = {
+ { 0, &hf_atn_cpdlc_rVRFeet , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_RVRFeet },
+ { 1, &hf_atn_cpdlc_rVRMeters , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_RVRMeters },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RVR(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RVR, RVR_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t RunwayRVR_sequence[] = {
+ { &hf_atn_cpdlc_runway , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Runway },
+ { &hf_atn_cpdlc_rVR , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RVR },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RunwayRVR(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RunwayRVR, RunwayRVR_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ATCUplinkMsgElementId_vals[] = {
+ { 0, "uM0NULL" },
+ { 1, "uM1NULL" },
+ { 2, "uM2NULL" },
+ { 3, "uM3NULL" },
+ { 4, "uM4NULL" },
+ { 5, "uM5NULL" },
+ { 6, "uM6Level" },
+ { 7, "uM7Time" },
+ { 8, "uM8Position" },
+ { 9, "uM9Time" },
+ { 10, "uM10Position" },
+ { 11, "uM11Time" },
+ { 12, "uM12Position" },
+ { 13, "uM13TimeLevel" },
+ { 14, "uM14PositionLevel" },
+ { 15, "uM15TimeLevel" },
+ { 16, "uM16PositionLevel" },
+ { 17, "uM17TimeLevel" },
+ { 18, "uM18PositionLevel" },
+ { 19, "uM19Level" },
+ { 20, "uM20Level" },
+ { 21, "uM21TimeLevel" },
+ { 22, "uM22PositionLevel" },
+ { 23, "uM23Level" },
+ { 24, "uM24TimeLevel" },
+ { 25, "uM25PositionLevel" },
+ { 26, "uM26LevelTime" },
+ { 27, "uM27LevelPosition" },
+ { 28, "uM28LevelTime" },
+ { 29, "uM29LevelPosition" },
+ { 30, "uM30LevelLevel" },
+ { 31, "uM31LevelLevel" },
+ { 32, "uM32LevelLevel" },
+ { 33, "uM33NULL" },
+ { 34, "uM34Level" },
+ { 35, "uM35Level" },
+ { 36, "uM36Level" },
+ { 37, "uM37Level" },
+ { 38, "uM38Level" },
+ { 39, "uM39Level" },
+ { 40, "uM40NULL" },
+ { 41, "uM41NULL" },
+ { 42, "uM42PositionLevel" },
+ { 43, "uM43PositionLevel" },
+ { 44, "uM44PositionLevel" },
+ { 45, "uM45PositionLevel" },
+ { 46, "uM46PositionLevel" },
+ { 47, "uM47PositionLevel" },
+ { 48, "uM48PositionLevel" },
+ { 49, "uM49PositionLevel" },
+ { 50, "uM50PositionLevelLevel" },
+ { 51, "uM51PositionTime" },
+ { 52, "uM52PositionTime" },
+ { 53, "uM53PositionTime" },
+ { 54, "uM54PositionTimeTime" },
+ { 55, "uM55PositionSpeed" },
+ { 56, "uM56PositionSpeed" },
+ { 57, "uM57PositionSpeed" },
+ { 58, "uM58PositionTimeLevel" },
+ { 59, "uM59PositionTimeLevel" },
+ { 60, "uM60PositionTimeLevel" },
+ { 61, "uM61PositionLevelSpeed" },
+ { 62, "uM62TimePositionLevel" },
+ { 63, "uM63TimePositionLevelSpeed" },
+ { 64, "uM64DistanceSpecifiedDirection" },
+ { 65, "uM65PositionDistanceSpecifiedDirection" },
+ { 66, "uM66TimeDistanceSpecifiedDirection" },
+ { 67, "uM67NULL" },
+ { 68, "uM68Position" },
+ { 69, "uM69Time" },
+ { 70, "uM70Position" },
+ { 71, "uM71Time" },
+ { 72, "uM72NULL" },
+ { 73, "uM73DepartureClearance" },
+ { 74, "uM74Position" },
+ { 75, "uM75Position" },
+ { 76, "uM76TimePosition" },
+ { 77, "uM77PositionPosition" },
+ { 78, "uM78LevelPosition" },
+ { 79, "uM79PositionRouteClearance" },
+ { 80, "uM80RouteClearance" },
+ { 81, "uM81ProcedureName" },
+ { 82, "uM82DistanceSpecifiedDirection" },
+ { 83, "uM83PositionRouteClearance" },
+ { 84, "uM84PositionProcedureName" },
+ { 85, "uM85RouteClearance" },
+ { 86, "uM86PositionRouteClearance" },
+ { 87, "uM87Position" },
+ { 88, "uM88PositionPosition" },
+ { 89, "uM89TimePosition" },
+ { 90, "uM90LevelPosition" },
+ { 91, "uM91HoldClearance" },
+ { 92, "uM92PositionLevel" },
+ { 93, "uM93Time" },
+ { 94, "uM94DirectionDegrees" },
+ { 95, "uM95DirectionDegrees" },
+ { 96, "uM96NULL" },
+ { 97, "uM97PositionDegrees" },
+ { 98, "uM98DirectionDegrees" },
+ { 99, "uM99ProcedureName" },
+ { 100, "uM100TimeSpeed" },
+ { 101, "uM101PositionSpeed" },
+ { 102, "uM102LevelSpeed" },
+ { 103, "uM103TimeSpeedSpeed" },
+ { 104, "uM104PositionSpeedSpeed" },
+ { 105, "uM105LevelSpeedSpeed" },
+ { 106, "uM106Speed" },
+ { 107, "uM107NULL" },
+ { 108, "uM108Speed" },
+ { 109, "uM109Speed" },
+ { 110, "uM110SpeedSpeed" },
+ { 111, "uM111Speed" },
+ { 112, "uM112Speed" },
+ { 113, "uM113Speed" },
+ { 114, "uM114Speed" },
+ { 115, "uM115Speed" },
+ { 116, "uM116NULL" },
+ { 117, "uM117UnitNameFrequency" },
+ { 118, "uM118PositionUnitNameFrequency" },
+ { 119, "uM119TimeUnitNameFrequency" },
+ { 120, "uM120UnitNameFrequency" },
+ { 121, "uM121PositionUnitNameFrequency" },
+ { 122, "uM122TimeUnitNameFrequency" },
+ { 123, "uM123Code" },
+ { 124, "uM124NULL" },
+ { 125, "uM125NULL" },
+ { 126, "uM126NULL" },
+ { 127, "uM127NULL" },
+ { 128, "uM128Level" },
+ { 129, "uM129Level" },
+ { 130, "uM130Position" },
+ { 131, "uM131NULL" },
+ { 132, "uM132NULL" },
+ { 133, "uM133NULL" },
+ { 134, "uM134SpeedTypeSpeedTypeSpeedType" },
+ { 135, "uM135NULL" },
+ { 136, "uM136NULL" },
+ { 137, "uM137NULL" },
+ { 138, "uM138NULL" },
+ { 139, "uM139NULL" },
+ { 140, "uM140NULL" },
+ { 141, "uM141NULL" },
+ { 142, "uM142NULL" },
+ { 143, "uM143NULL" },
+ { 144, "uM144NULL" },
+ { 145, "uM145NULL" },
+ { 146, "uM146NULL" },
+ { 147, "uM147NULL" },
+ { 148, "uM148Level" },
+ { 149, "uM149LevelPosition" },
+ { 150, "uM150LevelTime" },
+ { 151, "uM151Speed" },
+ { 152, "uM152DistanceSpecifiedDirection" },
+ { 153, "uM153Altimeter" },
+ { 154, "uM154NULL" },
+ { 155, "uM155Position" },
+ { 156, "uM156NULL" },
+ { 157, "uM157Frequency" },
+ { 158, "uM158AtisCode" },
+ { 159, "uM159ErrorInformation" },
+ { 160, "uM160Facility" },
+ { 161, "uM161NULL" },
+ { 162, "uM162NULL" },
+ { 163, "uM163FacilityDesignation" },
+ { 164, "uM164NULL" },
+ { 165, "uM165NULL" },
+ { 166, "uM166TrafficType" },
+ { 167, "uM167NULL" },
+ { 168, "uM168NULL" },
+ { 169, "uM169FreeText" },
+ { 170, "uM170FreeText" },
+ { 171, "uM171VerticalRate" },
+ { 172, "uM172VerticalRate" },
+ { 173, "uM173VerticalRate" },
+ { 174, "uM174VerticalRate" },
+ { 175, "uM175Level" },
+ { 176, "uM176NULL" },
+ { 177, "uM177NULL" },
+ { 178, "uM178NULL" },
+ { 179, "uM179NULL" },
+ { 180, "uM180LevelLevel" },
+ { 181, "uM181ToFromPosition" },
+ { 182, "uM182NULL" },
+ { 183, "uM183FreeText" },
+ { 184, "uM184TimeToFromPosition" },
+ { 185, "uM185PositionLevel" },
+ { 186, "uM186PositionLevel" },
+ { 187, "uM187FreeText" },
+ { 188, "uM188PositionSpeed" },
+ { 189, "uM189Speed" },
+ { 190, "uM190Degrees" },
+ { 191, "uM191NULL" },
+ { 192, "uM192LevelTime" },
+ { 193, "uM193NULL" },
+ { 194, "uM194FreeText" },
+ { 195, "uM195FreeText" },
+ { 196, "uM196FreeText" },
+ { 197, "uM197FreeText" },
+ { 198, "uM198FreeText" },
+ { 199, "uM199FreeText" },
+ { 200, "uM200NULL" },
+ { 201, "uM201NULL" },
+ { 202, "uM202NULL" },
+ { 203, "uM203FreeText" },
+ { 204, "uM204FreeText" },
+ { 205, "uM205FreeText" },
+ { 206, "uM206FreeText" },
+ { 207, "uM207FreeText" },
+ { 208, "uM208FreeText" },
+ { 209, "uM209LevelPosition" },
+ { 210, "uM210Position" },
+ { 211, "uM211NULL" },
+ { 212, "uM212FacilityDesignationATISCode" },
+ { 213, "uM213FacilityDesignationAltimeter" },
+ { 214, "uM214RunwayRVR" },
+ { 215, "uM215DirectionDegrees" },
+ { 216, "uM216NULL" },
+ { 217, "uM217NULL" },
+ { 218, "uM218NULL" },
+ { 219, "uM219Level" },
+ { 220, "uM220Level" },
+ { 221, "uM221Degrees" },
+ { 222, "uM222NULL" },
+ { 223, "uM223NULL" },
+ { 224, "uM224NULL" },
+ { 225, "uM225NULL" },
+ { 226, "uM226Time" },
+ { 227, "uM227NULL" },
+ { 228, "uM228Position" },
+ { 229, "uM229NULL" },
+ { 230, "uM230NULL" },
+ { 231, "uM231NULL" },
+ { 232, "uM232NULL" },
+ { 233, "uM233NULL" },
+ { 234, "uM234NULL" },
+ { 235, "uM235NULL" },
+ { 236, "uM236NULL" },
+ { 237, "uM237NULL" },
+ { 0, NULL }
+};
+
+static const per_choice_t ATCUplinkMsgElementId_choice[] = {
+ { 0, &hf_atn_cpdlc_uM0NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 1, &hf_atn_cpdlc_uM1NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 2, &hf_atn_cpdlc_uM2NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 3, &hf_atn_cpdlc_uM3NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 4, &hf_atn_cpdlc_uM4NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 5, &hf_atn_cpdlc_uM5NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 6, &hf_atn_cpdlc_uM6Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 7, &hf_atn_cpdlc_uM7Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 8, &hf_atn_cpdlc_uM8Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 9, &hf_atn_cpdlc_uM9Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 10, &hf_atn_cpdlc_uM10Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 11, &hf_atn_cpdlc_uM11Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 12, &hf_atn_cpdlc_uM12Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 13, &hf_atn_cpdlc_uM13TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 14, &hf_atn_cpdlc_uM14PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 15, &hf_atn_cpdlc_uM15TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 16, &hf_atn_cpdlc_uM16PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 17, &hf_atn_cpdlc_uM17TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 18, &hf_atn_cpdlc_uM18PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 19, &hf_atn_cpdlc_uM19Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 20, &hf_atn_cpdlc_uM20Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 21, &hf_atn_cpdlc_uM21TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 22, &hf_atn_cpdlc_uM22PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 23, &hf_atn_cpdlc_uM23Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 24, &hf_atn_cpdlc_uM24TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 25, &hf_atn_cpdlc_uM25PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 26, &hf_atn_cpdlc_uM26LevelTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelTime },
+ { 27, &hf_atn_cpdlc_uM27LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 28, &hf_atn_cpdlc_uM28LevelTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelTime },
+ { 29, &hf_atn_cpdlc_uM29LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 30, &hf_atn_cpdlc_uM30LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 31, &hf_atn_cpdlc_uM31LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 32, &hf_atn_cpdlc_uM32LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 33, &hf_atn_cpdlc_uM33NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 34, &hf_atn_cpdlc_uM34Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 35, &hf_atn_cpdlc_uM35Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 36, &hf_atn_cpdlc_uM36Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 37, &hf_atn_cpdlc_uM37Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 38, &hf_atn_cpdlc_uM38Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 39, &hf_atn_cpdlc_uM39Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 40, &hf_atn_cpdlc_uM40NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 41, &hf_atn_cpdlc_uM41NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 42, &hf_atn_cpdlc_uM42PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 43, &hf_atn_cpdlc_uM43PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 44, &hf_atn_cpdlc_uM44PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 45, &hf_atn_cpdlc_uM45PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 46, &hf_atn_cpdlc_uM46PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 47, &hf_atn_cpdlc_uM47PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 48, &hf_atn_cpdlc_uM48PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 49, &hf_atn_cpdlc_uM49PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 50, &hf_atn_cpdlc_uM50PositionLevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevelLevel },
+ { 51, &hf_atn_cpdlc_uM51PositionTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTime },
+ { 52, &hf_atn_cpdlc_uM52PositionTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTime },
+ { 53, &hf_atn_cpdlc_uM53PositionTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTime },
+ { 54, &hf_atn_cpdlc_uM54PositionTimeTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTimeTime },
+ { 55, &hf_atn_cpdlc_uM55PositionSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeed },
+ { 56, &hf_atn_cpdlc_uM56PositionSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeed },
+ { 57, &hf_atn_cpdlc_uM57PositionSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeed },
+ { 58, &hf_atn_cpdlc_uM58PositionTimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTimeLevel },
+ { 59, &hf_atn_cpdlc_uM59PositionTimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTimeLevel },
+ { 60, &hf_atn_cpdlc_uM60PositionTimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTimeLevel },
+ { 61, &hf_atn_cpdlc_uM61PositionLevelSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevelSpeed },
+ { 62, &hf_atn_cpdlc_uM62TimePositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimePositionLevel },
+ { 63, &hf_atn_cpdlc_uM63TimePositionLevelSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimePositionLevelSpeed },
+ { 64, &hf_atn_cpdlc_uM64DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 65, &hf_atn_cpdlc_uM65PositionDistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionDistanceSpecifiedDirection },
+ { 66, &hf_atn_cpdlc_uM66TimeDistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeDistanceSpecifiedDirection },
+ { 67, &hf_atn_cpdlc_uM67NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 68, &hf_atn_cpdlc_uM68Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 69, &hf_atn_cpdlc_uM69Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 70, &hf_atn_cpdlc_uM70Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 71, &hf_atn_cpdlc_uM71Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 72, &hf_atn_cpdlc_uM72NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 73, &hf_atn_cpdlc_uM73DepartureClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DepartureClearance },
+ { 74, &hf_atn_cpdlc_uM74Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 75, &hf_atn_cpdlc_uM75Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 76, &hf_atn_cpdlc_uM76TimePosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimePosition },
+ { 77, &hf_atn_cpdlc_uM77PositionPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionPosition },
+ { 78, &hf_atn_cpdlc_uM78LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 79, &hf_atn_cpdlc_uM79PositionRouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionRouteClearanceIndex },
+ { 80, &hf_atn_cpdlc_uM80RouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RouteClearanceIndex },
+ { 81, &hf_atn_cpdlc_uM81ProcedureName, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProcedureName },
+ { 82, &hf_atn_cpdlc_uM82DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 83, &hf_atn_cpdlc_uM83PositionRouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionRouteClearanceIndex },
+ { 84, &hf_atn_cpdlc_uM84PositionProcedureName, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionProcedureName },
+ { 85, &hf_atn_cpdlc_uM85RouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RouteClearanceIndex },
+ { 86, &hf_atn_cpdlc_uM86PositionRouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionRouteClearanceIndex },
+ { 87, &hf_atn_cpdlc_uM87Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 88, &hf_atn_cpdlc_uM88PositionPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionPosition },
+ { 89, &hf_atn_cpdlc_uM89TimePosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimePosition },
+ { 90, &hf_atn_cpdlc_uM90LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 91, &hf_atn_cpdlc_uM91HoldClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_HoldClearance },
+ { 92, &hf_atn_cpdlc_uM92PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 93, &hf_atn_cpdlc_uM93Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 94, &hf_atn_cpdlc_uM94DirectionDegrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DirectionDegrees },
+ { 95, &hf_atn_cpdlc_uM95DirectionDegrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DirectionDegrees },
+ { 96, &hf_atn_cpdlc_uM96NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 97, &hf_atn_cpdlc_uM97PositionDegrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionDegrees },
+ { 98, &hf_atn_cpdlc_uM98DirectionDegrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DirectionDegrees },
+ { 99, &hf_atn_cpdlc_uM99ProcedureName, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProcedureName },
+ { 100, &hf_atn_cpdlc_uM100TimeSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeSpeed },
+ { 101, &hf_atn_cpdlc_uM101PositionSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeed },
+ { 102, &hf_atn_cpdlc_uM102LevelSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelSpeed },
+ { 103, &hf_atn_cpdlc_uM103TimeSpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeSpeedSpeed },
+ { 104, &hf_atn_cpdlc_uM104PositionSpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeedSpeed },
+ { 105, &hf_atn_cpdlc_uM105LevelSpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelSpeedSpeed },
+ { 106, &hf_atn_cpdlc_uM106Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 107, &hf_atn_cpdlc_uM107NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 108, &hf_atn_cpdlc_uM108Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 109, &hf_atn_cpdlc_uM109Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 110, &hf_atn_cpdlc_uM110SpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedSpeed },
+ { 111, &hf_atn_cpdlc_uM111Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 112, &hf_atn_cpdlc_uM112Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 113, &hf_atn_cpdlc_uM113Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 114, &hf_atn_cpdlc_uM114Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 115, &hf_atn_cpdlc_uM115Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 116, &hf_atn_cpdlc_uM116NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 117, &hf_atn_cpdlc_uM117UnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_UnitNameFrequency },
+ { 118, &hf_atn_cpdlc_uM118PositionUnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionUnitNameFrequency },
+ { 119, &hf_atn_cpdlc_uM119TimeUnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeUnitNameFrequency },
+ { 120, &hf_atn_cpdlc_uM120UnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_UnitNameFrequency },
+ { 121, &hf_atn_cpdlc_uM121PositionUnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionUnitNameFrequency },
+ { 122, &hf_atn_cpdlc_uM122TimeUnitNameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeUnitNameFrequency },
+ { 123, &hf_atn_cpdlc_uM123Code , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Code },
+ { 124, &hf_atn_cpdlc_uM124NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 125, &hf_atn_cpdlc_uM125NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 126, &hf_atn_cpdlc_uM126NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 127, &hf_atn_cpdlc_uM127NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 128, &hf_atn_cpdlc_uM128Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 129, &hf_atn_cpdlc_uM129Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 130, &hf_atn_cpdlc_uM130Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 131, &hf_atn_cpdlc_uM131NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 132, &hf_atn_cpdlc_uM132NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 133, &hf_atn_cpdlc_uM133NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 134, &hf_atn_cpdlc_uM134SpeedTypeSpeedTypeSpeedType, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedTypeSpeedTypeSpeedType },
+ { 135, &hf_atn_cpdlc_uM135NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 136, &hf_atn_cpdlc_uM136NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 137, &hf_atn_cpdlc_uM137NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 138, &hf_atn_cpdlc_uM138NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 139, &hf_atn_cpdlc_uM139NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 140, &hf_atn_cpdlc_uM140NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 141, &hf_atn_cpdlc_uM141NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 142, &hf_atn_cpdlc_uM142NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 143, &hf_atn_cpdlc_uM143NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 144, &hf_atn_cpdlc_uM144NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 145, &hf_atn_cpdlc_uM145NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 146, &hf_atn_cpdlc_uM146NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 147, &hf_atn_cpdlc_uM147NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 148, &hf_atn_cpdlc_uM148Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 149, &hf_atn_cpdlc_uM149LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 150, &hf_atn_cpdlc_uM150LevelTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelTime },
+ { 151, &hf_atn_cpdlc_uM151Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 152, &hf_atn_cpdlc_uM152DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 153, &hf_atn_cpdlc_uM153Altimeter, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Altimeter },
+ { 154, &hf_atn_cpdlc_uM154NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 155, &hf_atn_cpdlc_uM155Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 156, &hf_atn_cpdlc_uM156NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 157, &hf_atn_cpdlc_uM157Frequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Frequency },
+ { 158, &hf_atn_cpdlc_uM158AtisCode, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATISCode },
+ { 159, &hf_atn_cpdlc_uM159ErrorInformation, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ErrorInformation },
+ { 160, &hf_atn_cpdlc_uM160Facility, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Facility },
+ { 161, &hf_atn_cpdlc_uM161NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 162, &hf_atn_cpdlc_uM162NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 163, &hf_atn_cpdlc_uM163FacilityDesignation, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FacilityDesignation },
+ { 164, &hf_atn_cpdlc_uM164NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 165, &hf_atn_cpdlc_uM165NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 166, &hf_atn_cpdlc_uM166TrafficType, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TrafficType },
+ { 167, &hf_atn_cpdlc_uM167NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 168, &hf_atn_cpdlc_uM168NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 169, &hf_atn_cpdlc_uM169FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 170, &hf_atn_cpdlc_uM170FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 171, &hf_atn_cpdlc_uM171VerticalRate, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_VerticalRate },
+ { 172, &hf_atn_cpdlc_uM172VerticalRate, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_VerticalRate },
+ { 173, &hf_atn_cpdlc_uM173VerticalRate, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_VerticalRate },
+ { 174, &hf_atn_cpdlc_uM174VerticalRate, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_VerticalRate },
+ { 175, &hf_atn_cpdlc_uM175Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 176, &hf_atn_cpdlc_uM176NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 177, &hf_atn_cpdlc_uM177NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 178, &hf_atn_cpdlc_uM178NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 179, &hf_atn_cpdlc_uM179NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 180, &hf_atn_cpdlc_uM180LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 181, &hf_atn_cpdlc_uM181ToFromPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ToFromPosition },
+ { 182, &hf_atn_cpdlc_uM182NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 183, &hf_atn_cpdlc_uM183FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 184, &hf_atn_cpdlc_uM184TimeToFromPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeToFromPosition },
+ { 185, &hf_atn_cpdlc_uM185PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 186, &hf_atn_cpdlc_uM186PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 187, &hf_atn_cpdlc_uM187FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 188, &hf_atn_cpdlc_uM188PositionSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionSpeed },
+ { 189, &hf_atn_cpdlc_uM189Speed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 190, &hf_atn_cpdlc_uM190Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 191, &hf_atn_cpdlc_uM191NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 192, &hf_atn_cpdlc_uM192LevelTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelTime },
+ { 193, &hf_atn_cpdlc_uM193NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 194, &hf_atn_cpdlc_uM194FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 195, &hf_atn_cpdlc_uM195FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 196, &hf_atn_cpdlc_uM196FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 197, &hf_atn_cpdlc_uM197FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 198, &hf_atn_cpdlc_uM198FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 199, &hf_atn_cpdlc_uM199FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 200, &hf_atn_cpdlc_uM200NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 201, &hf_atn_cpdlc_uM201NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 202, &hf_atn_cpdlc_uM202NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 203, &hf_atn_cpdlc_uM203FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 204, &hf_atn_cpdlc_uM204FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 205, &hf_atn_cpdlc_uM205FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 206, &hf_atn_cpdlc_uM206FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 207, &hf_atn_cpdlc_uM207FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 208, &hf_atn_cpdlc_uM208FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 209, &hf_atn_cpdlc_uM209LevelPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelPosition },
+ { 210, &hf_atn_cpdlc_uM210Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 211, &hf_atn_cpdlc_uM211NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 212, &hf_atn_cpdlc_uM212FacilityDesignationATISCode, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FacilityDesignationATISCode },
+ { 213, &hf_atn_cpdlc_uM213FacilityDesignationAltimeter, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FacilityDesignationAltimeter },
+ { 214, &hf_atn_cpdlc_uM214RunwayRVR, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RunwayRVR },
+ { 215, &hf_atn_cpdlc_uM215DirectionDegrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DirectionDegrees },
+ { 216, &hf_atn_cpdlc_uM216NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 217, &hf_atn_cpdlc_uM217NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 218, &hf_atn_cpdlc_uM218NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 219, &hf_atn_cpdlc_uM219Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 220, &hf_atn_cpdlc_uM220Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 221, &hf_atn_cpdlc_uM221Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 222, &hf_atn_cpdlc_uM222NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 223, &hf_atn_cpdlc_uM223NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 224, &hf_atn_cpdlc_uM224NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 225, &hf_atn_cpdlc_uM225NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 226, &hf_atn_cpdlc_uM226Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 227, &hf_atn_cpdlc_uM227NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 228, &hf_atn_cpdlc_uM228Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 229, &hf_atn_cpdlc_uM229NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 230, &hf_atn_cpdlc_uM230NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 231, &hf_atn_cpdlc_uM231NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 232, &hf_atn_cpdlc_uM232NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 233, &hf_atn_cpdlc_uM233NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 234, &hf_atn_cpdlc_uM234NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 235, &hf_atn_cpdlc_uM235NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 236, &hf_atn_cpdlc_uM236NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 237, &hf_atn_cpdlc_uM237NULL , ASN1_NOT_EXTENSION_ROOT, dissect_atn_cpdlc_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCUplinkMsgElementId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCUplinkMsgElementId, ATCUplinkMsgElementId_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId_sequence_of[1] = {
+ { &hf_atn_cpdlc_atcuplinkmessagedata_elementids_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCUplinkMsgElementId },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId, SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId_sequence_of,
+ 1, 5, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_128_OF_RouteInformation_sequence_of[1] = {
+ { &hf_atn_cpdlc_routeInformations_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RouteInformation },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_128_OF_RouteInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_128_OF_RouteInformation, SEQUENCE_SIZE_1_128_OF_RouteInformation_sequence_of,
+ 1, 128, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ATWDistanceTolerance_vals[] = {
+ { 0, "plus" },
+ { 1, "minus" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ATWDistanceTolerance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATWDistance_sequence[] = {
+ { &hf_atn_cpdlc_atwDistanceTolerance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATWDistanceTolerance },
+ { &hf_atn_cpdlc_distance , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Distance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATWDistance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATWDistance, ATWDistance_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ATWLevelTolerance_vals[] = {
+ { 0, "at" },
+ { 1, "atorabove" },
+ { 2, "atorbelow" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ATWLevelTolerance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATWLevel_sequence[] = {
+ { &hf_atn_cpdlc_atw , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATWLevelTolerance },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATWLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATWLevel, ATWLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATWLevelSequence_sequence_of[1] = {
+ { &hf_atn_cpdlc_ATWLevelSequence_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATWLevel },
+};
+
+static int
+dissect_atn_cpdlc_ATWLevelSequence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATWLevelSequence, ATWLevelSequence_sequence_of,
+ 1, 2, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATWAlongTrackWaypoint_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_aTWDistance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATWDistance },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_aTWLevels , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ATWLevelSequence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATWAlongTrackWaypoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATWAlongTrackWaypoint, ATWAlongTrackWaypoint_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint_sequence_of[1] = {
+ { &hf_atn_cpdlc_aTWAlongTrackWaypoints_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATWAlongTrackWaypoint },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint, SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t LatitudeReportingPoints_sequence[] = {
+ { &hf_atn_cpdlc_latitudeDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeDirection },
+ { &hf_atn_cpdlc_latitudeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatitudeDegrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatitudeReportingPoints(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatitudeReportingPoints, LatitudeReportingPoints_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LongitudeReportingPoints_sequence[] = {
+ { &hf_atn_cpdlc_longitudeDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeDirection },
+ { &hf_atn_cpdlc_longitudeDegrees, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LongitudeDegrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LongitudeReportingPoints(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LongitudeReportingPoints, LongitudeReportingPoints_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_LatLonReportingPoints_vals[] = {
+ { 0, "latitudeReportingPoints" },
+ { 1, "longitudeReportingPoints" },
+ { 0, NULL }
+};
+
+static const per_choice_t LatLonReportingPoints_choice[] = {
+ { 0, &hf_atn_cpdlc_latitudeReportingPoints, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeReportingPoints },
+ { 1, &hf_atn_cpdlc_longitudeReportingPoints, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LongitudeReportingPoints },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_LatLonReportingPoints(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_LatLonReportingPoints, LatLonReportingPoints_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_DegreeIncrement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 20U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ReportingPoints_sequence[] = {
+ { &hf_atn_cpdlc_latLonReportingPoints, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_LatLonReportingPoints },
+ { &hf_atn_cpdlc_degreeIncrement, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_DegreeIncrement },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ReportingPoints(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ReportingPoints, ReportingPoints_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_InterceptCourseFromSelection_vals[] = {
+ { 0, "publishedIdentifier" },
+ { 1, "latitudeLongitude" },
+ { 2, "placeBearingPlaceBearing" },
+ { 3, "placeBearingDistance" },
+ { 0, NULL }
+};
+
+static const per_choice_t InterceptCourseFromSelection_choice[] = {
+ { 0, &hf_atn_cpdlc_publishedIdentifier, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PublishedIdentifier },
+ { 1, &hf_atn_cpdlc_latitudeLongitude, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_LatitudeLongitude },
+ { 2, &hf_atn_cpdlc_placeBearingPlaceBearing, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PlaceBearingPlaceBearing },
+ { 3, &hf_atn_cpdlc_placeBearingDistance, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_PlaceBearingDistance },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_InterceptCourseFromSelection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_InterceptCourseFromSelection, InterceptCourseFromSelection_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t InterceptCourseFrom_sequence[] = {
+ { &hf_atn_cpdlc_fromSelection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_InterceptCourseFromSelection },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Degrees },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_InterceptCourseFrom(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_InterceptCourseFrom, InterceptCourseFrom_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom_sequence_of[1] = {
+ { &hf_atn_cpdlc_interceptCourseFroms_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_InterceptCourseFrom },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom, SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t Holdatwaypoint_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_holdatwaypointspeedlow, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_aTWlevel , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ATWLevel },
+ { &hf_atn_cpdlc_holdatwaypointspeedhigh, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_direction , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Direction },
+ { &hf_atn_cpdlc_degrees , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Degrees },
+ { &hf_atn_cpdlc_eFCtime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_legtype , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_LegType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Holdatwaypoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Holdatwaypoint, Holdatwaypoint_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_8_OF_Holdatwaypoint_sequence_of[1] = {
+ { &hf_atn_cpdlc_holdAtWaypoints_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Holdatwaypoint },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_Holdatwaypoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_Holdatwaypoint, SEQUENCE_SIZE_1_8_OF_Holdatwaypoint_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t WaypointSpeedLevel_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_aTWLevels , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ATWLevelSequence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_WaypointSpeedLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_WaypointSpeedLevel, WaypointSpeedLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel_sequence_of[1] = {
+ { &hf_atn_cpdlc_waypointSpeedLevels_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_WaypointSpeedLevel },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel, SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RTATime_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_timeTolerance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_TimeTolerance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RTATime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RTATime, RTATime_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RTATolerance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 150U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RTARequiredTimeArrival_sequence[] = {
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_rTATime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RTATime },
+ { &hf_atn_cpdlc_rTATolerance, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_RTATolerance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RTARequiredTimeArrival(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RTARequiredTimeArrival, RTARequiredTimeArrival_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival_sequence_of[1] = {
+ { &hf_atn_cpdlc_rTARequiredTimeArrivals_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RTARequiredTimeArrival },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival, SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RouteInformationAdditional_sequence[] = {
+ { &hf_atn_cpdlc_aTWAlongTrackWaypoints, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint },
+ { &hf_atn_cpdlc_reportingpoints, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ReportingPoints },
+ { &hf_atn_cpdlc_interceptCourseFroms, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom },
+ { &hf_atn_cpdlc_holdAtWaypoints, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_Holdatwaypoint },
+ { &hf_atn_cpdlc_waypointSpeedLevels, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel },
+ { &hf_atn_cpdlc_rTARequiredTimeArrivals, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RouteInformationAdditional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RouteInformationAdditional, RouteInformationAdditional_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t RouteClearance_sequence[] = {
+ { &hf_atn_cpdlc_airportDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Airport },
+ { &hf_atn_cpdlc_airportDestination, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Airport },
+ { &hf_atn_cpdlc_runwayDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Runway },
+ { &hf_atn_cpdlc_procedureDeparture, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ProcedureName },
+ { &hf_atn_cpdlc_runwayArrival, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Runway },
+ { &hf_atn_cpdlc_procedureApproach, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ProcedureName },
+ { &hf_atn_cpdlc_procedureArrival, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ProcedureName },
+ { &hf_atn_cpdlc_routeInformations, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_128_OF_RouteInformation },
+ { &hf_atn_cpdlc_routeInformationAdditional, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_RouteInformationAdditional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RouteClearance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RouteClearance, RouteClearance_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_2_OF_RouteClearance_sequence_of[1] = {
+ { &hf_atn_cpdlc_routeClearanceData_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RouteClearance },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance, SEQUENCE_SIZE_1_2_OF_RouteClearance_sequence_of,
+ 1, 2, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t T_atcuplinkmessagedata_constraineddata_sequence[] = {
+ { &hf_atn_cpdlc_routeClearanceData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_T_atcuplinkmessagedata_constraineddata(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_T_atcuplinkmessagedata_constraineddata, T_atcuplinkmessagedata_constraineddata_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCUplinkMessageData_sequence[] = {
+ { &hf_atn_cpdlc_atcuplinkmessagedata_elementids, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId },
+ { &hf_atn_cpdlc_atcuplinkmessagedata_constraineddata, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_T_atcuplinkmessagedata_constraineddata },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCUplinkMessageData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCUplinkMessageData, ATCUplinkMessageData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCUplinkMessage_sequence[] = {
+ { &hf_atn_cpdlc_header , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCMessageHeader },
+ { &hf_atn_cpdlc_atcuplinkmessage_messagedata, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCUplinkMessageData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCUplinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCUplinkMessage, ATCUplinkMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_UplinkMessage_vals[] = {
+ { 0, "noMessage" },
+ { 1, "aTCUplinkMessage" },
+ { 0, NULL }
+};
+
+static const per_choice_t UplinkMessage_choice[] = {
+ { 0, &hf_atn_cpdlc_noMessage , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_NULL },
+ { 1, &hf_atn_cpdlc_aTCUplinkMessage, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_ATCUplinkMessage },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_UplinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_UplinkMessage, UplinkMessage_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_AircraftAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 24, 24, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ForwardHeader_sequence[] = {
+ { &hf_atn_cpdlc_dateTime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DateTimeGroup },
+ { &hf_atn_cpdlc_aircraftID, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_AircraftFlightIdentification },
+ { &hf_atn_cpdlc_aircraftAddress, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_AircraftAddress },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ForwardHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ForwardHeader, ForwardHeader_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ForwardMessage_vals[] = {
+ { 0, "upElementIDs" },
+ { 1, "downElementIDs" },
+ { 0, NULL }
+};
+
+static const per_choice_t ForwardMessage_choice[] = {
+ { 0, &hf_atn_cpdlc_upElementIDs, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_BIT_STRING },
+ { 1, &hf_atn_cpdlc_downElementIDs, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_BIT_STRING },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ForwardMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ForwardMessage, ForwardMessage_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCForwardMessage_sequence[] = {
+ { &hf_atn_cpdlc_forwardHeader, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ForwardHeader },
+ { &hf_atn_cpdlc_forwardMessage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ForwardMessage },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCForwardMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCForwardMessage, ATCForwardMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ATCForwardResponse_vals[] = {
+ { 0, "success" },
+ { 1, "service-not-supported" },
+ { 2, "version-not-equal" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ATCForwardResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_GroundPDUs_vals[] = {
+ { 0, "abortUser" },
+ { 1, "abortProvider" },
+ { 2, "startup" },
+ { 3, "send" },
+ { 4, "forward" },
+ { 5, "forwardresponse" },
+ { 0, NULL }
+};
+
+static const per_choice_t GroundPDUs_choice[] = {
+ { 0, &hf_atn_cpdlc_abortUser , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_CPDLCUserAbortReason },
+ { 1, &hf_atn_cpdlc_abortProvider, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_CPDLCProviderAbortReason },
+ { 2, &hf_atn_cpdlc_startup , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_UplinkMessage },
+ { 3, &hf_atn_cpdlc_groundpdus_send, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCUplinkMessage },
+ { 4, &hf_atn_cpdlc_forward , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCForwardMessage },
+ { 5, &hf_atn_cpdlc_forwardresponse, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCForwardResponse },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_GroundPDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_GroundPDUs, GroundPDUs_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Mode_vals[] = {
+ { 0, "cpdlc" },
+ { 1, "dsc" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_Mode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ClearanceType_vals[] = {
+ { 0, "noneSpecified" },
+ { 1, "approach" },
+ { 2, "departure" },
+ { 3, "further" },
+ { 4, "start-up" },
+ { 5, "pushback" },
+ { 6, "taxi" },
+ { 7, "take-off" },
+ { 8, "landing" },
+ { 9, "oceanic" },
+ { 10, "en-route" },
+ { 11, "downstream" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ClearanceType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 12, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_RemainingFuel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_cpdlc_Time(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Temperature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -100, 100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_WindDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 360U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_WindSpeedEnglish(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_WindSpeedMetric(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 511U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_WindSpeed_vals[] = {
+ { 0, "windSpeedEnglish" },
+ { 1, "windSpeedMetric" },
+ { 0, NULL }
+};
+
+static const per_choice_t WindSpeed_choice[] = {
+ { 0, &hf_atn_cpdlc_windSpeedEnglish, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_WindSpeedEnglish },
+ { 1, &hf_atn_cpdlc_windSpeedMetric, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_WindSpeedMetric },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_WindSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_WindSpeed, WindSpeed_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Winds_sequence[] = {
+ { &hf_atn_cpdlc_winds_direction, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_WindDirection },
+ { &hf_atn_cpdlc_winds_speed, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_WindSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_Winds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_Winds, Winds_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Turbulence_vals[] = {
+ { 0, "light" },
+ { 1, "moderate" },
+ { 2, "severe" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_Turbulence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_Icing_vals[] = {
+ { 0, "reserved" },
+ { 1, "light" },
+ { 2, "moderate" },
+ { 3, "severe" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_Icing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_VerticalDirection_vals[] = {
+ { 0, "up" },
+ { 1, "down" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_VerticalDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t VerticalChange_sequence[] = {
+ { &hf_atn_cpdlc_vertical_direction, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_VerticalDirection },
+ { &hf_atn_cpdlc_rate , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_VerticalRate },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_VerticalChange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_VerticalChange, VerticalChange_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_Humidity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t PositionReport_sequence[] = {
+ { &hf_atn_cpdlc_positioncurrent, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_timeatpositioncurrent, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_level , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Level },
+ { &hf_atn_cpdlc_fixnext , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_timeetaatfixnext, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_fixnextplusone, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_timeetaatdestination, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_remainingFuel, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_RemainingFuel },
+ { &hf_atn_cpdlc_temperature, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Temperature },
+ { &hf_atn_cpdlc_winds , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Winds },
+ { &hf_atn_cpdlc_turbulence, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Turbulence },
+ { &hf_atn_cpdlc_icing , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Icing },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_speedground, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_SpeedGround },
+ { &hf_atn_cpdlc_verticalChange, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_VerticalChange },
+ { &hf_atn_cpdlc_trackAngle, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Degrees },
+ { &hf_atn_cpdlc_heading , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Degrees },
+ { &hf_atn_cpdlc_distance , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Distance },
+ { &hf_atn_cpdlc_humidity , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Humidity },
+ { &hf_atn_cpdlc_reportedWaypointPosition, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Position },
+ { &hf_atn_cpdlc_reportedWaypointTime, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_reportedWaypointLevel, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Level },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_PositionReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_PositionReport, PositionReport_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_PersonsOnBoard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 1024U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RemainingFuelPersonsOnBoard_sequence[] = {
+ { &hf_atn_cpdlc_remainingFuel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_RemainingFuel },
+ { &hf_atn_cpdlc_personsOnBoard, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_PersonsOnBoard },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_RemainingFuelPersonsOnBoard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_RemainingFuelPersonsOnBoard, RemainingFuelPersonsOnBoard_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_VersionNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t TimeDistanceToFromPosition_sequence[] = {
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { &hf_atn_cpdlc_distance , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Distance },
+ { &hf_atn_cpdlc_tofrom , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ToFrom },
+ { &hf_atn_cpdlc_position , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Position },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_TimeDistanceToFromPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_TimeDistanceToFromPosition, TimeDistanceToFromPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SpeedTime_sequence[] = {
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_SpeedTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SpeedTime, SpeedTime_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t DistanceSpecifiedDirectionTime_sequence[] = {
+ { &hf_atn_cpdlc_distanceSpecifiedDirection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { &hf_atn_cpdlc_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Time },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DistanceSpecifiedDirectionTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DistanceSpecifiedDirectionTime, DistanceSpecifiedDirectionTime_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SpeedTypeSpeedTypeSpeedTypeSpeed_sequence[] = {
+ { &hf_atn_cpdlc_speedTypes, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SpeedTypeSpeedTypeSpeedType },
+ { &hf_atn_cpdlc_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_Speed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_SpeedTypeSpeedTypeSpeedTypeSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedTypeSpeed, SpeedTypeSpeedTypeSpeedTypeSpeed_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ATCDownlinkMsgElementId_vals[] = {
+ { 0, "dM0NULL" },
+ { 1, "dM1NULL" },
+ { 2, "dM2NULL" },
+ { 3, "dM3NULL" },
+ { 4, "dM4NULL" },
+ { 5, "dM5NULL" },
+ { 6, "dM6Level" },
+ { 7, "dM7LevelLevel" },
+ { 8, "dM8Level" },
+ { 9, "dM9Level" },
+ { 10, "dM10Level" },
+ { 11, "dM11PositionLevel" },
+ { 12, "dM12PositionLevel" },
+ { 13, "dM13TimeLevel" },
+ { 14, "dM14TimeLevel" },
+ { 15, "dM15DistanceSpecifiedDirection" },
+ { 16, "dM16PositionDistanceSpecifiedDirection" },
+ { 17, "dM17TimeDistanceSpecifiedDirection" },
+ { 18, "dM18Speed" },
+ { 19, "dM19SpeedSpeed" },
+ { 20, "dM20NULL" },
+ { 21, "dM21Frequency" },
+ { 22, "dM22Position" },
+ { 23, "dM23ProcedureName" },
+ { 24, "dM24RouteClearance" },
+ { 25, "dM25ClearanceType" },
+ { 26, "dM26PositionRouteClearance" },
+ { 27, "dM27DistanceSpecifiedDirection" },
+ { 28, "dM28Level" },
+ { 29, "dM29Level" },
+ { 30, "dM30Level" },
+ { 31, "dM31Position" },
+ { 32, "dM32Level" },
+ { 33, "dM33Position" },
+ { 34, "dM34Speed" },
+ { 35, "dM35Degrees" },
+ { 36, "dM36Degrees" },
+ { 37, "dM37Level" },
+ { 38, "dM38Level" },
+ { 39, "dM39Speed" },
+ { 40, "dM40RouteClearance" },
+ { 41, "dM41NULL" },
+ { 42, "dM42Position" },
+ { 43, "dM43Time" },
+ { 44, "dM44Position" },
+ { 45, "dM45Position" },
+ { 46, "dM46Time" },
+ { 47, "dM47Code" },
+ { 48, "dM48PositionReport" },
+ { 49, "dM49Speed" },
+ { 50, "dM50SpeedSpeed" },
+ { 51, "dM51NULL" },
+ { 52, "dM52NULL" },
+ { 53, "dM53NULL" },
+ { 54, "dM54Level" },
+ { 55, "dM55NULL" },
+ { 56, "dM56NULL" },
+ { 57, "dM57RemainingFuelPersonsOnBoard" },
+ { 58, "dM58NULL" },
+ { 59, "dM59PositionRouteClearance" },
+ { 60, "dM60DistanceSpecifiedDirection" },
+ { 61, "dM61Level" },
+ { 62, "dM62ErrorInformation" },
+ { 63, "dM63NULL" },
+ { 64, "dM64FacilityDesignation" },
+ { 65, "dM65NULL" },
+ { 66, "dM66NULL" },
+ { 67, "dM67FreeText" },
+ { 68, "dM68FreeText" },
+ { 69, "dM69NULL" },
+ { 70, "dM70Degrees" },
+ { 71, "dM71Degrees" },
+ { 72, "dM72Level" },
+ { 73, "dM73Versionnumber" },
+ { 74, "dM74NULL" },
+ { 75, "dM75NULL" },
+ { 76, "dM76LevelLevel" },
+ { 77, "dM77LevelLevel" },
+ { 78, "dM78TimeDistanceToFromPosition" },
+ { 79, "dM79AtisCode" },
+ { 80, "dM80DistanceSpecifiedDirection" },
+ { 81, "dM81LevelTime" },
+ { 82, "dM82Level" },
+ { 83, "dM83SpeedTime" },
+ { 84, "dM84Speed" },
+ { 85, "dM85DistanceSpecifiedDirectionTime" },
+ { 86, "dM86DistanceSpecifiedDirection" },
+ { 87, "dM87Level" },
+ { 88, "dM88Level" },
+ { 89, "dM89UnitnameFrequency" },
+ { 90, "dM90FreeText" },
+ { 91, "dM91FreeText" },
+ { 92, "dM92FreeText" },
+ { 93, "dM93FreeText" },
+ { 94, "dM94FreeText" },
+ { 95, "dM95FreeText" },
+ { 96, "dM96FreeText" },
+ { 97, "dM97FreeText" },
+ { 98, "dM98FreeText" },
+ { 99, "dM99NULL" },
+ { 100, "dM100NULL" },
+ { 101, "dM101NULL" },
+ { 102, "dM102NULL" },
+ { 103, "dM103NULL" },
+ { 104, "dM104PositionTime" },
+ { 105, "dM105Airport" },
+ { 106, "dM106Level" },
+ { 107, "dM107NULL" },
+ { 108, "dM108NULL" },
+ { 109, "dM109Time" },
+ { 110, "dM110Position" },
+ { 111, "dM111TimePosition" },
+ { 112, "dM112NULL" },
+ { 113, "dM113SpeedTypeSpeedTypeSpeedTypeSpeed" },
+ { 0, NULL }
+};
+
+static const per_choice_t ATCDownlinkMsgElementId_choice[] = {
+ { 0, &hf_atn_cpdlc_dM0NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 1, &hf_atn_cpdlc_dM1NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 2, &hf_atn_cpdlc_dM2NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 3, &hf_atn_cpdlc_dM3NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 4, &hf_atn_cpdlc_dM4NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 5, &hf_atn_cpdlc_dM5NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 6, &hf_atn_cpdlc_dM6Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 7, &hf_atn_cpdlc_dM7LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 8, &hf_atn_cpdlc_dM8Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 9, &hf_atn_cpdlc_dM9Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 10, &hf_atn_cpdlc_dM10Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 11, &hf_atn_cpdlc_dM11PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 12, &hf_atn_cpdlc_dM12PositionLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionLevel },
+ { 13, &hf_atn_cpdlc_dM13TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 14, &hf_atn_cpdlc_dM14TimeLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeLevel },
+ { 15, &hf_atn_cpdlc_dM15DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 16, &hf_atn_cpdlc_dM16PositionDistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionDistanceSpecifiedDirection },
+ { 17, &hf_atn_cpdlc_dM17TimeDistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeDistanceSpecifiedDirection },
+ { 18, &hf_atn_cpdlc_dM18Speed , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 19, &hf_atn_cpdlc_dM19SpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedSpeed },
+ { 20, &hf_atn_cpdlc_dM20NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 21, &hf_atn_cpdlc_dM21Frequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Frequency },
+ { 22, &hf_atn_cpdlc_dM22Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 23, &hf_atn_cpdlc_dM23ProcedureName, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProcedureName },
+ { 24, &hf_atn_cpdlc_dM24RouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RouteClearanceIndex },
+ { 25, &hf_atn_cpdlc_dM25ClearanceType, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ClearanceType },
+ { 26, &hf_atn_cpdlc_dM26PositionRouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionRouteClearanceIndex },
+ { 27, &hf_atn_cpdlc_dM27DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 28, &hf_atn_cpdlc_dM28Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 29, &hf_atn_cpdlc_dM29Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 30, &hf_atn_cpdlc_dM30Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 31, &hf_atn_cpdlc_dM31Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 32, &hf_atn_cpdlc_dM32Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 33, &hf_atn_cpdlc_dM33Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 34, &hf_atn_cpdlc_dM34Speed , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 35, &hf_atn_cpdlc_dM35Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 36, &hf_atn_cpdlc_dM36Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 37, &hf_atn_cpdlc_dM37Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 38, &hf_atn_cpdlc_dM38Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 39, &hf_atn_cpdlc_dM39Speed , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 40, &hf_atn_cpdlc_dM40RouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RouteClearanceIndex },
+ { 41, &hf_atn_cpdlc_dM41NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 42, &hf_atn_cpdlc_dM42Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 43, &hf_atn_cpdlc_dM43Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 44, &hf_atn_cpdlc_dM44Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 45, &hf_atn_cpdlc_dM45Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 46, &hf_atn_cpdlc_dM46Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 47, &hf_atn_cpdlc_dM47Code , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Code },
+ { 48, &hf_atn_cpdlc_dM48PositionReport, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionReport },
+ { 49, &hf_atn_cpdlc_dM49Speed , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 50, &hf_atn_cpdlc_dM50SpeedSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedSpeed },
+ { 51, &hf_atn_cpdlc_dM51NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 52, &hf_atn_cpdlc_dM52NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 53, &hf_atn_cpdlc_dM53NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 54, &hf_atn_cpdlc_dM54Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 55, &hf_atn_cpdlc_dM55NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 56, &hf_atn_cpdlc_dM56NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 57, &hf_atn_cpdlc_dM57RemainingFuelPersonsOnBoard, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_RemainingFuelPersonsOnBoard },
+ { 58, &hf_atn_cpdlc_dM58NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 59, &hf_atn_cpdlc_dM59PositionRouteClearance, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionRouteClearanceIndex },
+ { 60, &hf_atn_cpdlc_dM60DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 61, &hf_atn_cpdlc_dM61Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 62, &hf_atn_cpdlc_dM62ErrorInformation, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ErrorInformation },
+ { 63, &hf_atn_cpdlc_dM63NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 64, &hf_atn_cpdlc_dM64FacilityDesignation, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FacilityDesignation },
+ { 65, &hf_atn_cpdlc_dM65NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 66, &hf_atn_cpdlc_dM66NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 67, &hf_atn_cpdlc_dM67FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 68, &hf_atn_cpdlc_dM68FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 69, &hf_atn_cpdlc_dM69NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 70, &hf_atn_cpdlc_dM70Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 71, &hf_atn_cpdlc_dM71Degrees, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Degrees },
+ { 72, &hf_atn_cpdlc_dM72Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 73, &hf_atn_cpdlc_dM73Versionnumber, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_VersionNumber },
+ { 74, &hf_atn_cpdlc_dM74NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 75, &hf_atn_cpdlc_dM75NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 76, &hf_atn_cpdlc_dM76LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 77, &hf_atn_cpdlc_dM77LevelLevel, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelLevel },
+ { 78, &hf_atn_cpdlc_dM78TimeDistanceToFromPosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimeDistanceToFromPosition },
+ { 79, &hf_atn_cpdlc_dM79AtisCode, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATISCode },
+ { 80, &hf_atn_cpdlc_dM80DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 81, &hf_atn_cpdlc_dM81LevelTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_LevelTime },
+ { 82, &hf_atn_cpdlc_dM82Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 83, &hf_atn_cpdlc_dM83SpeedTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedTime },
+ { 84, &hf_atn_cpdlc_dM84Speed , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Speed },
+ { 85, &hf_atn_cpdlc_dM85DistanceSpecifiedDirectionTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirectionTime },
+ { 86, &hf_atn_cpdlc_dM86DistanceSpecifiedDirection, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_DistanceSpecifiedDirection },
+ { 87, &hf_atn_cpdlc_dM87Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 88, &hf_atn_cpdlc_dM88Level , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 89, &hf_atn_cpdlc_dM89UnitnameFrequency, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_UnitNameFrequency },
+ { 90, &hf_atn_cpdlc_dM90FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 91, &hf_atn_cpdlc_dM91FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 92, &hf_atn_cpdlc_dM92FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 93, &hf_atn_cpdlc_dM93FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 94, &hf_atn_cpdlc_dM94FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 95, &hf_atn_cpdlc_dM95FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 96, &hf_atn_cpdlc_dM96FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 97, &hf_atn_cpdlc_dM97FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 98, &hf_atn_cpdlc_dM98FreeText, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_FreeText },
+ { 99, &hf_atn_cpdlc_dM99NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 100, &hf_atn_cpdlc_dM100NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 101, &hf_atn_cpdlc_dM101NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 102, &hf_atn_cpdlc_dM102NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 103, &hf_atn_cpdlc_dM103NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 104, &hf_atn_cpdlc_dM104PositionTime, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PositionTime },
+ { 105, &hf_atn_cpdlc_dM105Airport, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Airport },
+ { 106, &hf_atn_cpdlc_dM106Level, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Level },
+ { 107, &hf_atn_cpdlc_dM107NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 108, &hf_atn_cpdlc_dM108NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 109, &hf_atn_cpdlc_dM109Time , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Time },
+ { 110, &hf_atn_cpdlc_dM110Position, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_Position },
+ { 111, &hf_atn_cpdlc_dM111TimePosition, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_TimePosition },
+ { 112, &hf_atn_cpdlc_dM112NULL , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_NULL },
+ { 113, &hf_atn_cpdlc_dM113SpeedTypeSpeedTypeSpeedTypeSpeed, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_SpeedTypeSpeedTypeSpeedTypeSpeed },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCDownlinkMsgElementId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCDownlinkMsgElementId, ATCDownlinkMsgElementId_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId_sequence_of[1] = {
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_elementids_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCDownlinkMsgElementId },
+};
+
+static int
+dissect_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId, SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId_sequence_of,
+ 1, 5, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t T_atcdownlinkmessagedata_constraineddata_sequence[] = {
+ { &hf_atn_cpdlc_routeClearanceData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_T_atcdownlinkmessagedata_constraineddata(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_T_atcdownlinkmessagedata_constraineddata, T_atcdownlinkmessagedata_constraineddata_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCDownlinkMessageData_sequence[] = {
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_elementids, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId },
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_constraineddata, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_T_atcdownlinkmessagedata_constraineddata },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCDownlinkMessageData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCDownlinkMessageData, ATCDownlinkMessageData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ATCDownlinkMessage_sequence[] = {
+ { &hf_atn_cpdlc_header , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCMessageHeader },
+ { &hf_atn_cpdlc_atcdownlinkmessage_messagedata, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ATCDownlinkMessageData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ATCDownlinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ATCDownlinkMessage, ATCDownlinkMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_DownlinkMessage_vals[] = {
+ { 0, "noMessage" },
+ { 1, "aTCDownlinkMessage" },
+ { 0, NULL }
+};
+
+static const per_choice_t DownlinkMessage_choice[] = {
+ { 0, &hf_atn_cpdlc_noMessage , ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_NULL },
+ { 1, &hf_atn_cpdlc_aTCDownlinkMessage, ASN1_NO_EXTENSIONS , dissect_atn_cpdlc_ATCDownlinkMessage },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_DownlinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_DownlinkMessage, DownlinkMessage_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t StartDownMessage_sequence[] = {
+ { &hf_atn_cpdlc_mode , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_Mode },
+ { &hf_atn_cpdlc_startDownlinkMessage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_DownlinkMessage },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_StartDownMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_StartDownMessage, StartDownMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_AircraftPDUs_vals[] = {
+ { 0, "abortUser" },
+ { 1, "abortProvider" },
+ { 2, "startdown" },
+ { 3, "send" },
+ { 0, NULL }
+};
+
+static const per_choice_t AircraftPDUs_choice[] = {
+ { 0, &hf_atn_cpdlc_abortUser , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_CPDLCUserAbortReason },
+ { 1, &hf_atn_cpdlc_abortProvider, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_CPDLCProviderAbortReason },
+ { 2, &hf_atn_cpdlc_startdown , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_StartDownMessage },
+ { 3, &hf_atn_cpdlc_aircraftpdus_send, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCDownlinkMessage },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_AircraftPDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_AircraftPDUs, AircraftPDUs_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_PMCPDLCUserAbortReason_vals[] = {
+ { 0, "undefined" },
+ { 1, "no-message-identification-numbers-available" },
+ { 2, "duplicate-message-identification-numbers" },
+ { 3, "no-longer-next-data-authority" },
+ { 4, "current-data-authority-abort" },
+ { 5, "commanded-termination" },
+ { 6, "invalid-response" },
+ { 7, "time-out-of-synchronisation" },
+ { 8, "unknown-integrity-check" },
+ { 9, "validation-failure" },
+ { 10, "unable-to-decode-message" },
+ { 11, "invalid-pdu" },
+ { 12, "invalid-CPDLC-message" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_PMCPDLCUserAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 13, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_PMCPDLCProviderAbortReason_vals[] = {
+ { 0, "timer-expired" },
+ { 1, "undefined-error" },
+ { 2, "invalid-PDU" },
+ { 3, "protocol-error" },
+ { 4, "communication-service-error" },
+ { 5, "communication-service-failure" },
+ { 6, "invalid-QOS-parameter" },
+ { 7, "expected-PDU-missing" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_PMCPDLCProviderAbortReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_AlgorithmIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ proto_tree *top_tree=NULL;
+
+ offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, top_tree);
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_cpdlc_CPDLCMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *tvb_usr = NULL;
+
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &tvb_usr);
+
+ switch(check_heur_msg_type(actx->pinfo)){
+ case dm:
+ dissect_atn_cpdlc_ATCDownlinkMessage(tvb_new_subset_remaining(tvb_usr, 0), 0, actx, tree, hf_index);
+ break;
+ case um:
+ dissect_atn_cpdlc_ATCUplinkMessage(tvb_new_subset_remaining(tvb_usr, 0), 0, actx , tree, hf_index);
+ break;
+ default:
+ break;
+ }
+
+
+ return offset;
+}
+
+
+static const per_sequence_t ProtectedUplinkMessage_sequence[] = {
+ { &hf_atn_cpdlc_algorithmIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_AlgorithmIdentifier },
+ { &hf_atn_cpdlc_protectedMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_CPDLCMessage },
+ { &hf_atn_cpdlc_integrityCheck, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_BIT_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProtectedUplinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProtectedUplinkMessage, ProtectedUplinkMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ProtectedGroundPDUs_vals[] = {
+ { 0, "abortUser" },
+ { 1, "abortProvider" },
+ { 2, "startup" },
+ { 3, "send" },
+ { 4, "forward" },
+ { 5, "forwardresponse" },
+ { 0, NULL }
+};
+
+static const per_choice_t ProtectedGroundPDUs_choice[] = {
+ { 0, &hf_atn_cpdlc_pmcpdlcuserabortreason, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PMCPDLCUserAbortReason },
+ { 1, &hf_atn_cpdlc_pmcpdlcproviderabortreason, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PMCPDLCProviderAbortReason },
+ { 2, &hf_atn_cpdlc_protecteduplinkmessage, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProtectedUplinkMessage },
+ { 3, &hf_atn_cpdlc_protecteduplinkmessage, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProtectedUplinkMessage },
+ { 4, &hf_atn_cpdlc_forward , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCForwardMessage },
+ { 5, &hf_atn_cpdlc_forwardresponse, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ATCForwardResponse },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProtectedGroundPDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProtectedGroundPDUs, ProtectedGroundPDUs_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ProtectedMode_vals[] = {
+ { 0, "cpdlc" },
+ { 1, "dsc" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_cpdlc_ProtectedMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ProtectedDownlinkMessage_sequence[] = {
+ { &hf_atn_cpdlc_algorithmIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_AlgorithmIdentifier },
+ { &hf_atn_cpdlc_protectedMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_cpdlc_CPDLCMessage },
+ { &hf_atn_cpdlc_integrityCheck, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_BIT_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProtectedDownlinkMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProtectedDownlinkMessage, ProtectedDownlinkMessage_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ProtectedStartDownMessage_sequence[] = {
+ { &hf_atn_cpdlc_protectedmode, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_cpdlc_ProtectedMode },
+ { &hf_atn_cpdlc_protecteddownlinkmessage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_cpdlc_ProtectedDownlinkMessage },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProtectedStartDownMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProtectedStartDownMessage, ProtectedStartDownMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_cpdlc_ProtectedAircraftPDUs_vals[] = {
+ { 0, "abortUser" },
+ { 1, "abortProvider" },
+ { 2, "startdown" },
+ { 3, "send" },
+ { 0, NULL }
+};
+
+static const per_choice_t ProtectedAircraftPDUs_choice[] = {
+ { 0, &hf_atn_cpdlc_pmcpdlcuserabortreason, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PMCPDLCUserAbortReason },
+ { 1, &hf_atn_cpdlc_pmcpdlcproviderabortreason, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_PMCPDLCProviderAbortReason },
+ { 2, &hf_atn_cpdlc_protectedstartDownmessage, ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProtectedStartDownMessage },
+ { 3, &hf_atn_cpdlc_send , ASN1_EXTENSION_ROOT , dissect_atn_cpdlc_ProtectedDownlinkMessage },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_cpdlc_ProtectedAircraftPDUs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_cpdlc_ProtectedAircraftPDUs, ProtectedAircraftPDUs_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static void dissect_GroundPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cpdlc_GroundPDUs(tvb, 0, &asn1_ctx, tree, hf_atn_cpdlc_GroundPDUs_PDU);
+}
+static void dissect_AircraftPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cpdlc_AircraftPDUs(tvb, 0, &asn1_ctx, tree, hf_atn_cpdlc_AircraftPDUs_PDU);
+}
+static void dissect_ProtectedGroundPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cpdlc_ProtectedGroundPDUs(tvb, 0, &asn1_ctx, tree, hf_atn_cpdlc_ProtectedGroundPDUs_PDU);
+}
+static void dissect_ProtectedAircraftPDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_cpdlc_ProtectedAircraftPDUs(tvb, 0, &asn1_ctx, tree, hf_atn_cpdlc_ProtectedAircraftPDUs_PDU);
+}
+
+
+/*--- End of included file: packet-atn-cpdlc-fn.c ---*/
+#line 92 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+
+/* Wireshark ID of CPDLC protocol */
+static int proto_atn_cpdlc = -1;
+
+
+static int
+dissect_atn_cpdlc(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ /* note: */
+ /* there are two co-existing applications of CPDLC: */
+ /* "plain old" (ae-qualifier 2) and */
+ /* "protected mode" (ae-qualifier 22) CPDLC. */
+ /* "protected mode" was introduced to cope with a */
+ /* safety issue in which a message would sent to the wrong aircraft. */
+
+ /* note:*/
+ /* The protection is an additional checksum and covers the message content, */
+ /* the 24-bit address of the aircraft, the current flight id and */
+ /* the current ground facility so that an aircraft would be able to reject */
+ /* messages which are unexpected (i.e. messages to another flight or */
+ /* messages from the wrong center). */
+
+ /*note:*/
+ /* although "plain old" CPDLC is more or less deprecated */
+ /* many aircraft cannot perform */
+ /* "protected mode" for this largely depends on */
+ /* upgraded avionics packages */
+
+ /*note:*/
+ /* The use of CPDLC is *optional* as the pilot */
+ /* may always use a voice radio channel to talk to the controller.*/
+
+ proto_item *ti = NULL;
+ proto_tree *atn_cpdlc_tree = NULL;
+ atn_conversation_t *atn_cv = NULL;
+
+ /* note: */
+ /* we need the ae qualifier stored within the conversation */
+ /* to decode "plain old cpdlc" or */
+ /* "protected mode cpdlc correctly " */
+
+ /* DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(
+ &pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+ }
+ /* CR: srcref present, dstref is always zero */
+ if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+ /* CC: srcref and dstref present, always use src/srcref & dst */
+ if((pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+
+ if(!atn_cv){ /* atn conversation not found */
+ return 0; }
+
+ ti = proto_tree_add_text(
+ tree,
+ tvb,
+ 0,
+ tvb_reported_length_remaining(tvb, 0) ,
+ ATN_CPDLC_PROTO );
+
+ atn_cpdlc_tree = proto_item_add_subtree(
+ ti,
+ ett_atn_cpdlc);
+
+ switch(atn_cv->ae_qualifier){
+ case pmcpdlc:
+ if( check_heur_msg_type(pinfo) == um ) {
+ /* uplink PDU's = Ground PDU's */
+ dissect_ProtectedGroundPDUs_PDU(
+ tvb,
+ pinfo,
+ atn_cpdlc_tree);
+ }else { /* downlink PDU's = Aircraft PDU's */
+ dissect_ProtectedAircraftPDUs_PDU(
+ tvb,
+ pinfo,
+ atn_cpdlc_tree);
+ }
+ break;
+ case cpdlc:
+ if( check_heur_msg_type(pinfo) == um ) {
+ /* uplink PDU's = Ground PDU's */
+ dissect_GroundPDUs_PDU(
+ tvb,
+ pinfo,
+ atn_cpdlc_tree);
+ }else { /* downlink PDU's = Aircraft PDU's */
+ dissect_AircraftPDUs_PDU(
+ tvb,
+ pinfo,
+ atn_cpdlc_tree);
+ }
+ break;
+ default:
+ break;
+ }
+ return tvb_reported_length_remaining(tvb, 0);
+}
+
+static gboolean
+dissect_atn_cpdlc_heur(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ atn_conversation_t *atn_cv = NULL;
+ gboolean is_atn_cpdlc = FALSE;
+ gboolean is_pm = FALSE;
+ int type = no_msg;
+
+ type = check_heur_msg_type(pinfo);
+
+ switch(type){
+ case um:
+ TRY {
+ dissect_ProtectedGroundPDUs_PDU(tvb, pinfo, NULL);
+ is_atn_cpdlc = TRUE;
+ is_pm = TRUE;}
+ break;
+ CATCH_ALL{
+ is_atn_cpdlc = FALSE;
+ is_pm = FALSE;}
+ ENDTRY;
+ TRY {
+ dissect_GroundPDUs_PDU(tvb, pinfo, NULL);
+ is_pm = FALSE;
+ is_atn_cpdlc = TRUE;
+ break;}
+ CATCH_ALL{
+ is_atn_cpdlc = FALSE;
+ is_pm = FALSE;}
+ ENDTRY;
+ break;
+ case dm:
+ TRY {
+ dissect_ProtectedAircraftPDUs_PDU(tvb, pinfo, NULL);
+ is_atn_cpdlc = TRUE;
+ is_pm = TRUE;
+ break;}
+ CATCH_ALL {
+ is_atn_cpdlc = FALSE;
+ is_pm = FALSE; }
+ ENDTRY;
+ TRY{
+ dissect_AircraftPDUs_PDU(tvb, pinfo, NULL);
+ is_atn_cpdlc = TRUE;
+ is_pm = FALSE;
+ break;}
+ CATCH_ALL{
+ is_atn_cpdlc = FALSE;
+ is_pm = FALSE;}
+ ENDTRY;
+ break;
+ default:
+ break;
+ }
+
+ if(is_atn_cpdlc){
+ /* note: */
+ /* all subsequent PDU's belonging to this conversation */
+ /* are considered CPDLC */
+ /* if the first CPDLC PDU has been decoded succesfully */
+ /* (This is done in "atn-ulcs" by using "call_dissector_with_data()") */
+
+ /* DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+ }
+ /* CR: srcref present, dstref is always zero */
+ if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+ /* CC: srcref and dstref present, always use src/srcref & dst */
+ if((pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+
+ if(atn_cv){ /* atn conversation found */
+ if(is_pm == TRUE) {
+ atn_cv->ae_qualifier = pmcpdlc; }
+ else {
+ atn_cv->ae_qualifier = cpdlc; }
+ dissect_atn_cpdlc(tvb, pinfo, tree, NULL);
+ }
+ }else { /* there should *always* be an atn conversation */
+ is_atn_cpdlc = FALSE;
+ }
+
+ return is_atn_cpdlc;
+}
+
+
+
+void proto_register_atn_cpdlc (void)
+{
+ static hf_register_info hf_atn_cpdlc[] = {
+
+/*--- Included file: packet-atn-cpdlc-hfarr.c ---*/
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-hfarr.c"
+ { &hf_atn_cpdlc_GroundPDUs_PDU,
+ { "GroundPDUs", "atn-cpdlc.GroundPDUs",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_GroundPDUs_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_AircraftPDUs_PDU,
+ { "AircraftPDUs", "atn-cpdlc.AircraftPDUs",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_AircraftPDUs_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_ProtectedGroundPDUs_PDU,
+ { "ProtectedGroundPDUs", "atn-cpdlc.ProtectedGroundPDUs",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ProtectedGroundPDUs_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_ProtectedAircraftPDUs_PDU,
+ { "ProtectedAircraftPDUs", "atn-cpdlc.ProtectedAircraftPDUs",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ProtectedAircraftPDUs_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_abortUser,
+ { "abortUser", "atn-cpdlc.abortUser",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_CPDLCUserAbortReason_vals), 0,
+ "CPDLCUserAbortReason", HFILL }},
+ { &hf_atn_cpdlc_abortProvider,
+ { "abortProvider", "atn-cpdlc.abortProvider",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_CPDLCProviderAbortReason_vals), 0,
+ "CPDLCProviderAbortReason", HFILL }},
+ { &hf_atn_cpdlc_startup,
+ { "startup", "atn-cpdlc.startup",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_UplinkMessage_vals), 0,
+ "UplinkMessage", HFILL }},
+ { &hf_atn_cpdlc_groundpdus_send,
+ { "send", "atn-cpdlc.send_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCUplinkMessage", HFILL }},
+ { &hf_atn_cpdlc_forward,
+ { "forward", "atn-cpdlc.forward_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCForwardMessage", HFILL }},
+ { &hf_atn_cpdlc_forwardresponse,
+ { "forwardresponse", "atn-cpdlc.forwardresponse",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ATCForwardResponse_vals), 0,
+ "ATCForwardResponse", HFILL }},
+ { &hf_atn_cpdlc_noMessage,
+ { "noMessage", "atn-cpdlc.noMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTCUplinkMessage,
+ { "aTCUplinkMessage", "atn-cpdlc.aTCUplinkMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_startdown,
+ { "startdown", "atn-cpdlc.startdown_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "StartDownMessage", HFILL }},
+ { &hf_atn_cpdlc_aircraftpdus_send,
+ { "send", "atn-cpdlc.send_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCDownlinkMessage", HFILL }},
+ { &hf_atn_cpdlc_mode,
+ { "mode", "atn-cpdlc.mode",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Mode_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_startDownlinkMessage,
+ { "startDownlinkMessage", "atn-cpdlc.startDownlinkMessage",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_DownlinkMessage_vals), 0,
+ "DownlinkMessage", HFILL }},
+ { &hf_atn_cpdlc_aTCDownlinkMessage,
+ { "aTCDownlinkMessage", "atn-cpdlc.aTCDownlinkMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_pmcpdlcuserabortreason,
+ { "abortUser", "atn-cpdlc.abortUser",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_PMCPDLCUserAbortReason_vals), 0,
+ "PMCPDLCUserAbortReason", HFILL }},
+ { &hf_atn_cpdlc_pmcpdlcproviderabortreason,
+ { "abortProvider", "atn-cpdlc.abortProvider",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_PMCPDLCProviderAbortReason_vals), 0,
+ "PMCPDLCProviderAbortReason", HFILL }},
+ { &hf_atn_cpdlc_protecteduplinkmessage,
+ { "startup", "atn-cpdlc.startup_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProtectedUplinkMessage", HFILL }},
+ { &hf_atn_cpdlc_algorithmIdentifier,
+ { "algorithmIdentifier", "atn-cpdlc.algorithmIdentifier",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_protectedMessage,
+ { "protectedMessage", "atn-cpdlc.protectedMessage",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "CPDLCMessage", HFILL }},
+ { &hf_atn_cpdlc_integrityCheck,
+ { "integrityCheck", "atn-cpdlc.integrityCheck",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING", HFILL }},
+ { &hf_atn_cpdlc_forwardHeader,
+ { "forwardHeader", "atn-cpdlc.forwardHeader_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_forwardMessage,
+ { "forwardMessage", "atn-cpdlc.forwardMessage",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ForwardMessage_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dateTime,
+ { "dateTime", "atn-cpdlc.dateTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DateTimeGroup", HFILL }},
+ { &hf_atn_cpdlc_aircraftID,
+ { "aircraftID", "atn-cpdlc.aircraftID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "AircraftFlightIdentification", HFILL }},
+ { &hf_atn_cpdlc_aircraftAddress,
+ { "aircraftAddress", "atn-cpdlc.aircraftAddress",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_upElementIDs,
+ { "upElementIDs", "atn-cpdlc.upElementIDs",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING", HFILL }},
+ { &hf_atn_cpdlc_downElementIDs,
+ { "downElementIDs", "atn-cpdlc.downElementIDs",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING", HFILL }},
+ { &hf_atn_cpdlc_protectedstartDownmessage,
+ { "startdown", "atn-cpdlc.startdown_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProtectedStartDownMessage", HFILL }},
+ { &hf_atn_cpdlc_send,
+ { "send", "atn-cpdlc.send_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProtectedDownlinkMessage", HFILL }},
+ { &hf_atn_cpdlc_protectedmode,
+ { "mode", "atn-cpdlc.mode",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ProtectedMode_vals), 0,
+ "ProtectedMode", HFILL }},
+ { &hf_atn_cpdlc_protecteddownlinkmessage,
+ { "startDownlinkMessage", "atn-cpdlc.startDownlinkMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProtectedDownlinkMessage", HFILL }},
+ { &hf_atn_cpdlc_header,
+ { "header", "atn-cpdlc.header_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCMessageHeader", HFILL }},
+ { &hf_atn_cpdlc_atcuplinkmessage_messagedata,
+ { "messageData", "atn-cpdlc.messageData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCUplinkMessageData", HFILL }},
+ { &hf_atn_cpdlc_atcuplinkmessagedata_elementids,
+ { "elementIds", "atn-cpdlc.elementIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId", HFILL }},
+ { &hf_atn_cpdlc_atcuplinkmessagedata_elementids_item,
+ { "ATCUplinkMsgElementId", "atn-cpdlc.ATCUplinkMsgElementId",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ATCUplinkMsgElementId_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_atcuplinkmessagedata_constraineddata,
+ { "constrainedData", "atn-cpdlc.constrainedData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "T_atcuplinkmessagedata_constraineddata", HFILL }},
+ { &hf_atn_cpdlc_routeClearanceData,
+ { "routeClearanceData", "atn-cpdlc.routeClearanceData",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_2_OF_RouteClearance", HFILL }},
+ { &hf_atn_cpdlc_routeClearanceData_item,
+ { "RouteClearance", "atn-cpdlc.RouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_atcdownlinkmessage_messagedata,
+ { "messageData", "atn-cpdlc.messageData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ATCDownlinkMessageData", HFILL }},
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_elementids,
+ { "elementIds", "atn-cpdlc.elementIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId", HFILL }},
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_elementids_item,
+ { "ATCDownlinkMsgElementId", "atn-cpdlc.ATCDownlinkMsgElementId",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ATCDownlinkMsgElementId_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_atcdownlinkmessagedata_constraineddata,
+ { "constrainedData", "atn-cpdlc.constrainedData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "T_atcdownlinkmessagedata_constraineddata", HFILL }},
+ { &hf_atn_cpdlc_messageIdNumber,
+ { "messageIdNumber", "atn-cpdlc.messageIdNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MsgIdentificationNumber", HFILL }},
+ { &hf_atn_cpdlc_messageRefNumber,
+ { "messageRefNumber", "atn-cpdlc.messageRefNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MsgReferenceNumber", HFILL }},
+ { &hf_atn_cpdlc_logicalAck,
+ { "logicalAck", "atn-cpdlc.logicalAck",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LogicalAck_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM0NULL,
+ { "uM0NULL", "atn-cpdlc.uM0NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM1NULL,
+ { "uM1NULL", "atn-cpdlc.uM1NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM2NULL,
+ { "uM2NULL", "atn-cpdlc.uM2NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM3NULL,
+ { "uM3NULL", "atn-cpdlc.uM3NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM4NULL,
+ { "uM4NULL", "atn-cpdlc.uM4NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM5NULL,
+ { "uM5NULL", "atn-cpdlc.uM5NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM6Level,
+ { "uM6Level", "atn-cpdlc.uM6Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM7Time,
+ { "uM7Time", "atn-cpdlc.uM7Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM8Position,
+ { "uM8Position", "atn-cpdlc.uM8Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM9Time,
+ { "uM9Time", "atn-cpdlc.uM9Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM10Position,
+ { "uM10Position", "atn-cpdlc.uM10Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM11Time,
+ { "uM11Time", "atn-cpdlc.uM11Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM12Position,
+ { "uM12Position", "atn-cpdlc.uM12Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM13TimeLevel,
+ { "uM13TimeLevel", "atn-cpdlc.uM13TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM14PositionLevel,
+ { "uM14PositionLevel", "atn-cpdlc.uM14PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM15TimeLevel,
+ { "uM15TimeLevel", "atn-cpdlc.uM15TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM16PositionLevel,
+ { "uM16PositionLevel", "atn-cpdlc.uM16PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM17TimeLevel,
+ { "uM17TimeLevel", "atn-cpdlc.uM17TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM18PositionLevel,
+ { "uM18PositionLevel", "atn-cpdlc.uM18PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM19Level,
+ { "uM19Level", "atn-cpdlc.uM19Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM20Level,
+ { "uM20Level", "atn-cpdlc.uM20Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM21TimeLevel,
+ { "uM21TimeLevel", "atn-cpdlc.uM21TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM22PositionLevel,
+ { "uM22PositionLevel", "atn-cpdlc.uM22PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM23Level,
+ { "uM23Level", "atn-cpdlc.uM23Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM24TimeLevel,
+ { "uM24TimeLevel", "atn-cpdlc.uM24TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM25PositionLevel,
+ { "uM25PositionLevel", "atn-cpdlc.uM25PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM26LevelTime,
+ { "uM26LevelTime", "atn-cpdlc.uM26LevelTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelTime", HFILL }},
+ { &hf_atn_cpdlc_uM27LevelPosition,
+ { "uM27LevelPosition", "atn-cpdlc.uM27LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM28LevelTime,
+ { "uM28LevelTime", "atn-cpdlc.uM28LevelTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelTime", HFILL }},
+ { &hf_atn_cpdlc_uM29LevelPosition,
+ { "uM29LevelPosition", "atn-cpdlc.uM29LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM30LevelLevel,
+ { "uM30LevelLevel", "atn-cpdlc.uM30LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_uM31LevelLevel,
+ { "uM31LevelLevel", "atn-cpdlc.uM31LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_uM32LevelLevel,
+ { "uM32LevelLevel", "atn-cpdlc.uM32LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_uM33NULL,
+ { "uM33NULL", "atn-cpdlc.uM33NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM34Level,
+ { "uM34Level", "atn-cpdlc.uM34Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM35Level,
+ { "uM35Level", "atn-cpdlc.uM35Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM36Level,
+ { "uM36Level", "atn-cpdlc.uM36Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM37Level,
+ { "uM37Level", "atn-cpdlc.uM37Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM38Level,
+ { "uM38Level", "atn-cpdlc.uM38Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM39Level,
+ { "uM39Level", "atn-cpdlc.uM39Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM40NULL,
+ { "uM40NULL", "atn-cpdlc.uM40NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM41NULL,
+ { "uM41NULL", "atn-cpdlc.uM41NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM42PositionLevel,
+ { "uM42PositionLevel", "atn-cpdlc.uM42PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM43PositionLevel,
+ { "uM43PositionLevel", "atn-cpdlc.uM43PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM44PositionLevel,
+ { "uM44PositionLevel", "atn-cpdlc.uM44PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM45PositionLevel,
+ { "uM45PositionLevel", "atn-cpdlc.uM45PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM46PositionLevel,
+ { "uM46PositionLevel", "atn-cpdlc.uM46PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM47PositionLevel,
+ { "uM47PositionLevel", "atn-cpdlc.uM47PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM48PositionLevel,
+ { "uM48PositionLevel", "atn-cpdlc.uM48PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM49PositionLevel,
+ { "uM49PositionLevel", "atn-cpdlc.uM49PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM50PositionLevelLevel,
+ { "uM50PositionLevelLevel", "atn-cpdlc.uM50PositionLevelLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevelLevel", HFILL }},
+ { &hf_atn_cpdlc_uM51PositionTime,
+ { "uM51PositionTime", "atn-cpdlc.uM51PositionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTime", HFILL }},
+ { &hf_atn_cpdlc_uM52PositionTime,
+ { "uM52PositionTime", "atn-cpdlc.uM52PositionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTime", HFILL }},
+ { &hf_atn_cpdlc_uM53PositionTime,
+ { "uM53PositionTime", "atn-cpdlc.uM53PositionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTime", HFILL }},
+ { &hf_atn_cpdlc_uM54PositionTimeTime,
+ { "uM54PositionTimeTime", "atn-cpdlc.uM54PositionTimeTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTimeTime", HFILL }},
+ { &hf_atn_cpdlc_uM55PositionSpeed,
+ { "uM55PositionSpeed", "atn-cpdlc.uM55PositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM56PositionSpeed,
+ { "uM56PositionSpeed", "atn-cpdlc.uM56PositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM57PositionSpeed,
+ { "uM57PositionSpeed", "atn-cpdlc.uM57PositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM58PositionTimeLevel,
+ { "uM58PositionTimeLevel", "atn-cpdlc.uM58PositionTimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM59PositionTimeLevel,
+ { "uM59PositionTimeLevel", "atn-cpdlc.uM59PositionTimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM60PositionTimeLevel,
+ { "uM60PositionTimeLevel", "atn-cpdlc.uM60PositionTimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTimeLevel", HFILL }},
+ { &hf_atn_cpdlc_uM61PositionLevelSpeed,
+ { "uM61PositionLevelSpeed", "atn-cpdlc.uM61PositionLevelSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevelSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM62TimePositionLevel,
+ { "uM62TimePositionLevel", "atn-cpdlc.uM62TimePositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimePositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM63TimePositionLevelSpeed,
+ { "uM63TimePositionLevelSpeed", "atn-cpdlc.uM63TimePositionLevelSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimePositionLevelSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM64DistanceSpecifiedDirection,
+ { "uM64DistanceSpecifiedDirection", "atn-cpdlc.uM64DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_uM65PositionDistanceSpecifiedDirection,
+ { "uM65PositionDistanceSpecifiedDirection", "atn-cpdlc.uM65PositionDistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionDistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_uM66TimeDistanceSpecifiedDirection,
+ { "uM66TimeDistanceSpecifiedDirection", "atn-cpdlc.uM66TimeDistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeDistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_uM67NULL,
+ { "uM67NULL", "atn-cpdlc.uM67NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM68Position,
+ { "uM68Position", "atn-cpdlc.uM68Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM69Time,
+ { "uM69Time", "atn-cpdlc.uM69Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM70Position,
+ { "uM70Position", "atn-cpdlc.uM70Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM71Time,
+ { "uM71Time", "atn-cpdlc.uM71Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM72NULL,
+ { "uM72NULL", "atn-cpdlc.uM72NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM73DepartureClearance,
+ { "uM73DepartureClearance", "atn-cpdlc.uM73DepartureClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DepartureClearance", HFILL }},
+ { &hf_atn_cpdlc_uM74Position,
+ { "uM74Position", "atn-cpdlc.uM74Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM75Position,
+ { "uM75Position", "atn-cpdlc.uM75Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM76TimePosition,
+ { "uM76TimePosition", "atn-cpdlc.uM76TimePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimePosition", HFILL }},
+ { &hf_atn_cpdlc_uM77PositionPosition,
+ { "uM77PositionPosition", "atn-cpdlc.uM77PositionPosition",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PositionPosition", HFILL }},
+ { &hf_atn_cpdlc_uM78LevelPosition,
+ { "uM78LevelPosition", "atn-cpdlc.uM78LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM79PositionRouteClearance,
+ { "uM79PositionRouteClearance", "atn-cpdlc.uM79PositionRouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionRouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_uM80RouteClearance,
+ { "uM80RouteClearance", "atn-cpdlc.uM80RouteClearance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_uM81ProcedureName,
+ { "uM81ProcedureName", "atn-cpdlc.uM81ProcedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_uM82DistanceSpecifiedDirection,
+ { "uM82DistanceSpecifiedDirection", "atn-cpdlc.uM82DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_uM83PositionRouteClearance,
+ { "uM83PositionRouteClearance", "atn-cpdlc.uM83PositionRouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionRouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_uM84PositionProcedureName,
+ { "uM84PositionProcedureName", "atn-cpdlc.uM84PositionProcedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionProcedureName", HFILL }},
+ { &hf_atn_cpdlc_uM85RouteClearance,
+ { "uM85RouteClearance", "atn-cpdlc.uM85RouteClearance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_uM86PositionRouteClearance,
+ { "uM86PositionRouteClearance", "atn-cpdlc.uM86PositionRouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionRouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_uM87Position,
+ { "uM87Position", "atn-cpdlc.uM87Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM88PositionPosition,
+ { "uM88PositionPosition", "atn-cpdlc.uM88PositionPosition",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PositionPosition", HFILL }},
+ { &hf_atn_cpdlc_uM89TimePosition,
+ { "uM89TimePosition", "atn-cpdlc.uM89TimePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimePosition", HFILL }},
+ { &hf_atn_cpdlc_uM90LevelPosition,
+ { "uM90LevelPosition", "atn-cpdlc.uM90LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM91HoldClearance,
+ { "uM91HoldClearance", "atn-cpdlc.uM91HoldClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "HoldClearance", HFILL }},
+ { &hf_atn_cpdlc_uM92PositionLevel,
+ { "uM92PositionLevel", "atn-cpdlc.uM92PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM93Time,
+ { "uM93Time", "atn-cpdlc.uM93Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM94DirectionDegrees,
+ { "uM94DirectionDegrees", "atn-cpdlc.uM94DirectionDegrees_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DirectionDegrees", HFILL }},
+ { &hf_atn_cpdlc_uM95DirectionDegrees,
+ { "uM95DirectionDegrees", "atn-cpdlc.uM95DirectionDegrees_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DirectionDegrees", HFILL }},
+ { &hf_atn_cpdlc_uM96NULL,
+ { "uM96NULL", "atn-cpdlc.uM96NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM97PositionDegrees,
+ { "uM97PositionDegrees", "atn-cpdlc.uM97PositionDegrees_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionDegrees", HFILL }},
+ { &hf_atn_cpdlc_uM98DirectionDegrees,
+ { "uM98DirectionDegrees", "atn-cpdlc.uM98DirectionDegrees_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DirectionDegrees", HFILL }},
+ { &hf_atn_cpdlc_uM99ProcedureName,
+ { "uM99ProcedureName", "atn-cpdlc.uM99ProcedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_uM100TimeSpeed,
+ { "uM100TimeSpeed", "atn-cpdlc.uM100TimeSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM101PositionSpeed,
+ { "uM101PositionSpeed", "atn-cpdlc.uM101PositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM102LevelSpeed,
+ { "uM102LevelSpeed", "atn-cpdlc.uM102LevelSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM103TimeSpeedSpeed,
+ { "uM103TimeSpeedSpeed", "atn-cpdlc.uM103TimeSpeedSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeSpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM104PositionSpeedSpeed,
+ { "uM104PositionSpeedSpeed", "atn-cpdlc.uM104PositionSpeedSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM105LevelSpeedSpeed,
+ { "uM105LevelSpeedSpeed", "atn-cpdlc.uM105LevelSpeedSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelSpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM106Speed,
+ { "uM106Speed", "atn-cpdlc.uM106Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM107NULL,
+ { "uM107NULL", "atn-cpdlc.uM107NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM108Speed,
+ { "uM108Speed", "atn-cpdlc.uM108Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM109Speed,
+ { "uM109Speed", "atn-cpdlc.uM109Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM110SpeedSpeed,
+ { "uM110SpeedSpeed", "atn-cpdlc.uM110SpeedSpeed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM111Speed,
+ { "uM111Speed", "atn-cpdlc.uM111Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM112Speed,
+ { "uM112Speed", "atn-cpdlc.uM112Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM113Speed,
+ { "uM113Speed", "atn-cpdlc.uM113Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM114Speed,
+ { "uM114Speed", "atn-cpdlc.uM114Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM115Speed,
+ { "uM115Speed", "atn-cpdlc.uM115Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM116NULL,
+ { "uM116NULL", "atn-cpdlc.uM116NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM117UnitNameFrequency,
+ { "uM117UnitNameFrequency", "atn-cpdlc.uM117UnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM118PositionUnitNameFrequency,
+ { "uM118PositionUnitNameFrequency", "atn-cpdlc.uM118PositionUnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionUnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM119TimeUnitNameFrequency,
+ { "uM119TimeUnitNameFrequency", "atn-cpdlc.uM119TimeUnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeUnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM120UnitNameFrequency,
+ { "uM120UnitNameFrequency", "atn-cpdlc.uM120UnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM121PositionUnitNameFrequency,
+ { "uM121PositionUnitNameFrequency", "atn-cpdlc.uM121PositionUnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionUnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM122TimeUnitNameFrequency,
+ { "uM122TimeUnitNameFrequency", "atn-cpdlc.uM122TimeUnitNameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeUnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_uM123Code,
+ { "uM123Code", "atn-cpdlc.uM123Code",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Code", HFILL }},
+ { &hf_atn_cpdlc_uM124NULL,
+ { "uM124NULL", "atn-cpdlc.uM124NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM125NULL,
+ { "uM125NULL", "atn-cpdlc.uM125NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM126NULL,
+ { "uM126NULL", "atn-cpdlc.uM126NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM127NULL,
+ { "uM127NULL", "atn-cpdlc.uM127NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM128Level,
+ { "uM128Level", "atn-cpdlc.uM128Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM129Level,
+ { "uM129Level", "atn-cpdlc.uM129Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM130Position,
+ { "uM130Position", "atn-cpdlc.uM130Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM131NULL,
+ { "uM131NULL", "atn-cpdlc.uM131NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM132NULL,
+ { "uM132NULL", "atn-cpdlc.uM132NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM133NULL,
+ { "uM133NULL", "atn-cpdlc.uM133NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM134SpeedTypeSpeedTypeSpeedType,
+ { "uM134SpeedTypeSpeedTypeSpeedType", "atn-cpdlc.uM134SpeedTypeSpeedTypeSpeedType",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedTypeSpeedTypeSpeedType", HFILL }},
+ { &hf_atn_cpdlc_uM135NULL,
+ { "uM135NULL", "atn-cpdlc.uM135NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM136NULL,
+ { "uM136NULL", "atn-cpdlc.uM136NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM137NULL,
+ { "uM137NULL", "atn-cpdlc.uM137NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM138NULL,
+ { "uM138NULL", "atn-cpdlc.uM138NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM139NULL,
+ { "uM139NULL", "atn-cpdlc.uM139NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM140NULL,
+ { "uM140NULL", "atn-cpdlc.uM140NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM141NULL,
+ { "uM141NULL", "atn-cpdlc.uM141NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM142NULL,
+ { "uM142NULL", "atn-cpdlc.uM142NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM143NULL,
+ { "uM143NULL", "atn-cpdlc.uM143NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM144NULL,
+ { "uM144NULL", "atn-cpdlc.uM144NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM145NULL,
+ { "uM145NULL", "atn-cpdlc.uM145NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM146NULL,
+ { "uM146NULL", "atn-cpdlc.uM146NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM147NULL,
+ { "uM147NULL", "atn-cpdlc.uM147NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM148Level,
+ { "uM148Level", "atn-cpdlc.uM148Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM149LevelPosition,
+ { "uM149LevelPosition", "atn-cpdlc.uM149LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM150LevelTime,
+ { "uM150LevelTime", "atn-cpdlc.uM150LevelTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelTime", HFILL }},
+ { &hf_atn_cpdlc_uM151Speed,
+ { "uM151Speed", "atn-cpdlc.uM151Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM152DistanceSpecifiedDirection,
+ { "uM152DistanceSpecifiedDirection", "atn-cpdlc.uM152DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_uM153Altimeter,
+ { "uM153Altimeter", "atn-cpdlc.uM153Altimeter",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Altimeter_vals), 0,
+ "Altimeter", HFILL }},
+ { &hf_atn_cpdlc_uM154NULL,
+ { "uM154NULL", "atn-cpdlc.uM154NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM155Position,
+ { "uM155Position", "atn-cpdlc.uM155Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM156NULL,
+ { "uM156NULL", "atn-cpdlc.uM156NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM157Frequency,
+ { "uM157Frequency", "atn-cpdlc.uM157Frequency",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Frequency_vals), 0,
+ "Frequency", HFILL }},
+ { &hf_atn_cpdlc_uM158AtisCode,
+ { "uM158AtisCode", "atn-cpdlc.uM158AtisCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "ATISCode", HFILL }},
+ { &hf_atn_cpdlc_uM159ErrorInformation,
+ { "uM159ErrorInformation", "atn-cpdlc.uM159ErrorInformation",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ErrorInformation_vals), 0,
+ "ErrorInformation", HFILL }},
+ { &hf_atn_cpdlc_uM160Facility,
+ { "uM160Facility", "atn-cpdlc.uM160Facility",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Facility_vals), 0,
+ "Facility", HFILL }},
+ { &hf_atn_cpdlc_uM161NULL,
+ { "uM161NULL", "atn-cpdlc.uM161NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM162NULL,
+ { "uM162NULL", "atn-cpdlc.uM162NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM163FacilityDesignation,
+ { "uM163FacilityDesignation", "atn-cpdlc.uM163FacilityDesignation",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FacilityDesignation", HFILL }},
+ { &hf_atn_cpdlc_uM164NULL,
+ { "uM164NULL", "atn-cpdlc.uM164NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM165NULL,
+ { "uM165NULL", "atn-cpdlc.uM165NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM166TrafficType,
+ { "uM166TrafficType", "atn-cpdlc.uM166TrafficType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_TrafficType_vals), 0,
+ "TrafficType", HFILL }},
+ { &hf_atn_cpdlc_uM167NULL,
+ { "uM167NULL", "atn-cpdlc.uM167NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM168NULL,
+ { "uM168NULL", "atn-cpdlc.uM168NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM169FreeText,
+ { "uM169FreeText", "atn-cpdlc.uM169FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM170FreeText,
+ { "uM170FreeText", "atn-cpdlc.uM170FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM171VerticalRate,
+ { "uM171VerticalRate", "atn-cpdlc.uM171VerticalRate",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalRate_vals), 0,
+ "VerticalRate", HFILL }},
+ { &hf_atn_cpdlc_uM172VerticalRate,
+ { "uM172VerticalRate", "atn-cpdlc.uM172VerticalRate",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalRate_vals), 0,
+ "VerticalRate", HFILL }},
+ { &hf_atn_cpdlc_uM173VerticalRate,
+ { "uM173VerticalRate", "atn-cpdlc.uM173VerticalRate",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalRate_vals), 0,
+ "VerticalRate", HFILL }},
+ { &hf_atn_cpdlc_uM174VerticalRate,
+ { "uM174VerticalRate", "atn-cpdlc.uM174VerticalRate",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalRate_vals), 0,
+ "VerticalRate", HFILL }},
+ { &hf_atn_cpdlc_uM175Level,
+ { "uM175Level", "atn-cpdlc.uM175Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM176NULL,
+ { "uM176NULL", "atn-cpdlc.uM176NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM177NULL,
+ { "uM177NULL", "atn-cpdlc.uM177NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM178NULL,
+ { "uM178NULL", "atn-cpdlc.uM178NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM179NULL,
+ { "uM179NULL", "atn-cpdlc.uM179NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM180LevelLevel,
+ { "uM180LevelLevel", "atn-cpdlc.uM180LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_uM181ToFromPosition,
+ { "uM181ToFromPosition", "atn-cpdlc.uM181ToFromPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ToFromPosition", HFILL }},
+ { &hf_atn_cpdlc_uM182NULL,
+ { "uM182NULL", "atn-cpdlc.uM182NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM183FreeText,
+ { "uM183FreeText", "atn-cpdlc.uM183FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM184TimeToFromPosition,
+ { "uM184TimeToFromPosition", "atn-cpdlc.uM184TimeToFromPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeToFromPosition", HFILL }},
+ { &hf_atn_cpdlc_uM185PositionLevel,
+ { "uM185PositionLevel", "atn-cpdlc.uM185PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM186PositionLevel,
+ { "uM186PositionLevel", "atn-cpdlc.uM186PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_uM187FreeText,
+ { "uM187FreeText", "atn-cpdlc.uM187FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM188PositionSpeed,
+ { "uM188PositionSpeed", "atn-cpdlc.uM188PositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionSpeed", HFILL }},
+ { &hf_atn_cpdlc_uM189Speed,
+ { "uM189Speed", "atn-cpdlc.uM189Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_uM190Degrees,
+ { "uM190Degrees", "atn-cpdlc.uM190Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_uM191NULL,
+ { "uM191NULL", "atn-cpdlc.uM191NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM192LevelTime,
+ { "uM192LevelTime", "atn-cpdlc.uM192LevelTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelTime", HFILL }},
+ { &hf_atn_cpdlc_uM193NULL,
+ { "uM193NULL", "atn-cpdlc.uM193NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM194FreeText,
+ { "uM194FreeText", "atn-cpdlc.uM194FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM195FreeText,
+ { "uM195FreeText", "atn-cpdlc.uM195FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM196FreeText,
+ { "uM196FreeText", "atn-cpdlc.uM196FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM197FreeText,
+ { "uM197FreeText", "atn-cpdlc.uM197FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM198FreeText,
+ { "uM198FreeText", "atn-cpdlc.uM198FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM199FreeText,
+ { "uM199FreeText", "atn-cpdlc.uM199FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM200NULL,
+ { "uM200NULL", "atn-cpdlc.uM200NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM201NULL,
+ { "uM201NULL", "atn-cpdlc.uM201NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM202NULL,
+ { "uM202NULL", "atn-cpdlc.uM202NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM203FreeText,
+ { "uM203FreeText", "atn-cpdlc.uM203FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM204FreeText,
+ { "uM204FreeText", "atn-cpdlc.uM204FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM205FreeText,
+ { "uM205FreeText", "atn-cpdlc.uM205FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM206FreeText,
+ { "uM206FreeText", "atn-cpdlc.uM206FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM207FreeText,
+ { "uM207FreeText", "atn-cpdlc.uM207FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM208FreeText,
+ { "uM208FreeText", "atn-cpdlc.uM208FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_uM209LevelPosition,
+ { "uM209LevelPosition", "atn-cpdlc.uM209LevelPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelPosition", HFILL }},
+ { &hf_atn_cpdlc_uM210Position,
+ { "uM210Position", "atn-cpdlc.uM210Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM211NULL,
+ { "uM211NULL", "atn-cpdlc.uM211NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM212FacilityDesignationATISCode,
+ { "uM212FacilityDesignationATISCode", "atn-cpdlc.uM212FacilityDesignationATISCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "FacilityDesignationATISCode", HFILL }},
+ { &hf_atn_cpdlc_uM213FacilityDesignationAltimeter,
+ { "uM213FacilityDesignationAltimeter", "atn-cpdlc.uM213FacilityDesignationAltimeter_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "FacilityDesignationAltimeter", HFILL }},
+ { &hf_atn_cpdlc_uM214RunwayRVR,
+ { "uM214RunwayRVR", "atn-cpdlc.uM214RunwayRVR_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RunwayRVR", HFILL }},
+ { &hf_atn_cpdlc_uM215DirectionDegrees,
+ { "uM215DirectionDegrees", "atn-cpdlc.uM215DirectionDegrees_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DirectionDegrees", HFILL }},
+ { &hf_atn_cpdlc_uM216NULL,
+ { "uM216NULL", "atn-cpdlc.uM216NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM217NULL,
+ { "uM217NULL", "atn-cpdlc.uM217NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM218NULL,
+ { "uM218NULL", "atn-cpdlc.uM218NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM219Level,
+ { "uM219Level", "atn-cpdlc.uM219Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM220Level,
+ { "uM220Level", "atn-cpdlc.uM220Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_uM221Degrees,
+ { "uM221Degrees", "atn-cpdlc.uM221Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_uM222NULL,
+ { "uM222NULL", "atn-cpdlc.uM222NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM223NULL,
+ { "uM223NULL", "atn-cpdlc.uM223NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM224NULL,
+ { "uM224NULL", "atn-cpdlc.uM224NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM225NULL,
+ { "uM225NULL", "atn-cpdlc.uM225NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM226Time,
+ { "uM226Time", "atn-cpdlc.uM226Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_uM227NULL,
+ { "uM227NULL", "atn-cpdlc.uM227NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM228Position,
+ { "uM228Position", "atn-cpdlc.uM228Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_uM229NULL,
+ { "uM229NULL", "atn-cpdlc.uM229NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM230NULL,
+ { "uM230NULL", "atn-cpdlc.uM230NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM231NULL,
+ { "uM231NULL", "atn-cpdlc.uM231NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM232NULL,
+ { "uM232NULL", "atn-cpdlc.uM232NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM233NULL,
+ { "uM233NULL", "atn-cpdlc.uM233NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM234NULL,
+ { "uM234NULL", "atn-cpdlc.uM234NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM235NULL,
+ { "uM235NULL", "atn-cpdlc.uM235NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM236NULL,
+ { "uM236NULL", "atn-cpdlc.uM236NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_uM237NULL,
+ { "uM237NULL", "atn-cpdlc.uM237NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM0NULL,
+ { "dM0NULL", "atn-cpdlc.dM0NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM1NULL,
+ { "dM1NULL", "atn-cpdlc.dM1NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM2NULL,
+ { "dM2NULL", "atn-cpdlc.dM2NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM3NULL,
+ { "dM3NULL", "atn-cpdlc.dM3NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM4NULL,
+ { "dM4NULL", "atn-cpdlc.dM4NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM5NULL,
+ { "dM5NULL", "atn-cpdlc.dM5NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM6Level,
+ { "dM6Level", "atn-cpdlc.dM6Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM7LevelLevel,
+ { "dM7LevelLevel", "atn-cpdlc.dM7LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_dM8Level,
+ { "dM8Level", "atn-cpdlc.dM8Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM9Level,
+ { "dM9Level", "atn-cpdlc.dM9Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM10Level,
+ { "dM10Level", "atn-cpdlc.dM10Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM11PositionLevel,
+ { "dM11PositionLevel", "atn-cpdlc.dM11PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_dM12PositionLevel,
+ { "dM12PositionLevel", "atn-cpdlc.dM12PositionLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionLevel", HFILL }},
+ { &hf_atn_cpdlc_dM13TimeLevel,
+ { "dM13TimeLevel", "atn-cpdlc.dM13TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_dM14TimeLevel,
+ { "dM14TimeLevel", "atn-cpdlc.dM14TimeLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeLevel", HFILL }},
+ { &hf_atn_cpdlc_dM15DistanceSpecifiedDirection,
+ { "dM15DistanceSpecifiedDirection", "atn-cpdlc.dM15DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM16PositionDistanceSpecifiedDirection,
+ { "dM16PositionDistanceSpecifiedDirection", "atn-cpdlc.dM16PositionDistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionDistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM17TimeDistanceSpecifiedDirection,
+ { "dM17TimeDistanceSpecifiedDirection", "atn-cpdlc.dM17TimeDistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeDistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM18Speed,
+ { "dM18Speed", "atn-cpdlc.dM18Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_dM19SpeedSpeed,
+ { "dM19SpeedSpeed", "atn-cpdlc.dM19SpeedSpeed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_dM20NULL,
+ { "dM20NULL", "atn-cpdlc.dM20NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM21Frequency,
+ { "dM21Frequency", "atn-cpdlc.dM21Frequency",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Frequency_vals), 0,
+ "Frequency", HFILL }},
+ { &hf_atn_cpdlc_dM22Position,
+ { "dM22Position", "atn-cpdlc.dM22Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM23ProcedureName,
+ { "dM23ProcedureName", "atn-cpdlc.dM23ProcedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_dM24RouteClearance,
+ { "dM24RouteClearance", "atn-cpdlc.dM24RouteClearance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_dM25ClearanceType,
+ { "dM25ClearanceType", "atn-cpdlc.dM25ClearanceType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ClearanceType_vals), 0,
+ "ClearanceType", HFILL }},
+ { &hf_atn_cpdlc_dM26PositionRouteClearance,
+ { "dM26PositionRouteClearance", "atn-cpdlc.dM26PositionRouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionRouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_dM27DistanceSpecifiedDirection,
+ { "dM27DistanceSpecifiedDirection", "atn-cpdlc.dM27DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM28Level,
+ { "dM28Level", "atn-cpdlc.dM28Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM29Level,
+ { "dM29Level", "atn-cpdlc.dM29Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM30Level,
+ { "dM30Level", "atn-cpdlc.dM30Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM31Position,
+ { "dM31Position", "atn-cpdlc.dM31Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM32Level,
+ { "dM32Level", "atn-cpdlc.dM32Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM33Position,
+ { "dM33Position", "atn-cpdlc.dM33Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM34Speed,
+ { "dM34Speed", "atn-cpdlc.dM34Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_dM35Degrees,
+ { "dM35Degrees", "atn-cpdlc.dM35Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_dM36Degrees,
+ { "dM36Degrees", "atn-cpdlc.dM36Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_dM37Level,
+ { "dM37Level", "atn-cpdlc.dM37Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM38Level,
+ { "dM38Level", "atn-cpdlc.dM38Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM39Speed,
+ { "dM39Speed", "atn-cpdlc.dM39Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_dM40RouteClearance,
+ { "dM40RouteClearance", "atn-cpdlc.dM40RouteClearance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_dM41NULL,
+ { "dM41NULL", "atn-cpdlc.dM41NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM42Position,
+ { "dM42Position", "atn-cpdlc.dM42Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM43Time,
+ { "dM43Time", "atn-cpdlc.dM43Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_dM44Position,
+ { "dM44Position", "atn-cpdlc.dM44Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM45Position,
+ { "dM45Position", "atn-cpdlc.dM45Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM46Time,
+ { "dM46Time", "atn-cpdlc.dM46Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_dM47Code,
+ { "dM47Code", "atn-cpdlc.dM47Code",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Code", HFILL }},
+ { &hf_atn_cpdlc_dM48PositionReport,
+ { "dM48PositionReport", "atn-cpdlc.dM48PositionReport_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionReport", HFILL }},
+ { &hf_atn_cpdlc_dM49Speed,
+ { "dM49Speed", "atn-cpdlc.dM49Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_dM50SpeedSpeed,
+ { "dM50SpeedSpeed", "atn-cpdlc.dM50SpeedSpeed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_dM51NULL,
+ { "dM51NULL", "atn-cpdlc.dM51NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM52NULL,
+ { "dM52NULL", "atn-cpdlc.dM52NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM53NULL,
+ { "dM53NULL", "atn-cpdlc.dM53NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM54Level,
+ { "dM54Level", "atn-cpdlc.dM54Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM55NULL,
+ { "dM55NULL", "atn-cpdlc.dM55NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM56NULL,
+ { "dM56NULL", "atn-cpdlc.dM56NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM57RemainingFuelPersonsOnBoard,
+ { "dM57RemainingFuelPersonsOnBoard", "atn-cpdlc.dM57RemainingFuelPersonsOnBoard_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RemainingFuelPersonsOnBoard", HFILL }},
+ { &hf_atn_cpdlc_dM58NULL,
+ { "dM58NULL", "atn-cpdlc.dM58NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM59PositionRouteClearance,
+ { "dM59PositionRouteClearance", "atn-cpdlc.dM59PositionRouteClearance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionRouteClearanceIndex", HFILL }},
+ { &hf_atn_cpdlc_dM60DistanceSpecifiedDirection,
+ { "dM60DistanceSpecifiedDirection", "atn-cpdlc.dM60DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM61Level,
+ { "dM61Level", "atn-cpdlc.dM61Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM62ErrorInformation,
+ { "dM62ErrorInformation", "atn-cpdlc.dM62ErrorInformation",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ErrorInformation_vals), 0,
+ "ErrorInformation", HFILL }},
+ { &hf_atn_cpdlc_dM63NULL,
+ { "dM63NULL", "atn-cpdlc.dM63NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM64FacilityDesignation,
+ { "dM64FacilityDesignation", "atn-cpdlc.dM64FacilityDesignation",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FacilityDesignation", HFILL }},
+ { &hf_atn_cpdlc_dM65NULL,
+ { "dM65NULL", "atn-cpdlc.dM65NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM66NULL,
+ { "dM66NULL", "atn-cpdlc.dM66NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM67FreeText,
+ { "dM67FreeText", "atn-cpdlc.dM67FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM68FreeText,
+ { "dM68FreeText", "atn-cpdlc.dM68FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM69NULL,
+ { "dM69NULL", "atn-cpdlc.dM69NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM70Degrees,
+ { "dM70Degrees", "atn-cpdlc.dM70Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_dM71Degrees,
+ { "dM71Degrees", "atn-cpdlc.dM71Degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_dM72Level,
+ { "dM72Level", "atn-cpdlc.dM72Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM73Versionnumber,
+ { "dM73Versionnumber", "atn-cpdlc.dM73Versionnumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "VersionNumber", HFILL }},
+ { &hf_atn_cpdlc_dM74NULL,
+ { "dM74NULL", "atn-cpdlc.dM74NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM75NULL,
+ { "dM75NULL", "atn-cpdlc.dM75NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM76LevelLevel,
+ { "dM76LevelLevel", "atn-cpdlc.dM76LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_dM77LevelLevel,
+ { "dM77LevelLevel", "atn-cpdlc.dM77LevelLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_dM78TimeDistanceToFromPosition,
+ { "dM78TimeDistanceToFromPosition", "atn-cpdlc.dM78TimeDistanceToFromPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeDistanceToFromPosition", HFILL }},
+ { &hf_atn_cpdlc_dM79AtisCode,
+ { "dM79AtisCode", "atn-cpdlc.dM79AtisCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "ATISCode", HFILL }},
+ { &hf_atn_cpdlc_dM80DistanceSpecifiedDirection,
+ { "dM80DistanceSpecifiedDirection", "atn-cpdlc.dM80DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM81LevelTime,
+ { "dM81LevelTime", "atn-cpdlc.dM81LevelTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LevelTime", HFILL }},
+ { &hf_atn_cpdlc_dM82Level,
+ { "dM82Level", "atn-cpdlc.dM82Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM83SpeedTime,
+ { "dM83SpeedTime", "atn-cpdlc.dM83SpeedTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "SpeedTime", HFILL }},
+ { &hf_atn_cpdlc_dM84Speed,
+ { "dM84Speed", "atn-cpdlc.dM84Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_dM85DistanceSpecifiedDirectionTime,
+ { "dM85DistanceSpecifiedDirectionTime", "atn-cpdlc.dM85DistanceSpecifiedDirectionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirectionTime", HFILL }},
+ { &hf_atn_cpdlc_dM86DistanceSpecifiedDirection,
+ { "dM86DistanceSpecifiedDirection", "atn-cpdlc.dM86DistanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceSpecifiedDirection", HFILL }},
+ { &hf_atn_cpdlc_dM87Level,
+ { "dM87Level", "atn-cpdlc.dM87Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM88Level,
+ { "dM88Level", "atn-cpdlc.dM88Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM89UnitnameFrequency,
+ { "dM89UnitnameFrequency", "atn-cpdlc.dM89UnitnameFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_dM90FreeText,
+ { "dM90FreeText", "atn-cpdlc.dM90FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM91FreeText,
+ { "dM91FreeText", "atn-cpdlc.dM91FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM92FreeText,
+ { "dM92FreeText", "atn-cpdlc.dM92FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM93FreeText,
+ { "dM93FreeText", "atn-cpdlc.dM93FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM94FreeText,
+ { "dM94FreeText", "atn-cpdlc.dM94FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM95FreeText,
+ { "dM95FreeText", "atn-cpdlc.dM95FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM96FreeText,
+ { "dM96FreeText", "atn-cpdlc.dM96FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM97FreeText,
+ { "dM97FreeText", "atn-cpdlc.dM97FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM98FreeText,
+ { "dM98FreeText", "atn-cpdlc.dM98FreeText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "FreeText", HFILL }},
+ { &hf_atn_cpdlc_dM99NULL,
+ { "dM99NULL", "atn-cpdlc.dM99NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM100NULL,
+ { "dM100NULL", "atn-cpdlc.dM100NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM101NULL,
+ { "dM101NULL", "atn-cpdlc.dM101NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM102NULL,
+ { "dM102NULL", "atn-cpdlc.dM102NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM103NULL,
+ { "dM103NULL", "atn-cpdlc.dM103NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM104PositionTime,
+ { "dM104PositionTime", "atn-cpdlc.dM104PositionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PositionTime", HFILL }},
+ { &hf_atn_cpdlc_dM105Airport,
+ { "dM105Airport", "atn-cpdlc.dM105Airport",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Airport", HFILL }},
+ { &hf_atn_cpdlc_dM106Level,
+ { "dM106Level", "atn-cpdlc.dM106Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_dM107NULL,
+ { "dM107NULL", "atn-cpdlc.dM107NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM108NULL,
+ { "dM108NULL", "atn-cpdlc.dM108NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM109Time,
+ { "dM109Time", "atn-cpdlc.dM109Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_dM110Position,
+ { "dM110Position", "atn-cpdlc.dM110Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_dM111TimePosition,
+ { "dM111TimePosition", "atn-cpdlc.dM111TimePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimePosition", HFILL }},
+ { &hf_atn_cpdlc_dM112NULL,
+ { "dM112NULL", "atn-cpdlc.dM112NULL_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_dM113SpeedTypeSpeedTypeSpeedTypeSpeed,
+ { "dM113SpeedTypeSpeedTypeSpeedTypeSpeed", "atn-cpdlc.dM113SpeedTypeSpeedTypeSpeedTypeSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "SpeedTypeSpeedTypeSpeedTypeSpeed", HFILL }},
+ { &hf_atn_cpdlc_altimeterEnglish,
+ { "altimeterEnglish", "atn-cpdlc.altimeterEnglish",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_altimeterMetric,
+ { "altimeterMetric", "atn-cpdlc.altimeterMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_position,
+ { "position", "atn-cpdlc.position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTWDistance,
+ { "aTWDistance", "atn-cpdlc.aTWDistance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speed,
+ { "speed", "atn-cpdlc.speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTWLevels,
+ { "aTWLevels", "atn-cpdlc.aTWLevels",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ATWLevelSequence", HFILL }},
+ { &hf_atn_cpdlc_atw,
+ { "atw", "atn-cpdlc.atw",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ATWLevelTolerance_vals), 0,
+ "ATWLevelTolerance", HFILL }},
+ { &hf_atn_cpdlc_level,
+ { "level", "atn-cpdlc.level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_ATWLevelSequence_item,
+ { "ATWLevel", "atn-cpdlc.ATWLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_atwDistanceTolerance,
+ { "atwDistanceTolerance", "atn-cpdlc.atwDistanceTolerance",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ATWDistanceTolerance_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distance,
+ { "distance", "atn-cpdlc.distance",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Distance_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_Code_item,
+ { "CodeOctalDigit", "atn-cpdlc.CodeOctalDigit",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_time,
+ { "time", "atn-cpdlc.time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_timeTolerance,
+ { "timeTolerance", "atn-cpdlc.timeTolerance",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_TimeTolerance_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_year,
+ { "year", "atn-cpdlc.year",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_month,
+ { "month", "atn-cpdlc.month",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_day,
+ { "day", "atn-cpdlc.day",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_date,
+ { "date", "atn-cpdlc.date_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_timehhmmss,
+ { "timehhmmss", "atn-cpdlc.timehhmmss_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_degreesMagnetic,
+ { "degreesMagnetic", "atn-cpdlc.degreesMagnetic",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_degreesTrue,
+ { "degreesTrue", "atn-cpdlc.degreesTrue",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aircraftFlightIdentification,
+ { "aircraftFlightIdentification", "atn-cpdlc.aircraftFlightIdentification",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_clearanceLimit,
+ { "clearanceLimit", "atn-cpdlc.clearanceLimit",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_flightInformation,
+ { "flightInformation", "atn-cpdlc.flightInformation",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_FlightInformation_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_furtherInstructions,
+ { "furtherInstructions", "atn-cpdlc.furtherInstructions_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_direction,
+ { "direction", "atn-cpdlc.direction",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Direction_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_degrees,
+ { "degrees", "atn-cpdlc.degrees",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceNm,
+ { "distanceNm", "atn-cpdlc.distanceNm",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceKm,
+ { "distanceKm", "atn-cpdlc.distanceKm",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceSpecifiedNm,
+ { "distanceSpecifiedNm", "atn-cpdlc.distanceSpecifiedNm",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceSpecifiedKm,
+ { "distanceSpecifiedKm", "atn-cpdlc.distanceSpecifiedKm",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceSpecified,
+ { "distanceSpecified", "atn-cpdlc.distanceSpecified",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_DistanceSpecified_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_distanceSpecifiedDirection,
+ { "distanceSpecifiedDirection", "atn-cpdlc.distanceSpecifiedDirection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_noFacility,
+ { "noFacility", "atn-cpdlc.noFacility_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_facilityDesignation,
+ { "facilityDesignation", "atn-cpdlc.facilityDesignation",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_altimeter,
+ { "altimeter", "atn-cpdlc.altimeter",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Altimeter_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTISCode,
+ { "aTISCode", "atn-cpdlc.aTISCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_fixname_name,
+ { "name", "atn-cpdlc.name",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Fix", HFILL }},
+ { &hf_atn_cpdlc_latlon,
+ { "latlon", "atn-cpdlc.latlon_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LatitudeLongitude", HFILL }},
+ { &hf_atn_cpdlc_routeOfFlight,
+ { "routeOfFlight", "atn-cpdlc.routeOfFlight",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_RouteInformation_vals), 0,
+ "RouteInformation", HFILL }},
+ { &hf_atn_cpdlc_levelsOfFlight,
+ { "levelsOfFlight", "atn-cpdlc.levelsOfFlight",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LevelsOfFlight_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_routeAndLevels,
+ { "routeAndLevels", "atn-cpdlc.routeAndLevels_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequencyhf,
+ { "frequencyhf", "atn-cpdlc.frequencyhf",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequencyvhf,
+ { "frequencyvhf", "atn-cpdlc.frequencyvhf",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequencyuhf,
+ { "frequencyuhf", "atn-cpdlc.frequencyuhf",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequencysatchannel,
+ { "frequencysatchannel", "atn-cpdlc.frequencysatchannel",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_code,
+ { "code", "atn-cpdlc.code",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequencyDeparture,
+ { "frequencyDeparture", "atn-cpdlc.frequencyDeparture_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UnitNameFrequency", HFILL }},
+ { &hf_atn_cpdlc_clearanceExpiryTime,
+ { "clearanceExpiryTime", "atn-cpdlc.clearanceExpiryTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_airportDeparture,
+ { "airportDeparture", "atn-cpdlc.airportDeparture",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Airport", HFILL }},
+ { &hf_atn_cpdlc_airportDestination,
+ { "airportDestination", "atn-cpdlc.airportDestination",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "Airport", HFILL }},
+ { &hf_atn_cpdlc_timeDeparture,
+ { "timeDeparture", "atn-cpdlc.timeDeparture_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_runwayDeparture,
+ { "runwayDeparture", "atn-cpdlc.runwayDeparture_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Runway", HFILL }},
+ { &hf_atn_cpdlc_revisionNumber,
+ { "revisionNumber", "atn-cpdlc.revisionNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_holdatwaypointspeedlow,
+ { "holdatwaypointspeedlow", "atn-cpdlc.holdatwaypointspeedlow",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_aTWlevel,
+ { "aTWlevel", "atn-cpdlc.aTWlevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_holdatwaypointspeedhigh,
+ { "holdatwaypointspeedhigh", "atn-cpdlc.holdatwaypointspeedhigh",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ "Speed", HFILL }},
+ { &hf_atn_cpdlc_eFCtime,
+ { "eFCtime", "atn-cpdlc.eFCtime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_legtype,
+ { "legtype", "atn-cpdlc.legtype",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LegType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_legType,
+ { "legType", "atn-cpdlc.legType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LegType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_fromSelection,
+ { "fromSelection", "atn-cpdlc.fromSelection",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_InterceptCourseFromSelection_vals), 0,
+ "InterceptCourseFromSelection", HFILL }},
+ { &hf_atn_cpdlc_publishedIdentifier,
+ { "publishedIdentifier", "atn-cpdlc.publishedIdentifier",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_PublishedIdentifier_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeLongitude,
+ { "latitudeLongitude", "atn-cpdlc.latitudeLongitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_placeBearingPlaceBearing,
+ { "placeBearingPlaceBearing", "atn-cpdlc.placeBearingPlaceBearing",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_placeBearingDistance,
+ { "placeBearingDistance", "atn-cpdlc.placeBearingDistance_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeType,
+ { "latitudeType", "atn-cpdlc.latitudeType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LatitudeType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeDirection,
+ { "latitudeDirection", "atn-cpdlc.latitudeDirection",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LatitudeDirection_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeWholeDegrees,
+ { "latitudeWholeDegrees", "atn-cpdlc.latitudeWholeDegrees",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_minutesLatLon,
+ { "minutesLatLon", "atn-cpdlc.minutesLatLon",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latlonWholeMinutes,
+ { "latlonWholeMinutes", "atn-cpdlc.latlonWholeMinutes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_secondsLatLon,
+ { "secondsLatLon", "atn-cpdlc.secondsLatLon",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitude,
+ { "latitude", "atn-cpdlc.latitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitude,
+ { "longitude", "atn-cpdlc.longitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeDegrees,
+ { "latitudeDegrees", "atn-cpdlc.latitudeDegrees",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeDegreesMinutes,
+ { "latitudeDegreesMinutes", "atn-cpdlc.latitudeDegreesMinutes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latitudeDMS,
+ { "latitudeDMS", "atn-cpdlc.latitudeDMS_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LatitudeDegreesMinutesSeconds", HFILL }},
+ { &hf_atn_cpdlc_latitudeReportingPoints,
+ { "latitudeReportingPoints", "atn-cpdlc.latitudeReportingPoints_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeReportingPoints,
+ { "longitudeReportingPoints", "atn-cpdlc.longitudeReportingPoints_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_legDistanceEnglish,
+ { "legDistanceEnglish", "atn-cpdlc.legDistanceEnglish",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_legDistanceMetric,
+ { "legDistanceMetric", "atn-cpdlc.legDistanceMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_legDistance,
+ { "legDistance", "atn-cpdlc.legDistance",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LegDistance_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_legTime,
+ { "legTime", "atn-cpdlc.legTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_singleLevel,
+ { "singleLevel", "atn-cpdlc.singleLevel",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LevelType_vals), 0,
+ "LevelType", HFILL }},
+ { &hf_atn_cpdlc_blockLevel,
+ { "blockLevel", "atn-cpdlc.blockLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_2_OF_LevelType", HFILL }},
+ { &hf_atn_cpdlc_blockLevel_item,
+ { "LevelType", "atn-cpdlc.LevelType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LevelType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_LevelLevel_item,
+ { "Level", "atn-cpdlc.Level",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_procedureName,
+ { "procedureName", "atn-cpdlc.procedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelProcedureName,
+ { "levelProcedureName", "atn-cpdlc.levelProcedureName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelspeed_speed,
+ { "speed", "atn-cpdlc.speed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_speeds,
+ { "speeds", "atn-cpdlc.speeds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedSpeed", HFILL }},
+ { &hf_atn_cpdlc_levelFeet,
+ { "levelFeet", "atn-cpdlc.levelFeet",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelMeters,
+ { "levelMeters", "atn-cpdlc.levelMeters",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelFlightLevel,
+ { "levelFlightLevel", "atn-cpdlc.levelFlightLevel",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelFlightLevelMetric,
+ { "levelFlightLevelMetric", "atn-cpdlc.levelFlightLevelMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeType,
+ { "longitudeType", "atn-cpdlc.longitudeType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LongitudeType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeDirection,
+ { "longitudeDirection", "atn-cpdlc.longitudeDirection",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LongitudeDirection_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeWholeDegrees,
+ { "longitudeWholeDegrees", "atn-cpdlc.longitudeWholeDegrees",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latLonWholeMinutes,
+ { "latLonWholeMinutes", "atn-cpdlc.latLonWholeMinutes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeDegrees,
+ { "longitudeDegrees", "atn-cpdlc.longitudeDegrees",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeDegreesMinutes,
+ { "longitudeDegreesMinutes", "atn-cpdlc.longitudeDegreesMinutes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_longitudeDMS,
+ { "longitudeDMS", "atn-cpdlc.longitudeDMS_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LongitudeDegreesMinutesSeconds", HFILL }},
+ { &hf_atn_cpdlc_navaid_name,
+ { "name", "atn-cpdlc.name",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "NavaidName", HFILL }},
+ { &hf_atn_cpdlc_PlaceBearingPlaceBearing_item,
+ { "PlaceBearing", "atn-cpdlc.PlaceBearing_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_fixName,
+ { "fixName", "atn-cpdlc.fixName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_navaid,
+ { "navaid", "atn-cpdlc.navaid_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_airport,
+ { "airport", "atn-cpdlc.airport",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levels,
+ { "levels", "atn-cpdlc.levels",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LevelLevel", HFILL }},
+ { &hf_atn_cpdlc_positionlevel,
+ { "positionlevel", "atn-cpdlc.positionlevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_PositionPosition_item,
+ { "Position", "atn-cpdlc.Position",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_positioncurrent,
+ { "positioncurrent", "atn-cpdlc.positioncurrent",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_timeatpositioncurrent,
+ { "timeatpositioncurrent", "atn-cpdlc.timeatpositioncurrent_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_fixnext,
+ { "fixnext", "atn-cpdlc.fixnext",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_timeetaatfixnext,
+ { "timeetaatfixnext", "atn-cpdlc.timeetaatfixnext_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_fixnextplusone,
+ { "fixnextplusone", "atn-cpdlc.fixnextplusone",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_timeetaatdestination,
+ { "timeetaatdestination", "atn-cpdlc.timeetaatdestination_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_remainingFuel,
+ { "remainingFuel", "atn-cpdlc.remainingFuel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_temperature,
+ { "temperature", "atn-cpdlc.temperature",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_winds,
+ { "winds", "atn-cpdlc.winds_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_turbulence,
+ { "turbulence", "atn-cpdlc.turbulence",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Turbulence_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_icing,
+ { "icing", "atn-cpdlc.icing",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Icing_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedground,
+ { "speedground", "atn-cpdlc.speedground",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_verticalChange,
+ { "verticalChange", "atn-cpdlc.verticalChange_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_trackAngle,
+ { "trackAngle", "atn-cpdlc.trackAngle",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_heading,
+ { "heading", "atn-cpdlc.heading",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Degrees_vals), 0,
+ "Degrees", HFILL }},
+ { &hf_atn_cpdlc_humidity,
+ { "humidity", "atn-cpdlc.humidity",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_reportedWaypointPosition,
+ { "reportedWaypointPosition", "atn-cpdlc.reportedWaypointPosition",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Position_vals), 0,
+ "Position", HFILL }},
+ { &hf_atn_cpdlc_reportedWaypointTime,
+ { "reportedWaypointTime", "atn-cpdlc.reportedWaypointTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_reportedWaypointLevel,
+ { "reportedWaypointLevel", "atn-cpdlc.reportedWaypointLevel",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Level_vals), 0,
+ "Level", HFILL }},
+ { &hf_atn_cpdlc_routeClearanceIndex,
+ { "routeClearanceIndex", "atn-cpdlc.routeClearanceIndex",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_positionTime,
+ { "positionTime", "atn-cpdlc.positionTime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_times,
+ { "times", "atn-cpdlc.times",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeTime", HFILL }},
+ { &hf_atn_cpdlc_unitname,
+ { "unitname", "atn-cpdlc.unitname_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_frequency,
+ { "frequency", "atn-cpdlc.frequency",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Frequency_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_type,
+ { "type", "atn-cpdlc.type",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ProcedureType_vals), 0,
+ "ProcedureType", HFILL }},
+ { &hf_atn_cpdlc_procedure,
+ { "procedure", "atn-cpdlc.procedure",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_transition,
+ { "transition", "atn-cpdlc.transition",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "ProcedureTransition", HFILL }},
+ { &hf_atn_cpdlc_personsOnBoard,
+ { "personsOnBoard", "atn-cpdlc.personsOnBoard",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_latLonReportingPoints,
+ { "latLonReportingPoints", "atn-cpdlc.latLonReportingPoints",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_LatLonReportingPoints_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_degreeIncrement,
+ { "degreeIncrement", "atn-cpdlc.degreeIncrement",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_procedureDeparture,
+ { "procedureDeparture", "atn-cpdlc.procedureDeparture_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_runwayArrival,
+ { "runwayArrival", "atn-cpdlc.runwayArrival_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Runway", HFILL }},
+ { &hf_atn_cpdlc_procedureApproach,
+ { "procedureApproach", "atn-cpdlc.procedureApproach_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_procedureArrival,
+ { "procedureArrival", "atn-cpdlc.procedureArrival_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ProcedureName", HFILL }},
+ { &hf_atn_cpdlc_routeInformations,
+ { "routeInformations", "atn-cpdlc.routeInformations",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_128_OF_RouteInformation", HFILL }},
+ { &hf_atn_cpdlc_routeInformations_item,
+ { "RouteInformation", "atn-cpdlc.RouteInformation",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_RouteInformation_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_routeInformationAdditional,
+ { "routeInformationAdditional", "atn-cpdlc.routeInformationAdditional_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTSRouteDesignator,
+ { "aTSRouteDesignator", "atn-cpdlc.aTSRouteDesignator",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_aTWAlongTrackWaypoints,
+ { "aTWAlongTrackWaypoints", "atn-cpdlc.aTWAlongTrackWaypoints",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint", HFILL }},
+ { &hf_atn_cpdlc_aTWAlongTrackWaypoints_item,
+ { "ATWAlongTrackWaypoint", "atn-cpdlc.ATWAlongTrackWaypoint_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_reportingpoints,
+ { "reportingpoints", "atn-cpdlc.reportingpoints_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_interceptCourseFroms,
+ { "interceptCourseFroms", "atn-cpdlc.interceptCourseFroms",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom", HFILL }},
+ { &hf_atn_cpdlc_interceptCourseFroms_item,
+ { "InterceptCourseFrom", "atn-cpdlc.InterceptCourseFrom_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_holdAtWaypoints,
+ { "holdAtWaypoints", "atn-cpdlc.holdAtWaypoints",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8_OF_Holdatwaypoint", HFILL }},
+ { &hf_atn_cpdlc_holdAtWaypoints_item,
+ { "Holdatwaypoint", "atn-cpdlc.Holdatwaypoint_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_waypointSpeedLevels,
+ { "waypointSpeedLevels", "atn-cpdlc.waypointSpeedLevels",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel", HFILL }},
+ { &hf_atn_cpdlc_waypointSpeedLevels_item,
+ { "WaypointSpeedLevel", "atn-cpdlc.WaypointSpeedLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rTARequiredTimeArrivals,
+ { "rTARequiredTimeArrivals", "atn-cpdlc.rTARequiredTimeArrivals",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival", HFILL }},
+ { &hf_atn_cpdlc_rTARequiredTimeArrivals_item,
+ { "RTARequiredTimeArrival", "atn-cpdlc.RTARequiredTimeArrival_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rTATime,
+ { "rTATime", "atn-cpdlc.rTATime_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rTATolerance,
+ { "rTATolerance", "atn-cpdlc.rTATolerance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_runway_direction,
+ { "direction", "atn-cpdlc.direction",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RunwayDirection", HFILL }},
+ { &hf_atn_cpdlc_configuration,
+ { "configuration", "atn-cpdlc.configuration",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_RunwayConfiguration_vals), 0,
+ "RunwayConfiguration", HFILL }},
+ { &hf_atn_cpdlc_runway,
+ { "runway", "atn-cpdlc.runway_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rVR,
+ { "rVR", "atn-cpdlc.rVR",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_RVR_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rVRFeet,
+ { "rVRFeet", "atn-cpdlc.rVRFeet",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_rVRMeters,
+ { "rVRMeters", "atn-cpdlc.rVRMeters",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedIndicated,
+ { "speedIndicated", "atn-cpdlc.speedIndicated",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedIndicatedMetric,
+ { "speedIndicatedMetric", "atn-cpdlc.speedIndicatedMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedTrue,
+ { "speedTrue", "atn-cpdlc.speedTrue",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedTrueMetric,
+ { "speedTrueMetric", "atn-cpdlc.speedTrueMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedGround,
+ { "speedGround", "atn-cpdlc.speedGround",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedGroundMetric,
+ { "speedGroundMetric", "atn-cpdlc.speedGroundMetric",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedMach,
+ { "speedMach", "atn-cpdlc.speedMach",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_SpeedSpeed_item,
+ { "Speed", "atn-cpdlc.Speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_Speed_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_SpeedTypeSpeedTypeSpeedType_item,
+ { "SpeedType", "atn-cpdlc.SpeedType",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_SpeedType_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedTypes,
+ { "speedTypes", "atn-cpdlc.speedTypes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedTypeSpeedTypeSpeedType", HFILL }},
+ { &hf_atn_cpdlc_hours,
+ { "hours", "atn-cpdlc.hours",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeHours", HFILL }},
+ { &hf_atn_cpdlc_minutes,
+ { "minutes", "atn-cpdlc.minutes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMinutes", HFILL }},
+ { &hf_atn_cpdlc_timeDepartureAllocated,
+ { "timeDepartureAllocated", "atn-cpdlc.timeDepartureAllocated_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_timeDepartureControlled,
+ { "timeDepartureControlled", "atn-cpdlc.timeDepartureControlled_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ControlledTime", HFILL }},
+ { &hf_atn_cpdlc_timeDepartureClearanceExpected,
+ { "timeDepartureClearanceExpected", "atn-cpdlc.timeDepartureClearanceExpected_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_departureMinimumInterval,
+ { "departureMinimumInterval", "atn-cpdlc.departureMinimumInterval",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_tofrom,
+ { "tofrom", "atn-cpdlc.tofrom",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ToFrom_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_hoursminutes,
+ { "hoursminutes", "atn-cpdlc.hoursminutes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Time", HFILL }},
+ { &hf_atn_cpdlc_seconds,
+ { "seconds", "atn-cpdlc.seconds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeSeconds", HFILL }},
+ { &hf_atn_cpdlc_unitName,
+ { "unitName", "atn-cpdlc.unitName_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_timeposition,
+ { "timeposition", "atn-cpdlc.timeposition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_levelspeed,
+ { "levelspeed", "atn-cpdlc.levelspeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_speedspeed,
+ { "speedspeed", "atn-cpdlc.speedspeed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_TimeTime_item,
+ { "Time", "atn-cpdlc.Time_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_toFrom,
+ { "toFrom", "atn-cpdlc.toFrom",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_ToFrom_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_facilityName,
+ { "facilityName", "atn-cpdlc.facilityName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_facilityFunction,
+ { "facilityFunction", "atn-cpdlc.facilityFunction",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_FacilityFunction_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_vertical_direction,
+ { "direction", "atn-cpdlc.direction",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalDirection_vals), 0,
+ "VerticalDirection", HFILL }},
+ { &hf_atn_cpdlc_rate,
+ { "rate", "atn-cpdlc.rate",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_VerticalRate_vals), 0,
+ "VerticalRate", HFILL }},
+ { &hf_atn_cpdlc_verticalRateEnglish,
+ { "verticalRateEnglish", "atn-cpdlc.verticalRateEnglish",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_verticalRateMetric,
+ { "verticalRateMetric", "atn-cpdlc.verticalRateMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_winds_direction,
+ { "direction", "atn-cpdlc.direction",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "WindDirection", HFILL }},
+ { &hf_atn_cpdlc_winds_speed,
+ { "speed", "atn-cpdlc.speed",
+ FT_UINT32, BASE_DEC, VALS(atn_cpdlc_WindSpeed_vals), 0,
+ "WindSpeed", HFILL }},
+ { &hf_atn_cpdlc_windSpeedEnglish,
+ { "windSpeedEnglish", "atn-cpdlc.windSpeedEnglish",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_cpdlc_windSpeedMetric,
+ { "windSpeedMetric", "atn-cpdlc.windSpeedMetric",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+/*--- End of included file: packet-atn-cpdlc-hfarr.c ---*/
+#line 313 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+ };
+
+ static gint *ett[] = {
+
+/*--- Included file: packet-atn-cpdlc-ettarr.c ---*/
+#line 1 "../../asn1/atn-cpdlc/packet-atn-cpdlc-ettarr.c"
+ &ett_atn_cpdlc_GroundPDUs,
+ &ett_atn_cpdlc_UplinkMessage,
+ &ett_atn_cpdlc_AircraftPDUs,
+ &ett_atn_cpdlc_StartDownMessage,
+ &ett_atn_cpdlc_DownlinkMessage,
+ &ett_atn_cpdlc_ProtectedGroundPDUs,
+ &ett_atn_cpdlc_ProtectedUplinkMessage,
+ &ett_atn_cpdlc_ATCForwardMessage,
+ &ett_atn_cpdlc_ForwardHeader,
+ &ett_atn_cpdlc_ForwardMessage,
+ &ett_atn_cpdlc_ProtectedAircraftPDUs,
+ &ett_atn_cpdlc_ProtectedStartDownMessage,
+ &ett_atn_cpdlc_ProtectedDownlinkMessage,
+ &ett_atn_cpdlc_ATCUplinkMessage,
+ &ett_atn_cpdlc_ATCUplinkMessageData,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCUplinkMsgElementId,
+ &ett_atn_cpdlc_T_atcuplinkmessagedata_constraineddata,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_2_OF_RouteClearance,
+ &ett_atn_cpdlc_ATCDownlinkMessage,
+ &ett_atn_cpdlc_ATCDownlinkMessageData,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_5_OF_ATCDownlinkMsgElementId,
+ &ett_atn_cpdlc_T_atcdownlinkmessagedata_constraineddata,
+ &ett_atn_cpdlc_ATCMessageHeader,
+ &ett_atn_cpdlc_ATCUplinkMsgElementId,
+ &ett_atn_cpdlc_ATCDownlinkMsgElementId,
+ &ett_atn_cpdlc_Altimeter,
+ &ett_atn_cpdlc_ATWAlongTrackWaypoint,
+ &ett_atn_cpdlc_ATWLevel,
+ &ett_atn_cpdlc_ATWLevelSequence,
+ &ett_atn_cpdlc_ATWDistance,
+ &ett_atn_cpdlc_Code,
+ &ett_atn_cpdlc_ControlledTime,
+ &ett_atn_cpdlc_Date,
+ &ett_atn_cpdlc_DateTimeGroup,
+ &ett_atn_cpdlc_Degrees,
+ &ett_atn_cpdlc_DepartureClearance,
+ &ett_atn_cpdlc_DirectionDegrees,
+ &ett_atn_cpdlc_Distance,
+ &ett_atn_cpdlc_DistanceSpecified,
+ &ett_atn_cpdlc_DistanceSpecifiedDirection,
+ &ett_atn_cpdlc_DistanceSpecifiedDirectionTime,
+ &ett_atn_cpdlc_Facility,
+ &ett_atn_cpdlc_FacilityDesignationAltimeter,
+ &ett_atn_cpdlc_FacilityDesignationATISCode,
+ &ett_atn_cpdlc_FixName,
+ &ett_atn_cpdlc_FlightInformation,
+ &ett_atn_cpdlc_Frequency,
+ &ett_atn_cpdlc_FurtherInstructions,
+ &ett_atn_cpdlc_Holdatwaypoint,
+ &ett_atn_cpdlc_HoldClearance,
+ &ett_atn_cpdlc_InterceptCourseFrom,
+ &ett_atn_cpdlc_InterceptCourseFromSelection,
+ &ett_atn_cpdlc_Latitude,
+ &ett_atn_cpdlc_LatitudeDegreesMinutes,
+ &ett_atn_cpdlc_LatitudeDegreesMinutesSeconds,
+ &ett_atn_cpdlc_LatitudeLongitude,
+ &ett_atn_cpdlc_LatitudeReportingPoints,
+ &ett_atn_cpdlc_LatitudeType,
+ &ett_atn_cpdlc_LatLonReportingPoints,
+ &ett_atn_cpdlc_LegDistance,
+ &ett_atn_cpdlc_LegType,
+ &ett_atn_cpdlc_Level,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_2_OF_LevelType,
+ &ett_atn_cpdlc_LevelLevel,
+ &ett_atn_cpdlc_LevelPosition,
+ &ett_atn_cpdlc_LevelProcedureName,
+ &ett_atn_cpdlc_LevelsOfFlight,
+ &ett_atn_cpdlc_LevelSpeed,
+ &ett_atn_cpdlc_LevelSpeedSpeed,
+ &ett_atn_cpdlc_LevelTime,
+ &ett_atn_cpdlc_LevelType,
+ &ett_atn_cpdlc_Longitude,
+ &ett_atn_cpdlc_LongitudeDegreesMinutes,
+ &ett_atn_cpdlc_LongitudeDegreesMinutesSeconds,
+ &ett_atn_cpdlc_LongitudeReportingPoints,
+ &ett_atn_cpdlc_LongitudeType,
+ &ett_atn_cpdlc_Navaid,
+ &ett_atn_cpdlc_PlaceBearing,
+ &ett_atn_cpdlc_PlaceBearingDistance,
+ &ett_atn_cpdlc_PlaceBearingPlaceBearing,
+ &ett_atn_cpdlc_Position,
+ &ett_atn_cpdlc_PositionDegrees,
+ &ett_atn_cpdlc_PositionDistanceSpecifiedDirection,
+ &ett_atn_cpdlc_PositionLevel,
+ &ett_atn_cpdlc_PositionLevelLevel,
+ &ett_atn_cpdlc_PositionLevelSpeed,
+ &ett_atn_cpdlc_PositionPosition,
+ &ett_atn_cpdlc_PositionProcedureName,
+ &ett_atn_cpdlc_PositionReport,
+ &ett_atn_cpdlc_PositionRouteClearanceIndex,
+ &ett_atn_cpdlc_PositionSpeed,
+ &ett_atn_cpdlc_PositionSpeedSpeed,
+ &ett_atn_cpdlc_PositionTime,
+ &ett_atn_cpdlc_PositionTimeLevel,
+ &ett_atn_cpdlc_PositionTimeTime,
+ &ett_atn_cpdlc_PositionUnitNameFrequency,
+ &ett_atn_cpdlc_ProcedureName,
+ &ett_atn_cpdlc_PublishedIdentifier,
+ &ett_atn_cpdlc_RemainingFuelPersonsOnBoard,
+ &ett_atn_cpdlc_ReportingPoints,
+ &ett_atn_cpdlc_RouteAndLevels,
+ &ett_atn_cpdlc_RouteClearance,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_128_OF_RouteInformation,
+ &ett_atn_cpdlc_RouteInformation,
+ &ett_atn_cpdlc_RouteInformationAdditional,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_ATWAlongTrackWaypoint,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_4_OF_InterceptCourseFrom,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_8_OF_Holdatwaypoint,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_WaypointSpeedLevel,
+ &ett_atn_cpdlc_SEQUENCE_SIZE_1_32_OF_RTARequiredTimeArrival,
+ &ett_atn_cpdlc_RTARequiredTimeArrival,
+ &ett_atn_cpdlc_RTATime,
+ &ett_atn_cpdlc_Runway,
+ &ett_atn_cpdlc_RunwayRVR,
+ &ett_atn_cpdlc_RVR,
+ &ett_atn_cpdlc_Speed,
+ &ett_atn_cpdlc_SpeedSpeed,
+ &ett_atn_cpdlc_SpeedTime,
+ &ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedType,
+ &ett_atn_cpdlc_SpeedTypeSpeedTypeSpeedTypeSpeed,
+ &ett_atn_cpdlc_Time,
+ &ett_atn_cpdlc_TimeLevel,
+ &ett_atn_cpdlc_TimeDeparture,
+ &ett_atn_cpdlc_TimeDistanceSpecifiedDirection,
+ &ett_atn_cpdlc_TimeDistanceToFromPosition,
+ &ett_atn_cpdlc_Timehhmmss,
+ &ett_atn_cpdlc_TimeUnitNameFrequency,
+ &ett_atn_cpdlc_TimePosition,
+ &ett_atn_cpdlc_TimePositionLevel,
+ &ett_atn_cpdlc_TimePositionLevelSpeed,
+ &ett_atn_cpdlc_TimeSpeed,
+ &ett_atn_cpdlc_TimeSpeedSpeed,
+ &ett_atn_cpdlc_TimeTime,
+ &ett_atn_cpdlc_TimeToFromPosition,
+ &ett_atn_cpdlc_ToFromPosition,
+ &ett_atn_cpdlc_UnitName,
+ &ett_atn_cpdlc_UnitNameFrequency,
+ &ett_atn_cpdlc_VerticalChange,
+ &ett_atn_cpdlc_VerticalRate,
+ &ett_atn_cpdlc_WaypointSpeedLevel,
+ &ett_atn_cpdlc_Winds,
+ &ett_atn_cpdlc_WindSpeed,
+
+/*--- End of included file: packet-atn-cpdlc-ettarr.c ---*/
+#line 317 "../../asn1/atn-cpdlc/packet-atn-cpdlc-template.c"
+ &ett_atn_cpdlc
+ };
+
+ /* register CPDLC */
+ proto_atn_cpdlc = proto_register_protocol(
+ ATN_CPDLC_PROTO ,
+ "ATN-CPDLC",
+ "atn-cpdlc");
+
+ proto_register_field_array(
+ proto_atn_cpdlc,
+ hf_atn_cpdlc,
+ array_length(hf_atn_cpdlc));
+
+ proto_register_subtree_array(
+ ett,
+ array_length(ett));
+
+ new_register_dissector(
+ "atn-cpdlc",
+ dissect_atn_cpdlc,
+ proto_atn_cpdlc);
+}
+
+void proto_reg_handoff_atn_cpdlc(void)
+{
+ /* add session dissector to atn dissector list dissector list*/
+ heur_dissector_add(
+ "atn-ulcs",
+ dissect_atn_cpdlc_heur,
+ proto_atn_cpdlc);
+}
+
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */ \ No newline at end of file
diff --git a/epan/dissectors/packet-atn-ulcs.c b/epan/dissectors/packet-atn-ulcs.c
new file mode 100644
index 0000000000..7aeccc95d4
--- /dev/null
+++ b/epan/dissectors/packet-atn-ulcs.c
@@ -0,0 +1,2640 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-atn-ulcs.c */
+/* ../../tools/asn2wrs.py -u -L -p atn-ulcs -c ./atn-ulcs.cnf -s ./packet-atn-ulcs-template -D . -O ../../epan/dissectors atn-ulcs.asn */
+
+/* Input file: packet-atn-ulcs-template.c */
+
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+
+/* packet-atn-ulcs.c
+ * By Mathias Guettler <guettler@web.de>
+ * Copyright 2013
+ *
+ * Routines for ATN upper layer
+ * protocol packet disassembly
+
+ * ATN upper layers are embedded within OSI Layer 4 (COTP).
+ *
+ * ATN upper layers contain:
+ * Session Layer (NUL protocol option)
+ * Presentation Layer (NUL protocol option)
+ * ATN upper Layer/Application (ACSE PDU or PDV-list PDU)
+
+ * ATN applications protocols (i.e. CM or CPDLC) are contained within
+ * ACSE user-information or PDV presentation data.
+
+ * details see:
+ * http://en.wikipedia.org/wiki/CPDLC
+ * http://members.optusnet.com.au/~cjr/introduction.htm
+
+ * standards:
+ * http://legacy.icao.int/anb/panels/acp/repository.cfm
+
+ * note:
+ * We are dealing with ATN/ULCS aka ICAO Doc 9705 Ed2 here
+ * (don't think there is an ULCS equivalent for "FANS-1/A ").
+
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ developper comments:
+why not using existing ses, pres and acse dissectors ?
+ ATN upper layers are derived from OSI standards for session,
+ presentation and application but the encoding differs
+ (it's PER instead of BER encoding to save bandwith).
+ Session and presentation use the "null" encoding option,
+ meaning that they are only present at connection establishment
+ and ommitted otherwise.
+ Instead of adapting existing dissectors it seemed simpler and cleaner
+ to implement everything the new atn-ulcs dissector.
+
+why using conversations ?
+ PER encoded user data is ambigous; the same encoding may apply to a CM or
+ CPDLC PDU. The workaround is to decode on a transport connection basis.
+ I use my own version of conversations to identify
+ the transport connection the PDU belongs to for the standard functions
+ from "conversation.h" didn't work out.
+
+what is the use of AARQ/AARE data ?
+ Converstions should be maintained on the COTP layer in a standard way
+ for there are usually more packets available than in the layers above.
+ In the worst case my dissector is called from a DT packet which
+ has destination references but no source reference.
+ I have to guess the reference used the other way round
+ (curently I am using ACSE PDU'S used during OSI connection establishment for that).
+ The idea is that each ACSE AARQ is answered by ACSE AARE and having this sequence
+ I have all the source/destination references for this transport connection.
+ I use AARQ/AARE data to store the source/destination reference of AARQ as well
+ as the optional ae-qualifier which tells me the application and
+ the dissector I have to use.
+ This approach donesn't work well when there are interleaving AARQ/AARE sequences for
+ the same aircraft.
+
+which ATN standard is supported ?
+ The dissector has been tested with ICAO doc9705 Edition2 compliant traffic.
+ No ATN Secutity is supported.
+ note:
+ The ATN upper layers are derived from OSI standards (ICAO DOC 9705)
+ while ATN/IPS (ICAO DOC 9896) which is entirely based on IPV6.
+
+*/
+
+/*
+ known defects/deficiencies:
+
+- user-information within AARE is sometines not decoded due to an unset flag
+ (the field is optional). As far as I can tell asn2wrs is right here,
+ but on the other hand I know that in all of this cases user-information
+ is present and is processed by the ATN end system.
+ Maybe a true ATN expert may help me out here.
+
+ - The conversation handling is based on src/dst addresses as well as
+ source or destination references depending on the TP4 packet type.
+ This means that after some time these references get reused for
+ new conversations. This almost certain happens for traces longer
+ than one day rendering this dissector unsuitable for captures exceeding
+ this one day.
+
+*/
+
+#include "config.h"
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/dissectors/packet-ber.h>
+#include <epan/dissectors/packet-per.h>
+#include <epan/emem.h>
+#include <epan/address.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "packet-atn-ulcs.h"
+
+#define ATN_ACSE_PROTO "ICAO Doc9705 ULCS ACSE (ISO 8649/8650-1:1996)"
+#define ATN_ULCS_PROTO "ICAO Doc9705 ULCS"
+
+static heur_dissector_list_t atn_ulcs_heur_subdissector_list;
+
+/* presentation subdissectors i.e. CM, CPDLC */
+static dissector_handle_t atn_cm_handle = NULL;
+static dissector_handle_t atn_cpdlc_handle = NULL;
+
+static int proto_atn_ulcs = -1;
+static guint32 ulcs_context_value = 0;
+static const char *object_identifier_id;
+
+static emem_tree_t *aarq_data_tree = NULL;
+static emem_tree_t *atn_conversation_tree = NULL;
+
+
+static proto_tree *root_tree = NULL;
+
+/* forward declarations for functions generated from asn1 */
+static int dissect_atn_ulcs_T_externalt_encoding_single_asn1_type(
+ tvbuff_t *tvb _U_,
+ int offset _U_,
+ asn1_ctx_t *actx _U_,
+ proto_tree *tree _U_,
+ int hf_index
+ _U_);
+
+static int dissect_atn_ulcs_T_externalt_encoding_octet_aligned(
+ tvbuff_t *tvb _U_,
+ int offset _U_,
+ asn1_ctx_t *actx _U_,
+ proto_tree *tree _U_,
+ int hf_index _U_);
+
+static int dissect_atn_ulcs_T_externalt_encoding_arbitrary(
+ tvbuff_t *tvb _U_,
+ int offset _U_,
+ asn1_ctx_t *actx _U_,
+ proto_tree *tree _U_,
+ int hf_index _U_);
+
+static void dissect_ACSE_apdu_PDU(
+ tvbuff_t *tvb _U_,
+ packet_info *pinfo _U_,
+ proto_tree *tree _U_);
+
+guint32 dissect_per_object_descriptor_t(
+ tvbuff_t *tvb,
+ guint32 offset,
+ asn1_ctx_t *actx,
+ proto_tree *tree,
+ int hf_index,
+ tvbuff_t **value_tvb);
+
+static gint dissect_atn_ulcs(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_);
+
+
+/*--- Included file: packet-atn-ulcs-hf.c ---*/
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-hf.c"
+static int hf_atn_ulcs_Fully_encoded_data_PDU = -1; /* Fully_encoded_data */
+static int hf_atn_ulcs_ACSE_apdu_PDU = -1; /* ACSE_apdu */
+static int hf_atn_ulcs_Fully_encoded_data_item = -1; /* PDV_list */
+static int hf_atn_ulcs_transfer_syntax_name = -1; /* Transfer_syntax_name */
+static int hf_atn_ulcs_presentation_context_identifier = -1; /* Presentation_context_identifier */
+static int hf_atn_ulcs_presentation_data_values = -1; /* T_presentation_data_values */
+static int hf_atn_ulcs_pdv_list_presentation_data_values_single_asn1_type = -1; /* T_pdv_list_presentation_data_values_single_asn1_type */
+static int hf_atn_ulcs_octet_aligned = -1; /* OCTET_STRING */
+static int hf_atn_ulcs_pdv_list_presentation_data_values_arbitrary = -1; /* T_pdv_list_presentation_data_values_arbitrary */
+static int hf_atn_ulcs_direct_reference = -1; /* OBJECT_IDENTIFIER */
+static int hf_atn_ulcs_indirect_reference = -1; /* INTEGER */
+static int hf_atn_ulcs_data_value_descriptor = -1; /* T_data_value_descriptor */
+static int hf_atn_ulcs_encoding = -1; /* T_encoding */
+static int hf_atn_ulcs_externalt_encoding_single_asn1_type = -1; /* T_externalt_encoding_single_asn1_type */
+static int hf_atn_ulcs_externalt_encoding_octet_aligned = -1; /* T_externalt_encoding_octet_aligned */
+static int hf_atn_ulcs_externalt_encoding_arbitrary = -1; /* T_externalt_encoding_arbitrary */
+static int hf_atn_ulcs_aarq = -1; /* AARQ_apdu */
+static int hf_atn_ulcs_aare = -1; /* AARE_apdu */
+static int hf_atn_ulcs_rlrq = -1; /* RLRQ_apdu */
+static int hf_atn_ulcs_rlre = -1; /* RLRE_apdu */
+static int hf_atn_ulcs_abrt = -1; /* ABRT_apdu */
+static int hf_atn_ulcs_aarq_apdu_protocol_version = -1; /* T_aarq_apdu_protocol_version */
+static int hf_atn_ulcs_application_context_name = -1; /* Application_context_name */
+static int hf_atn_ulcs_called_AP_title = -1; /* AP_title */
+static int hf_atn_ulcs_called_AE_qualifier = -1; /* AE_qualifier */
+static int hf_atn_ulcs_called_AP_invocation_identifier = -1; /* AP_invocation_identifier */
+static int hf_atn_ulcs_called_AE_invocation_identifier = -1; /* AE_invocation_identifier */
+static int hf_atn_ulcs_calling_AP_title = -1; /* AP_title */
+static int hf_atn_ulcs_calling_AE_qualifier = -1; /* AE_qualifier */
+static int hf_atn_ulcs_calling_AP_invocation_identifier = -1; /* AP_invocation_identifier */
+static int hf_atn_ulcs_calling_AE_invocation_identifier = -1; /* AE_invocation_identifier */
+static int hf_atn_ulcs_sender_acse_requirements = -1; /* ACSE_requirements */
+static int hf_atn_ulcs_mechanism_name = -1; /* Mechanism_name */
+static int hf_atn_ulcs_calling_authentication_value = -1; /* Authentication_value */
+static int hf_atn_ulcs_application_context_name_list = -1; /* Application_context_name_list */
+static int hf_atn_ulcs_implementation_information = -1; /* Implementation_data */
+static int hf_atn_ulcs_user_information = -1; /* Association_information */
+static int hf_atn_ulcs_aare_apdu_protocol_version = -1; /* T_aare_apdu_protocol_version */
+static int hf_atn_ulcs_result = -1; /* Associate_result */
+static int hf_atn_ulcs_result_source_diagnostic = -1; /* Associate_source_diagnostic */
+static int hf_atn_ulcs_responding_AP_title = -1; /* AP_title */
+static int hf_atn_ulcs_responding_AE_qualifier = -1; /* AE_qualifier */
+static int hf_atn_ulcs_responding_AP_invocation_identifier = -1; /* AP_invocation_identifier */
+static int hf_atn_ulcs_responding_AE_invocation_identifier = -1; /* AE_invocation_identifier */
+static int hf_atn_ulcs_responder_acse_requirements = -1; /* ACSE_requirements */
+static int hf_atn_ulcs_responding_authentication_value = -1; /* Authentication_value */
+static int hf_atn_ulcs_rlrq_apdu_request_reason = -1; /* Release_request_reason */
+static int hf_atn_ulcs_rlre_apdu_response_reason = -1; /* Release_response_reason */
+static int hf_atn_ulcs_abort_source = -1; /* ABRT_source */
+static int hf_atn_ulcs_abort_diagnostic = -1; /* ABRT_diagnostic */
+static int hf_atn_ulcs_Application_context_name_list_item = -1; /* Application_context_name */
+static int hf_atn_ulcs_ap_title_form2 = -1; /* AP_title_form2 */
+static int hf_atn_ulcs_ap_title_form1 = -1; /* AP_title_form1 */
+static int hf_atn_ulcs_ae_qualifier_form2 = -1; /* AE_qualifier_form2 */
+static int hf_atn_ulcs_ae_qualifier_form1 = -1; /* AE_qualifier_form1 */
+static int hf_atn_ulcs_acse_service_user = -1; /* T_acse_service_user */
+static int hf_atn_ulcs_acse_service_provider = -1; /* T_acse_service_provider */
+static int hf_atn_ulcs_Association_information_item = -1; /* EXTERNALt */
+static int hf_atn_ulcs_charstring = -1; /* OCTET_STRING */
+static int hf_atn_ulcs_bitstring = -1; /* BIT_STRING */
+static int hf_atn_ulcs_external = -1; /* EXTERNAL */
+static int hf_atn_ulcs_other = -1; /* T_other */
+static int hf_atn_ulcs_other_mechanism_name = -1; /* OBJECT_IDENTIFIER */
+static int hf_atn_ulcs_other_mechanism_value = -1; /* T_other_mechanism_value */
+static int hf_atn_ulcs_rdnSequence = -1; /* RDNSequence */
+static int hf_atn_ulcs_RDNSequence_item = -1; /* RelativeDistinguishedName */
+static int hf_atn_ulcs_RelativeDistinguishedName_item = -1; /* AttributeTypeAndValue */
+static int hf_atn_ulcs_null = -1; /* NULL */
+/* named bits */
+static int hf_atn_ulcs_T_aarq_apdu_protocol_version_version1 = -1;
+static int hf_atn_ulcs_T_aare_apdu_protocol_version_version1 = -1;
+static int hf_atn_ulcs_ACSE_requirements_authentication = -1;
+static int hf_atn_ulcs_ACSE_requirements_application_context_negotiation = -1;
+
+/*--- End of included file: packet-atn-ulcs-hf.c ---*/
+#line 196 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+
+
+/*--- Included file: packet-atn-ulcs-ett.c ---*/
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-ett.c"
+static gint ett_atn_ulcs_Fully_encoded_data = -1;
+static gint ett_atn_ulcs_PDV_list = -1;
+static gint ett_atn_ulcs_T_presentation_data_values = -1;
+static gint ett_atn_ulcs_EXTERNALt = -1;
+static gint ett_atn_ulcs_T_encoding = -1;
+static gint ett_atn_ulcs_ACSE_apdu = -1;
+static gint ett_atn_ulcs_AARQ_apdu = -1;
+static gint ett_atn_ulcs_T_aarq_apdu_protocol_version = -1;
+static gint ett_atn_ulcs_AARE_apdu = -1;
+static gint ett_atn_ulcs_T_aare_apdu_protocol_version = -1;
+static gint ett_atn_ulcs_RLRQ_apdu = -1;
+static gint ett_atn_ulcs_RLRE_apdu = -1;
+static gint ett_atn_ulcs_ABRT_apdu = -1;
+static gint ett_atn_ulcs_ACSE_requirements = -1;
+static gint ett_atn_ulcs_Application_context_name_list = -1;
+static gint ett_atn_ulcs_AP_title = -1;
+static gint ett_atn_ulcs_AE_qualifier = -1;
+static gint ett_atn_ulcs_Associate_source_diagnostic = -1;
+static gint ett_atn_ulcs_Association_information = -1;
+static gint ett_atn_ulcs_Authentication_value = -1;
+static gint ett_atn_ulcs_T_other = -1;
+static gint ett_atn_ulcs_Name = -1;
+static gint ett_atn_ulcs_RDNSequence = -1;
+static gint ett_atn_ulcs_RelativeDistinguishedName = -1;
+static gint ett_atn_ulcs_AttributeTypeAndValue = -1;
+
+/*--- End of included file: packet-atn-ulcs-ett.c ---*/
+#line 198 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+static gint ett_atn_ulcs = -1;
+static gint ett_atn_acse = -1;
+
+
+/*--- Included file: packet-atn-ulcs-fn.c ---*/
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-fn.c"
+
+
+static int
+dissect_atn_ulcs_Transfer_syntax_name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Presentation_context_identifier_vals[] = {
+ { 1, "acse-apdu" },
+ { 2, "reserved" },
+ { 3, "user-ase-apdu" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_Presentation_context_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset = dissect_per_constrained_integer(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ 1U,
+ 127U,
+ &ulcs_context_value,
+ TRUE);
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_pdv_list_presentation_data_values_single_asn1_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_pdv_list_presentation_data_values_arbitrary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ packet_info * pinfo = actx->pinfo;
+ tvbuff_t *tvb_usr = NULL;
+ proto_item *ti = NULL;
+ proto_tree *atn_ulcs_tree = NULL;
+ atn_conversation_t *atn_cv = NULL;
+
+ /* extract bitstring into new tvb buffer */
+ offset = dissect_per_bit_string(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ NO_BOUND,
+ NO_BOUND,
+ FALSE,
+ &tvb_usr);
+
+ /* call appropiate dissector for bitstring data */
+ switch(ulcs_context_value){
+ case 1: /* ACSE PDU*/
+ ti = proto_tree_add_text(
+ root_tree,
+ tvb,
+ offset,
+ 0,
+ ATN_ACSE_PROTO );
+ atn_ulcs_tree = proto_item_add_subtree(ti, ett_atn_acse);
+
+ dissect_ACSE_apdu_PDU(
+ tvb_new_subset_remaining(tvb_usr, 0),
+ pinfo,
+ atn_ulcs_tree);
+ break;
+ case 3: /* USER data; call subdissector for CM, CPDLC ... */
+
+ /* using dstref for PDV-list only occurrs in DT */
+ atn_cv = find_atn_conversation(
+ &pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src);
+
+ if(atn_cv) {
+ switch(atn_cv->ae_qualifier){
+ case cma: /* contact management */
+ call_dissector_with_data(
+ atn_cm_handle,
+ tvb_new_subset_remaining(tvb_usr, 0),
+ pinfo,
+ root_tree,
+ NULL);
+ break;
+ case cpdlc: /* plain old cpdlc */
+ case pmcpdlc: /* protected mode cpdlc */
+ call_dissector_with_data(
+ atn_cpdlc_handle,
+ tvb_new_subset_remaining(tvb_usr, 0),
+ pinfo,
+ root_tree,
+ NULL);
+ break;
+ default: /* unknown or unhandled datalink application */
+ dissector_try_heuristic(
+ atn_ulcs_heur_subdissector_list,
+ tvb_new_subset_remaining(tvb_usr,0),
+ actx->pinfo,
+ root_tree,
+ NULL);
+ break;
+ }
+ }
+ else{
+ dissector_try_heuristic(
+ atn_ulcs_heur_subdissector_list,
+ tvb_new_subset_remaining(tvb_usr,0),
+ actx->pinfo,
+ root_tree,
+ NULL);
+ }
+ break;
+ default:
+ break;
+ } /* switch(ulcs_context_value) */
+
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_T_presentation_data_values_vals[] = {
+ { 0, "single-ASN1-type" },
+ { 1, "octet-aligned" },
+ { 2, "arbitrary" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_presentation_data_values_choice[] = {
+ { 0, &hf_atn_ulcs_pdv_list_presentation_data_values_single_asn1_type, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_pdv_list_presentation_data_values_single_asn1_type },
+ { 1, &hf_atn_ulcs_octet_aligned, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_OCTET_STRING },
+ { 2, &hf_atn_ulcs_pdv_list_presentation_data_values_arbitrary, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_pdv_list_presentation_data_values_arbitrary },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_T_presentation_data_values(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_T_presentation_data_values, T_presentation_data_values_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t PDV_list_sequence[] = {
+ { &hf_atn_ulcs_transfer_syntax_name, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_ulcs_Transfer_syntax_name },
+ { &hf_atn_ulcs_presentation_context_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Presentation_context_identifier },
+ { &hf_atn_ulcs_presentation_data_values, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_T_presentation_data_values },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_PDV_list(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_PDV_list, PDV_list_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t Fully_encoded_data_sequence_of[1] = {
+ { &hf_atn_ulcs_Fully_encoded_data_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_PDV_list },
+};
+
+static int
+dissect_atn_ulcs_Fully_encoded_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Fully_encoded_data, Fully_encoded_data_sequence_of,
+ 1, 1, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_data_value_descriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset = dissect_per_octet_string(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ -1,
+ -1,
+ FALSE,
+ &actx->external.data_value_descriptor);
+ actx->external.data_value_descr_present = TRUE;
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_externalt_encoding_single_asn1_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_externalt_encoding_octet_aligned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_externalt_encoding_arbitrary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *tvb_usr = NULL;
+ packet_info * pinfo = actx->pinfo;
+ atn_conversation_t *atn_cv = NULL;
+
+ /* decode bit-string user data within ACSE */
+ offset = dissect_per_bit_string(
+ tvb,
+ offset,
+ actx,
+ tree, hf_index,
+ NO_BOUND,
+ NO_BOUND,
+ FALSE,
+ &tvb_usr);
+
+ /* DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src);
+ }
+ /* CR: srcref present, dstref always zero */
+ if((pinfo->clnp_srcref) && (!pinfo->clnp_dstref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst);
+ }
+ /* CC: srcref and dstref present */
+ if((pinfo->clnp_srcref) && (pinfo->clnp_dstref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst);
+ }
+
+ if(atn_cv) {
+ switch(atn_cv->ae_qualifier){
+ case cma: /* contact management */
+
+ call_dissector_with_data(
+ atn_cm_handle,
+ tvb_new_subset_remaining(tvb_usr, 0),
+ pinfo,
+ root_tree,
+ NULL);
+ break;
+ case cpdlc: /* plain old cpdlc */
+ case pmcpdlc: /* protected mode cpdlc */
+
+ call_dissector_with_data(
+ atn_cpdlc_handle,
+ tvb_new_subset_remaining(tvb_usr, 0),
+ pinfo,
+ root_tree,
+ NULL);
+ break;
+ default: /* unknown or unhandled datalink application */
+
+ dissector_try_heuristic(
+ atn_ulcs_heur_subdissector_list,
+ tvb_new_subset_remaining(tvb_usr,0),
+ actx->pinfo,
+ root_tree,
+ NULL);
+ break;
+ }
+ }else {
+
+ dissector_try_heuristic(
+ atn_ulcs_heur_subdissector_list,
+ tvb_new_subset_remaining(tvb_usr,0),
+ actx->pinfo,
+ root_tree,
+ NULL);
+ }
+
+ offset += tvb_length_remaining(tvb, offset);
+
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_T_encoding_vals[] = {
+ { 0, "single-ASN1-type" },
+ { 1, "octet-aligned" },
+ { 2, "arbitrary" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_encoding_choice[] = {
+ { 0, &hf_atn_ulcs_externalt_encoding_single_asn1_type, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_externalt_encoding_single_asn1_type },
+ { 1, &hf_atn_ulcs_externalt_encoding_octet_aligned, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_externalt_encoding_octet_aligned },
+ { 2, &hf_atn_ulcs_externalt_encoding_arbitrary, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_externalt_encoding_arbitrary },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_T_encoding(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_T_encoding, T_encoding_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t EXTERNALt_sequence[] = {
+ { &hf_atn_ulcs_direct_reference, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_ulcs_OBJECT_IDENTIFIER },
+ { &hf_atn_ulcs_indirect_reference, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_ulcs_INTEGER },
+ { &hf_atn_ulcs_data_value_descriptor, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_atn_ulcs_T_data_value_descriptor },
+ { &hf_atn_ulcs_encoding , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_T_encoding },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_EXTERNALt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_EXTERNALt, EXTERNALt_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_aarq_apdu_protocol_version(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_Application_context_name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AP_title_form2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const per_sequence_t AttributeTypeAndValue_sequence[] = {
+ { &hf_atn_ulcs_null , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_NULL },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_AttributeTypeAndValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_AttributeTypeAndValue, AttributeTypeAndValue_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t RelativeDistinguishedName_set_of[1] = {
+ { &hf_atn_ulcs_RelativeDistinguishedName_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_AttributeTypeAndValue },
+};
+
+static int
+dissect_atn_ulcs_RelativeDistinguishedName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_RelativeDistinguishedName, RelativeDistinguishedName_set_of,
+ 1, NO_BOUND, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RDNSequence_sequence_of[1] = {
+ { &hf_atn_ulcs_RDNSequence_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_RelativeDistinguishedName },
+};
+
+static int
+dissect_atn_ulcs_RDNSequence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_RDNSequence, RDNSequence_sequence_of);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Name_vals[] = {
+ { 0, "rdnSequence" },
+ { 0, NULL }
+};
+
+static const per_choice_t Name_choice[] = {
+ { 0, &hf_atn_ulcs_rdnSequence, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_RDNSequence },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Name, Name_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AP_title_form1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_ulcs_Name(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_AP_title_vals[] = {
+ { 0, "ap-title-form2" },
+ { 1, "ap-title-form1" },
+ { 0, NULL }
+};
+
+static const per_choice_t AP_title_choice[] = {
+ { 0, &hf_atn_ulcs_ap_title_form2, ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AP_title_form2 },
+ { 1, &hf_atn_ulcs_ap_title_form1, ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AP_title_form1 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_AP_title(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_AP_title, AP_title_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AE_qualifier_form2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ packet_info * pinfo = actx->pinfo;
+ atn_conversation_t *atn_cv = NULL;
+ guint32 ae_qualifier = 0;
+
+ /* dissect ae-qualifier */
+ offset = dissect_per_integer(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ &ae_qualifier);
+
+
+ /*note: */
+ /* the field "calling-AE-qualifier" is optional, */
+ /* which means that we can exploit it only if it is present. */
+ /* We still depend on heuristical decoding of CM, CPDLC PDU's otherwise. */
+
+ /* AARQ/DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+ }
+
+ /* AARQ/CR: srcref present, dstref is always zero */
+ if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ }
+
+ if(atn_cv){
+ atn_cv->ae_qualifier = ae_qualifier;
+ }
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AE_qualifier_form1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_atn_ulcs_RelativeDistinguishedName(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_AE_qualifier_vals[] = {
+ { 0, "ae-qualifier-form2" },
+ { 1, "ae-qualifier-form1" },
+ { 0, NULL }
+};
+
+static const per_choice_t AE_qualifier_choice[] = {
+ { 0, &hf_atn_ulcs_ae_qualifier_form2, ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AE_qualifier_form2 },
+ { 1, &hf_atn_ulcs_ae_qualifier_form1, ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AE_qualifier_form1 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_AE_qualifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_AE_qualifier, AE_qualifier_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AP_invocation_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_AE_invocation_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_ACSE_requirements(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_Mechanism_name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset = dissect_per_object_identifier(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ NULL);
+
+
+ offset = dissect_per_object_identifier(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ NULL);
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_EXTERNAL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_external_type(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_other_mechanism_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ offset=call_ber_oid_callback(
+ object_identifier_id,
+ tvb,
+ offset,
+ actx->pinfo,
+ tree);
+
+
+ offset=call_ber_oid_callback(
+ object_identifier_id,
+ tvb,
+ offset,
+ actx->pinfo,
+ tree);
+
+
+ return offset;
+}
+
+
+static const per_sequence_t T_other_sequence[] = {
+ { &hf_atn_ulcs_other_mechanism_name, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_OBJECT_IDENTIFIER },
+ { &hf_atn_ulcs_other_mechanism_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_T_other_mechanism_value },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_T_other(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_T_other, T_other_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Authentication_value_vals[] = {
+ { 0, "charstring" },
+ { 1, "bitstring" },
+ { 2, "external" },
+ { 3, "other" },
+ { 0, NULL }
+};
+
+static const per_choice_t Authentication_value_choice[] = {
+ { 0, &hf_atn_ulcs_charstring , ASN1_NO_EXTENSIONS , dissect_atn_ulcs_OCTET_STRING },
+ { 1, &hf_atn_ulcs_bitstring , ASN1_NO_EXTENSIONS , dissect_atn_ulcs_BIT_STRING },
+ { 2, &hf_atn_ulcs_external , ASN1_NO_EXTENSIONS , dissect_atn_ulcs_EXTERNAL },
+ { 3, &hf_atn_ulcs_other , ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_other },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_Authentication_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Authentication_value, Authentication_value_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Application_context_name_list_sequence_of[1] = {
+ { &hf_atn_ulcs_Application_context_name_list_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Application_context_name },
+};
+
+static int
+dissect_atn_ulcs_Application_context_name_list(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Application_context_name_list, Application_context_name_list_sequence_of);
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_Implementation_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t Association_information_sequence_of[1] = {
+ { &hf_atn_ulcs_Association_information_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_EXTERNALt },
+};
+
+static int
+dissect_atn_ulcs_Association_information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Association_information, Association_information_sequence_of,
+ 1, 1, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AARQ_apdu_sequence[] = {
+ { &hf_atn_ulcs_aarq_apdu_protocol_version, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_T_aarq_apdu_protocol_version },
+ { &hf_atn_ulcs_application_context_name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Application_context_name },
+ { &hf_atn_ulcs_called_AP_title, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_title },
+ { &hf_atn_ulcs_called_AE_qualifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_qualifier },
+ { &hf_atn_ulcs_called_AP_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_invocation_identifier },
+ { &hf_atn_ulcs_called_AE_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_invocation_identifier },
+ { &hf_atn_ulcs_calling_AP_title, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_title },
+ { &hf_atn_ulcs_calling_AE_qualifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_qualifier },
+ { &hf_atn_ulcs_calling_AP_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_invocation_identifier },
+ { &hf_atn_ulcs_calling_AE_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_invocation_identifier },
+ { &hf_atn_ulcs_sender_acse_requirements, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_ACSE_requirements },
+ { &hf_atn_ulcs_mechanism_name, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Mechanism_name },
+ { &hf_atn_ulcs_calling_authentication_value, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Authentication_value },
+ { &hf_atn_ulcs_application_context_name_list, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Application_context_name_list },
+ { &hf_atn_ulcs_implementation_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Implementation_data },
+ { &hf_atn_ulcs_user_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Association_information },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_AARQ_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ packet_info * pinfo = actx->pinfo;
+ aarq_data_t *aarq_data = NULL;
+ atn_conversation_t *atn_cv = NULL;
+ guint32 aircraft_24_bit_address = 0;
+
+ /* AARQ/DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+ if(!atn_cv){
+ atn_cv = (atn_conversation_t*)
+ se_alloc(sizeof(atn_conversation_t));
+ atn_cv->ae_qualifier = unknown;
+ create_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src ,
+ atn_cv);
+ }
+ }
+
+ /* AARQ/CR: srcref present, dstref is always zero */
+ if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+ atn_cv = find_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst );
+ if(!atn_cv){
+ atn_cv = (atn_conversation_t*)
+ se_alloc(sizeof(atn_conversation_t));
+ atn_cv->ae_qualifier = unknown;
+ create_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst ,
+ atn_cv);
+ }
+ }
+
+ /* conversation is to be created prior to decoding */
+ /* of "AE-qualifier-form2" which takes place here: */
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_AARQ_apdu, AARQ_apdu_sequence);
+
+
+
+ /* save AARQ packet data to create a conversation */
+ /* when decoding the following AARE PDU */
+ /* ATN applications CM and CPDLC are air/ground applications */
+ /* so there is always an aircraft (with its 24-bit address) */
+ /* and a ground facility. */
+ /* the assumption is that there is only one open AARQ/AARE */
+ /* dialog per aircraft at a time. */
+ /* the aircraft's 24-bit address is used as a key to each AARQ */
+ /* data. AARQ data is used to create a conversation with */
+ /* air and ground endpoints (based on NSAP's and transport references) */
+ /* when decoding AARE.*/
+ /* note: */
+ /* it may be more robust to create the conversation */
+ /* in the "ositp" dissector an to merely use the conversation here */
+ aircraft_24_bit_address =
+ get_aircraft_24_bit_address_from_nsap(pinfo);
+
+ /* search for aarq entry */
+ aarq_data = (aarq_data_t *) se_tree_lookup32(
+ aarq_data_tree,
+ aircraft_24_bit_address);
+
+ if(!aarq_data){ /* aarq data not found, create new record */
+
+ /* alloc aarq data */
+ aarq_data = (aarq_data_t*) se_alloc(sizeof(aarq_data_t));
+ aarq_data-> aarq_pending = FALSE;
+
+ /* insert aarq data */
+ se_tree_insert32(aarq_data_tree ,aircraft_24_bit_address,(void*)aarq_data);
+ }
+
+ /* check for pending AARQ/AARE sequences */
+ /* if "aarq_data-> aarq_pending" is set this means that there is already one */
+ /* AARQ/AARE sequence pending (is unwise to overwrite AARE/AARQ) */
+ if (aarq_data-> aarq_pending == FALSE ) {
+
+ /* init aarq data */
+ memset(aarq_data,0,sizeof(aarq_data_t));
+
+ aarq_data->cv = atn_cv;
+ aarq_data-> aarq_pending = TRUE;
+ }
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_atn_ulcs_T_aare_apdu_protocol_version(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Associate_result_vals[] = {
+ { 0, "accepted" },
+ { 1, "rejected-permanent" },
+ { 2, "rejected-transient" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_Associate_result(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ /* extension present: last param set to true. asn2wrs didn't take notice of that */
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 2U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_T_acse_service_user_vals[] = {
+ { 0, "null" },
+ { 1, "no-reason-given" },
+ { 2, "application-context-name-not-supported" },
+ { 3, "calling-AP-title-not-recognized" },
+ { 4, "calling-AP-invocation-identifier-not-recognized" },
+ { 5, "calling-AE-qualifier-not-recognized" },
+ { 6, "calling-AE-invocation-identifier-not-recognized" },
+ { 7, "called-AP-title-not-recognized" },
+ { 8, "called-AP-invocation-identifier-not-recognized" },
+ { 9, "called-AE-qualifier-not-recognized" },
+ { 10, "called-AE-invocation-identifier-not-recognized" },
+ { 11, "authentication-mechanism-name-not-recognized" },
+ { 12, "authentication-mechanism-name-required" },
+ { 13, "authentication-failure" },
+ { 14, "authentication-required" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_T_acse_service_user(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 14U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_T_acse_service_provider_vals[] = {
+ { 0, "null" },
+ { 1, "no-reason-given" },
+ { 2, "no-common-acse-version" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_T_acse_service_provider(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 2U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Associate_source_diagnostic_vals[] = {
+ { 1, "acse-service-user" },
+ { 2, "acse-service-provider" },
+ { 0, NULL }
+};
+
+static const per_choice_t Associate_source_diagnostic_choice[] = {
+ { 1, &hf_atn_ulcs_acse_service_user, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_acse_service_user },
+ { 2, &hf_atn_ulcs_acse_service_provider, ASN1_NO_EXTENSIONS , dissect_atn_ulcs_T_acse_service_provider },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_Associate_source_diagnostic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_Associate_source_diagnostic, Associate_source_diagnostic_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t AARE_apdu_sequence[] = {
+ { &hf_atn_ulcs_aare_apdu_protocol_version, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_T_aare_apdu_protocol_version },
+ { &hf_atn_ulcs_application_context_name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Application_context_name },
+ { &hf_atn_ulcs_result , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Associate_result },
+ { &hf_atn_ulcs_result_source_diagnostic, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_Associate_source_diagnostic },
+ { &hf_atn_ulcs_responding_AP_title, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_title },
+ { &hf_atn_ulcs_responding_AE_qualifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_qualifier },
+ { &hf_atn_ulcs_responding_AP_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AP_invocation_identifier },
+ { &hf_atn_ulcs_responding_AE_invocation_identifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_AE_invocation_identifier },
+ { &hf_atn_ulcs_responder_acse_requirements, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_ACSE_requirements },
+ { &hf_atn_ulcs_mechanism_name, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Mechanism_name },
+ { &hf_atn_ulcs_responding_authentication_value, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Authentication_value },
+ { &hf_atn_ulcs_application_context_name_list, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Application_context_name_list },
+ { &hf_atn_ulcs_implementation_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Implementation_data },
+ { &hf_atn_ulcs_user_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Association_information },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_AARE_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ packet_info * pinfo = actx->pinfo;
+ guint32 aircraft_24_bit_address = 0 ;
+ atn_conversation_t *atn_cv = NULL;
+ aarq_data_t *aarq_data = NULL;
+
+ /* get AARQ data and use it to create a new conversation, */
+ /* the conversation is used along with */
+ /* AARQ's "calling ae qualifier" to determine the */
+ /* type of air/ground application of each subsequent frame.*/
+ /* we use this information to invoke the correct application dissector. */
+ /* note: */
+ /* heuristical decoding of ASN1 will not work for all cases, */
+ /* for there may be CM PDU's which will exactly look like CPDLC PDU'S */
+
+ /* get 24-bit icao address */
+ aircraft_24_bit_address = get_aircraft_24_bit_address_from_nsap(pinfo);
+
+ /* search for aarq entry */
+ aarq_data = (aarq_data_t *) se_tree_lookup32(
+ aarq_data_tree,
+ aircraft_24_bit_address);
+
+ /* no aarq data present, do nothing */
+ /* without both ends of the conversation and without */
+ /* the "calling ae-qualifier there is no point in setting up "*/
+ /* a conversation */
+ if(!aarq_data) {
+
+ return offset;
+ }
+
+ /* AARE/DT: dstref present, srcref is always zero */
+ if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src );
+
+ if(!atn_cv){ /* conversation not fond */
+
+ /* DT has only dstref - create new conversation */
+ create_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src ,
+ aarq_data->cv);
+ }
+ }
+
+ /* AARE/CC: srcref and dstref present */
+ if((pinfo->clnp_dstref) && (pinfo->clnp_srcref)){
+
+ atn_cv = find_atn_conversation(
+ &pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst);
+
+ if(atn_cv){ /* conversation found. */
+
+ /* create new conversation for dstref */
+ create_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src ,
+ aarq_data->cv);
+
+ }else { /* no conversation found */
+ /* as CC contains srcref *and* dstref we use both to create new records */
+ create_atn_conversation(&pinfo->src,
+ pinfo->clnp_srcref,
+ &pinfo->dst ,
+ aarq_data->cv);
+ create_atn_conversation(&pinfo->dst,
+ pinfo->clnp_dstref,
+ &pinfo->src ,
+ aarq_data->cv);
+ }
+ }
+
+ /* clear aarq data */
+ memset(aarq_data,0,sizeof(aarq_data_t));
+ aarq_data-> aarq_pending = FALSE;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_AARE_apdu, AARE_apdu_sequence);
+
+
+
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Release_request_reason_vals[] = {
+ { 0, "normal" },
+ { 1, "urgent" },
+ { 30, "user-defined" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_Release_request_reason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ /* extension present: last param set to true. asn2wrs didn't take notice of that */
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 30U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RLRQ_apdu_sequence[] = {
+ { &hf_atn_ulcs_rlrq_apdu_request_reason, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Release_request_reason },
+ { &hf_atn_ulcs_user_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Association_information },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_RLRQ_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_RLRQ_apdu, RLRQ_apdu_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_Release_response_reason_vals[] = {
+ { 0, "normal" },
+ { 1, "not-finished" },
+ { 30, "user-defined" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_Release_response_reason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ /* extension present: last param set to true. asn2wrs didn't take notice of that */
+ offset = dissect_per_constrained_integer(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ 0U,
+ 30U,
+ NULL,
+ TRUE);
+
+
+ return offset;
+}
+
+
+static const per_sequence_t RLRE_apdu_sequence[] = {
+ { &hf_atn_ulcs_rlre_apdu_response_reason, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Release_response_reason },
+ { &hf_atn_ulcs_user_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Association_information },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_RLRE_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_RLRE_apdu, RLRE_apdu_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_ABRT_source_vals[] = {
+ { 0, "acse-service-user" },
+ { 1, "acse-service-provider" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_atn_ulcs_ABRT_source(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_ABRT_diagnostic_vals[] = {
+ { 1, "no-reason-given" },
+ { 2, "protocol-error" },
+ { 3, "authentication-mechanism-name-not-recognized" },
+ { 4, "authentication-mechanism-name-required" },
+ { 5, "authentication-failure" },
+ { 6, "authentication-required" },
+ { 0, NULL }
+};
+
+static guint32 ABRT_diagnostic_value_map[6+0] = {1, 2, 3, 4, 5, 6};
+
+static int
+dissect_atn_ulcs_ABRT_diagnostic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 6, NULL, TRUE, 0, ABRT_diagnostic_value_map);
+
+ return offset;
+}
+
+
+static const per_sequence_t ABRT_apdu_sequence[] = {
+ { &hf_atn_ulcs_abort_source, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_atn_ulcs_ABRT_source },
+ { &hf_atn_ulcs_abort_diagnostic, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_ABRT_diagnostic },
+ { &hf_atn_ulcs_user_information, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_atn_ulcs_Association_information },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_ABRT_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_ABRT_apdu, ABRT_apdu_sequence);
+
+ return offset;
+}
+
+
+static const value_string atn_ulcs_ACSE_apdu_vals[] = {
+ { 0, "aarq" },
+ { 1, "aare" },
+ { 2, "rlrq" },
+ { 3, "rlre" },
+ { 4, "abrt" },
+ { 0, NULL }
+};
+
+static const per_choice_t ACSE_apdu_choice[] = {
+ { 0, &hf_atn_ulcs_aarq , ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AARQ_apdu },
+ { 1, &hf_atn_ulcs_aare , ASN1_EXTENSION_ROOT , dissect_atn_ulcs_AARE_apdu },
+ { 2, &hf_atn_ulcs_rlrq , ASN1_EXTENSION_ROOT , dissect_atn_ulcs_RLRQ_apdu },
+ { 3, &hf_atn_ulcs_rlre , ASN1_EXTENSION_ROOT , dissect_atn_ulcs_RLRE_apdu },
+ { 4, &hf_atn_ulcs_abrt , ASN1_EXTENSION_ROOT , dissect_atn_ulcs_ABRT_apdu },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_atn_ulcs_ACSE_apdu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_atn_ulcs_ACSE_apdu, ACSE_apdu_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static void dissect_Fully_encoded_data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_ulcs_Fully_encoded_data(tvb, 0, &asn1_ctx, tree, hf_atn_ulcs_Fully_encoded_data_PDU);
+}
+static void dissect_ACSE_apdu_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ dissect_atn_ulcs_ACSE_apdu(tvb, 0, &asn1_ctx, tree, hf_atn_ulcs_ACSE_apdu_PDU);
+}
+
+
+/*--- End of included file: packet-atn-ulcs-fn.c ---*/
+#line 202 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+
+/* re-implementing external data: packet-per.c */
+static const value_string per_External_encoding_vals[] = {
+{ 0, "single-ASN1-type" },
+{ 1, "octet-aligned" },
+{ 2, "arbitrary" },
+{ 0, NULL }
+};
+
+/* re-implementing external data: packet-per.c */
+static const per_choice_t External_encoding_choice[] =
+{
+ { 0,
+ &hf_atn_ulcs_externalt_encoding_single_asn1_type,
+ ASN1_NO_EXTENSIONS,
+ dissect_atn_ulcs_T_externalt_encoding_single_asn1_type
+ },
+ { 1,
+ &hf_atn_ulcs_externalt_encoding_octet_aligned,
+ ASN1_NO_EXTENSIONS,
+ dissect_atn_ulcs_T_externalt_encoding_octet_aligned
+ },
+ { 2,
+ &hf_atn_ulcs_externalt_encoding_arbitrary,
+ ASN1_NO_EXTENSIONS,
+ dissect_atn_ulcs_T_externalt_encoding_arbitrary
+ },
+ { 0,
+ NULL,
+ 0,
+ NULL
+ }
+};
+
+/* ATN Session layer */
+#define SES_PDU_TYPE_MASK 0xf8
+#define SES_PARAM_IND_MASK 0x04
+#define SES_PARAM_B2_MASK 0x02
+#define SES_PARAM_B1_MASK 0x01
+
+static int hf_atn_ses_type = -1;
+static int hf_atn_ses_param_ind = -1;
+static int hf_atn_ses_param_b1 = -1;
+static int hf_atn_ses_param_b2 = -1;
+
+static gint ett_atn_ses = -1;
+
+#define ATN_SES_PROTO "ICAO Doc9705 ULCS Session (ISO 8326/8327-1:1994)"
+
+const value_string atn_ses_param_ind[] =
+{
+ {0, "No Parameter Indication "},
+ {1, "Parameter Indication "},
+ {0, NULL }
+};
+
+const value_string srf_b2[] =
+{
+ {0, "Transport Connection is kept"},
+ {1, "Transport Connection is released" },
+ {0, NULL }
+};
+
+const value_string srf_b1[] =
+{
+ {0, "Transport Connection is transient"},
+ {1, "Transport Connection is persistent"},
+ {0, NULL }
+};
+
+#define SES_ATN_SCN 0xe8
+#define SES_ATN_SCNC 0xf8
+#define SES_ATN_SAC 0xf0
+#define SES_ATN_SACC 0xd8
+#define SES_ATN_SRF 0xe0
+#define SES_ATN_SRFC 0xa0
+
+const value_string atn_ses_type[] =
+{
+ { 0x1d, "Short Connect (SCN) SPDU" },
+ { 0x1f, "Short Connect Accept (SAC) SPDU" },
+ { 0x1e, "Short Connect Accept Continue (SACC) SPDU" },
+ { 0x1c, "Short Refuse (SRF) SPDU" },
+ { 0x14, "Short Refuse Continue (SRFC) SPDU" },
+ {0, NULL }
+};
+
+/* ATN Presentation layer */
+#define ATN_PRES_PROTO "ICAO Doc9705 ULCS Presentation (ISO 8822/8823-1:1994)"
+
+static int hf_atn_pres_err = -1;
+static gint ett_atn_pres = -1;
+
+#define ATN_SES_PRES_MASK 0xf803
+#define PRES_CPR_ER_MASK 0x70
+
+/* type determined by SPDU and PPDU */
+const value_string atn_pres_vals[] =
+{
+ { 0xe802, "Short Presentation Connect PPDU (CP) " },
+ { 0xf802, "Short Presentation Connect PPDU (CP) " },
+ { 0xf002, "Short Presentation Connect Accept PPDU (CPA)" },
+ { 0xd802, "Short Presentation Connect Accept PPDU (CPA)" },
+ { 0xe002, "Short Presentation Connect Reject PPDU (CPR)" },
+ { 0xa002, "Short Presentation Connect Reject PPDU (CPR)" },
+ {0, NULL }
+};
+
+/* Short Presentation Connect Reject PPDU's 0yyy 00zz */
+const value_string atn_pres_err[] =
+{
+ { 0x00, "Presentation-user" },
+ { 0x01, "Reason not specified (transient)"},
+ { 0x02, "Temporary congestion (transient)"},
+ { 0x03, "Local limit exceeded (transient)"},
+ { 0x04, "Called presentation-address unknown (permanent)"},
+ { 0x05, "Protocol version not supported (permanent)"},
+ { 0x06, "Default context not supported (permanent)"},
+ { 0x07, "User data not readable (permanent)"},
+ { 0, NULL }
+};
+
+/* re-implementing external data: packet-per.c */
+static int atn_ulcs_Externalt_encoding(
+ tvbuff_t *tvb _U_,
+ int offset _U_,
+ asn1_ctx_t *actx _U_,
+ proto_tree *tree _U_,
+ int hf_index _U_)
+{
+ offset = dissect_per_choice(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index,
+ ett_atn_ulcs_EXTERNALt,
+ External_encoding_choice,
+ &actx->external.encoding);
+
+ return offset;
+}
+
+/* re-implementing external data: packet-per.c */
+guint32 atn_per_external_type(
+ tvbuff_t *tvb _U_,
+ guint32 offset,
+ asn1_ctx_t *actx,
+ proto_tree *tree _U_,
+ int hf_index _U_,
+ per_type_fn type_cb)
+{
+ memset(&actx->external, '\0', sizeof(actx->external));
+ actx->external.hf_index = -1;
+ actx->external.encoding = -1;
+
+ actx->external.u.per.type_cb = type_cb;
+ offset = atn_ulcs_Externalt_encoding(
+ tvb,
+ offset,
+ actx,
+ tree,
+ hf_index);
+
+ memset(
+ &actx->external,
+ '\0',
+ sizeof(actx->external));
+
+ actx->external.hf_index = -1;
+ actx->external.encoding = -1;
+
+ return offset;
+}
+
+/* determine 24-bit aircraft address(ARS) */
+/* from 20-byte ATN NSAP. */
+guint32 get_aircraft_24_bit_address_from_nsap(
+ packet_info *pinfo)
+{
+ guint8* addr = NULL;
+ guint32 ars =0;
+ guint32 adr_prefix =0;
+
+ /* check NSAP address type*/
+ if( (pinfo->src.type != AT_OSI) ||
+ (pinfo->dst.type != AT_OSI)) {
+ return ars; }
+
+ /* 20 octets address length required */
+ /* for ATN */
+ if( (pinfo->src.len != 20) ||
+ (pinfo->dst.len != 20)) {
+ return ars; }
+
+ /* first try source address */
+ /* if the src address originates */
+ /* from an aircraft it's downlink */
+
+ /* convert addr into 32-bit integer */
+ addr = (guint8*) pinfo->src.data;
+ adr_prefix =
+ ((addr[0]<<24) |
+ (addr[1]<<16) |
+ (addr[2]<<8) |
+ addr[3] );
+
+ /* according to ICAO doc9507 Ed2 SV5 */
+ /* clause 5.4.3.8.1.5 and 5.4.3.8.1.3 */
+ /* mobile addresses contain "c1" of "41" */
+ /* in the VER subfield of the NSAP */
+ if((adr_prefix == 0x470027c1) ||
+ (adr_prefix == 0x47002741)) {
+ /* ICAO doc9507 Ed2 SV5 5.4.3.8.4.4 */
+ /* states that the ARS subfield containes */
+ /* the 24-bitaddress of the aircraft */
+ ars = ((addr[8])<<16) |
+ ((addr[9])<<8) |
+ (addr[10]);
+ }
+
+ /* try destination address */
+ /* if the src address originates */
+ /* from an aircraft it's downlink */
+
+ /* convert addr into 32-bit integer */
+ addr = (guint8*) pinfo->dst.data;
+ adr_prefix = ((addr[0]<<24) |
+ (addr[1]<<16) |
+ (addr[2]<<8) |
+ addr[3] );
+
+ /* according to ICAO doc9507 Ed2 SV5 */
+ /* clause 5.4.3.8.1.5 and 5.4.3.8.1.3 */
+ /* mobile addresses contain "c1" of "41" */
+ /* in the VER subfield of the NSAP */
+ if((adr_prefix == 0x470027c1) ||
+ (adr_prefix == 0x47002741)) {
+ /* ICAO doc9507 Ed2 SV5 5.4.3.8.4.4 */
+ /* states that the ARS subfield containes */
+ /* the 24-bitaddress of the aircraft */
+ ars = ((addr[8])<<16) |
+ ((addr[9])<<8) |
+ (addr[10]);
+ }
+ return ars;
+}
+
+/* determine whether a PDU is uplink or downlink */
+/* by checking for known aircraft address prefices*/
+int check_heur_msg_type(packet_info *pinfo _U_)
+{
+ int t = no_msg;
+ guint8* addr = NULL;
+ guint32 adr_prefix =0;
+
+ /* check NSAP address type*/
+ if( (pinfo->src.type != AT_OSI) || (pinfo->dst.type != AT_OSI)) {
+ return t; }
+
+ /* check NSAP address length; 20 octets address length required */
+ if( (pinfo->src.len != 20) || (pinfo->dst.len != 20)) {
+ return t; }
+
+ addr = (guint8*) pinfo->src.data;
+
+ /* convert address to 32-bit integer */
+ adr_prefix = ((addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | addr[3] );
+
+ /* According to the published ATN NSAP adddressing scheme */
+ /* in ICAO doc9705 Ed2 SV5 5.4.3.8.1.3 and 5.4.3.8.1.5 */
+ /* the "VER" field shall be 0x41 ("all Mobile AINSC") or */
+ /* 0xc1 ("all Mobile ATSC") for mobile stations (aka aircraft).*/
+ if((adr_prefix == 0x470027c1) || (adr_prefix == 0x47002741)) {
+ t = dm; /* source is an aircraft: it's a downlink PDU */
+ }
+
+ addr = (guint8*) pinfo->dst.data;
+
+ /* convert address to 32-bit integer */
+ adr_prefix = ((addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | addr[3] );
+
+ /* According to the published ATN NSAP adddressing scheme */
+ /* in ICAO doc9705 Ed2 SV5 5.4.3.8.1.3 and 5.4.3.8.1.5 */
+ /* the "VER" field shall be 0x41 ("all Mobile AINSC") or */
+ /* 0xc1 ("all Mobile ATSC") for mobile stations (aka aircraft).*/
+ if((adr_prefix == 0x470027c1) || (adr_prefix == 0x47002741)) {
+ t = um; /* destination is aircraft: uplink PDU */
+ }
+
+ return t;
+}
+
+/* conversation may be used by other dissectors */
+emem_tree_t *get_atn_conversation_tree(void){
+ return atn_conversation_tree;
+}
+
+
+/* find a atn conversation tree node by an endpoint */
+/* an endpoint is identified by atn src and dst addresses */
+/* and srcref or dstref (depends on the transport packet type) */
+/* IMHO it's a hack - conversations should be maintained */
+/* at transport layer (cotp) but this isn't working yet. */
+atn_conversation_t * find_atn_conversation(
+ address *address1,
+ guint16 clnp_ref1,
+ address *address2 )
+{
+ atn_conversation_t *cv = NULL;
+ guint32 key = 0;
+ guint32 tmp = 0;
+
+ ADD_ADDRESS_TO_HASH( tmp, address1);
+ key = (tmp << 16) | clnp_ref1 ;
+
+ ADD_ADDRESS_TO_HASH( tmp, address2);
+ key = (tmp << 24) | key ;
+
+ /* search for atn conversation */
+ cv = (atn_conversation_t *)
+ se_tree_lookup32(get_atn_conversation_tree(),key);
+
+ return cv;
+}
+
+/* create a atn conversation tree node */
+/* conversation data is to be allocated externally */
+/* a conversation may be referenced from both endpoints */
+atn_conversation_t * create_atn_conversation(
+ address *address1,
+ guint16 clnp_ref1,
+ address *address2,
+ atn_conversation_t *conversation)
+{
+ atn_conversation_t *cv = NULL;
+ guint32 key = 0;
+ guint32 tmp = 0;
+
+ ADD_ADDRESS_TO_HASH( tmp, address1);
+ key = (tmp << 16) | clnp_ref1 ;
+
+ ADD_ADDRESS_TO_HASH( tmp, address2);
+ key = (tmp << 24) | key ;
+
+ /* search for aircraft entry */
+ cv = (atn_conversation_t *)
+ se_tree_lookup32(
+ get_atn_conversation_tree(),
+ key);
+
+ /* tree node already present */
+ if(cv) {
+ return NULL; }
+
+ /* insert conversation data in tree*/
+ se_tree_insert32(
+ get_atn_conversation_tree(),
+ key,
+ (void*)conversation);
+
+ return conversation;
+}
+
+static int
+dissect_atn_ulcs(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ int offset = 0;
+ proto_item *ti = NULL;
+ proto_tree *atn_ulcs_tree = NULL;
+ guint8 value_pres = 0;
+ guint8 value_ses = 0;
+ guint16 value_ses_pres = 0;
+
+ root_tree = tree;
+
+ /* data pointer */
+ /* decode as PDV-list */
+ if ( (int)(intptr_t) data == FALSE )
+ {
+ ti = proto_tree_add_item(
+ tree,
+ proto_atn_ulcs,
+ tvb,
+ 0,
+ 0 ,
+ FALSE);
+
+ atn_ulcs_tree = proto_item_add_subtree(
+ ti,
+ ett_atn_ulcs);
+
+ dissect_Fully_encoded_data_PDU(
+ tvb,
+ pinfo,
+ atn_ulcs_tree);
+
+ return offset +
+ tvb_reported_length_remaining(tvb, offset ) ;
+ }
+
+ /* decode as SPDU, PPDU and ACSE PDU */
+ if ( (int)(intptr_t) data == TRUE )
+ {
+ /* get session and presentation PDU's */
+ value_ses_pres = tvb_get_ntohs(tvb, offset);
+
+ /* SPDU: dissect session layer */
+ ti = proto_tree_add_text(
+ tree,
+ tvb,
+ offset,
+ 0,
+ ATN_SES_PROTO );
+
+ atn_ulcs_tree = proto_item_add_subtree(
+ ti,
+ ett_atn_ses);
+
+ /* get SPDU (1 octet) */
+ value_ses = tvb_get_guint8(tvb, offset);
+
+ /* SPDU type/identifier */
+ proto_tree_add_item(atn_ulcs_tree,
+ hf_atn_ses_type,
+ tvb,
+ offset,
+ 1,
+ ENC_BIG_ENDIAN );
+
+ /* SPDU parameters may be present in Short Refuse */
+ /* or Short Refuse Continue SPDU's */
+ switch(value_ses & SES_PDU_TYPE_MASK){
+ case SES_ATN_SRF:
+ case SES_ATN_SRFC:
+
+ /* SPDU parameter presence */
+ proto_tree_add_item(atn_ulcs_tree,
+ hf_atn_ses_param_ind,
+ tvb,
+ offset,
+ 1,
+ ENC_BIG_ENDIAN );
+
+ /* parameter B2 */
+ proto_tree_add_item(atn_ulcs_tree,
+ hf_atn_ses_param_b2,
+ tvb,
+ offset,
+ 1,
+ ENC_BIG_ENDIAN );
+
+ /* parameter B1 */
+ proto_tree_add_item(atn_ulcs_tree,
+ hf_atn_ses_param_b1,
+ tvb,
+ offset,
+ 1,
+ ENC_BIG_ENDIAN );
+
+ break;
+ default:
+ break;
+ }
+ offset++;
+
+ /* PPDU: dissect presentation layer */
+ ti = proto_tree_add_text(
+ tree,
+ tvb,
+ offset,
+ 0,
+ ATN_PRES_PROTO );
+
+ atn_ulcs_tree = proto_item_add_subtree(ti, ett_atn_pres);
+
+ value_pres = tvb_get_guint8(tvb, offset);
+
+ /* need session context to identify PPDU type */
+ /* note: */
+ /* it is *unfeasible* to use proto_tree_add_item here: */
+ /* presentation type is always the same constant but its type */
+ /* is implicitly determined by preceding session context */
+ proto_tree_add_text(atn_ulcs_tree,
+ tvb,
+ offset,
+ 1,
+ "%s (0x%02x)",
+ val_to_str( value_ses_pres & ATN_SES_PRES_MASK , atn_pres_vals, "?"),
+ value_pres);
+
+ /* PPDU errorcode in case of SRF/CPR */
+ switch(value_ses & SES_PDU_TYPE_MASK){
+ case SES_ATN_SRF:
+ case SES_ATN_SRFC:
+ proto_tree_add_item(
+ atn_ulcs_tree,
+ hf_atn_pres_err,
+ tvb,
+ offset,
+ 1,
+ ENC_BIG_ENDIAN );
+ break;
+ default:
+ break;
+ }
+
+ offset++;
+
+ /* ACSE PDU: dissect application layer */
+ ti = proto_tree_add_text(
+ tree,
+ tvb,
+ offset,
+ 0,
+ ATN_ACSE_PROTO );
+
+ atn_ulcs_tree = proto_item_add_subtree(
+ ti,
+ ett_atn_acse);
+
+ dissect_ACSE_apdu_PDU(
+ tvb_new_subset_remaining(tvb, offset),
+ pinfo,
+ atn_ulcs_tree);
+
+ return offset +
+ tvb_reported_length_remaining(tvb, offset );
+ }
+ return offset;
+}
+
+static gboolean dissect_atn_ulcs_heur(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ /* do we have enough data*/
+ /* at least session + presentation data or pdv-list */
+ if (tvb_reported_length_remaining(tvb, 0) < 2){
+ return FALSE; }
+
+ /* check for session/presentation/ACSE PDU's */
+ /* SPDU and PPDU are one octet each */
+ switch( tvb_get_ntohs(tvb, 0) & 0xf8ff ){
+ case 0xe802: /* SCN + CP*/
+ case 0xf802: /* SCNC + CP */
+ case 0xf002: /* SAC + CPA */
+ case 0xd802: /* SACC + CPA */
+ case 0xe002: /* SRF + CPR + R0 */
+ case 0xe012: /* SRF + CPR + R1 */
+ case 0xe022: /* SRF + CPR + R2 */
+ case 0xe032: /* SRF + CPR + R3 */
+ case 0xe042: /* SRF + CPR + R4 */
+ case 0xe052: /* SRF + CPR + R5 */
+ case 0xe062: /* SRF + CPR + R6 */
+ case 0xe072: /* SRF + CPR + R7 */
+ case 0xa002: /* SRFC + CPR + R0*/
+ case 0xa012: /* SRFC + CPR + R1*/
+ case 0xa022: /* SRFC + CPR + R2*/
+ case 0xa032: /* SRFC + CPR + R3*/
+ case 0xa042: /* SRFC + CPR + R4*/
+ case 0xa052: /* SRFC + CPR + R5*/
+ case 0xa062: /* SRFC + CPR + R6*/
+ case 0xa072: /* SRFC + CPR + R7*/
+ /* indicate to dissector routine */
+ /* that a least SPDU, PPDU and */
+ /* ACSE PDU is present */
+ dissect_atn_ulcs(
+ tvb,
+ pinfo,
+ tree,
+ (void*) TRUE);
+ return TRUE;
+ default: /* no SPDU */
+ break;
+ }
+
+ /* try to detect "Fully-encoded-data" heuristically */
+ /* the constants listed match the ASN.1 PER encoding */
+ /* of PDV-List */
+ switch( tvb_get_ntohs(tvb, 0) & 0xfff0 ){
+ case 0x0020: /* acse-apdu */
+ case 0x00a0: /* user-ase-apdu */
+ /* indicate to dissector routine */
+ /* that a PDV-list PDU is present */
+ /* */
+ /* PDV-list PDU may contain */
+ /* application protocol data (CM, CPDLC) */
+ /* or an ACSE PDU */
+ dissect_atn_ulcs(tvb, pinfo, tree, (void*) FALSE);
+ return TRUE;
+ break;
+ default: /* no or unsupported PDU */
+ break;
+ }
+ return FALSE;
+}
+
+void proto_register_atn_ulcs (void)
+{
+ static hf_register_info hf_atn_ulcs[] = {
+
+/*--- Included file: packet-atn-ulcs-hfarr.c ---*/
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-hfarr.c"
+ { &hf_atn_ulcs_Fully_encoded_data_PDU,
+ { "Fully-encoded-data", "atn-ulcs.Fully_encoded_data",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ACSE_apdu_PDU,
+ { "ACSE-apdu", "atn-ulcs.ACSE_apdu",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_ACSE_apdu_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_Fully_encoded_data_item,
+ { "PDV-list", "atn-ulcs.PDV_list_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_transfer_syntax_name,
+ { "transfer-syntax-name", "atn-ulcs.transfer_syntax_name",
+ FT_OID, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_presentation_context_identifier,
+ { "presentation-context-identifier", "atn-ulcs.presentation_context_identifier",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Presentation_context_identifier_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_presentation_data_values,
+ { "presentation-data-values", "atn-ulcs.presentation_data_values",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_T_presentation_data_values_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_pdv_list_presentation_data_values_single_asn1_type,
+ { "single-ASN1-type", "atn-ulcs.single_ASN1_type_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "T_pdv_list_presentation_data_values_single_asn1_type", HFILL }},
+ { &hf_atn_ulcs_octet_aligned,
+ { "octet-aligned", "atn-ulcs.octet_aligned",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING", HFILL }},
+ { &hf_atn_ulcs_pdv_list_presentation_data_values_arbitrary,
+ { "arbitrary", "atn-ulcs.arbitrary",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_pdv_list_presentation_data_values_arbitrary", HFILL }},
+ { &hf_atn_ulcs_direct_reference,
+ { "direct-reference", "atn-ulcs.direct_reference",
+ FT_OID, BASE_NONE, NULL, 0,
+ "OBJECT_IDENTIFIER", HFILL }},
+ { &hf_atn_ulcs_indirect_reference,
+ { "indirect-reference", "atn-ulcs.indirect_reference",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "INTEGER", HFILL }},
+ { &hf_atn_ulcs_data_value_descriptor,
+ { "data-value-descriptor", "atn-ulcs.data_value_descriptor",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_encoding,
+ { "encoding", "atn-ulcs.encoding",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_T_encoding_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_externalt_encoding_single_asn1_type,
+ { "single-ASN1-type", "atn-ulcs.single_ASN1_type_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "T_externalt_encoding_single_asn1_type", HFILL }},
+ { &hf_atn_ulcs_externalt_encoding_octet_aligned,
+ { "octet-aligned", "atn-ulcs.octet_aligned",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_externalt_encoding_octet_aligned", HFILL }},
+ { &hf_atn_ulcs_externalt_encoding_arbitrary,
+ { "arbitrary", "atn-ulcs.arbitrary",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_externalt_encoding_arbitrary", HFILL }},
+ { &hf_atn_ulcs_aarq,
+ { "aarq", "atn-ulcs.aarq_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "AARQ_apdu", HFILL }},
+ { &hf_atn_ulcs_aare,
+ { "aare", "atn-ulcs.aare_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "AARE_apdu", HFILL }},
+ { &hf_atn_ulcs_rlrq,
+ { "rlrq", "atn-ulcs.rlrq_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RLRQ_apdu", HFILL }},
+ { &hf_atn_ulcs_rlre,
+ { "rlre", "atn-ulcs.rlre_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RLRE_apdu", HFILL }},
+ { &hf_atn_ulcs_abrt,
+ { "abrt", "atn-ulcs.abrt_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ABRT_apdu", HFILL }},
+ { &hf_atn_ulcs_aarq_apdu_protocol_version,
+ { "protocol-version", "atn-ulcs.protocol_version",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_aarq_apdu_protocol_version", HFILL }},
+ { &hf_atn_ulcs_application_context_name,
+ { "application-context-name", "atn-ulcs.application_context_name",
+ FT_OID, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_called_AP_title,
+ { "called-AP-title", "atn-ulcs.called_AP_title",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AP_title_vals), 0,
+ "AP_title", HFILL }},
+ { &hf_atn_ulcs_called_AE_qualifier,
+ { "called-AE-qualifier", "atn-ulcs.called_AE_qualifier",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AE_qualifier_vals), 0,
+ "AE_qualifier", HFILL }},
+ { &hf_atn_ulcs_called_AP_invocation_identifier,
+ { "called-AP-invocation-identifier", "atn-ulcs.called_AP_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AP_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_called_AE_invocation_identifier,
+ { "called-AE-invocation-identifier", "atn-ulcs.called_AE_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AE_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_calling_AP_title,
+ { "calling-AP-title", "atn-ulcs.calling_AP_title",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AP_title_vals), 0,
+ "AP_title", HFILL }},
+ { &hf_atn_ulcs_calling_AE_qualifier,
+ { "calling-AE-qualifier", "atn-ulcs.calling_AE_qualifier",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AE_qualifier_vals), 0,
+ "AE_qualifier", HFILL }},
+ { &hf_atn_ulcs_calling_AP_invocation_identifier,
+ { "calling-AP-invocation-identifier", "atn-ulcs.calling_AP_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AP_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_calling_AE_invocation_identifier,
+ { "calling-AE-invocation-identifier", "atn-ulcs.calling_AE_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AE_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_sender_acse_requirements,
+ { "sender-acse-requirements", "atn-ulcs.sender_acse_requirements",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "ACSE_requirements", HFILL }},
+ { &hf_atn_ulcs_mechanism_name,
+ { "mechanism-name", "atn-ulcs.mechanism_name",
+ FT_OID, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_calling_authentication_value,
+ { "calling-authentication-value", "atn-ulcs.calling_authentication_value",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Authentication_value_vals), 0,
+ "Authentication_value", HFILL }},
+ { &hf_atn_ulcs_application_context_name_list,
+ { "application-context-name-list", "atn-ulcs.application_context_name_list",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_implementation_information,
+ { "implementation-information", "atn-ulcs.implementation_information",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "Implementation_data", HFILL }},
+ { &hf_atn_ulcs_user_information,
+ { "user-information", "atn-ulcs.user_information",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Association_information", HFILL }},
+ { &hf_atn_ulcs_aare_apdu_protocol_version,
+ { "protocol-version", "atn-ulcs.protocol_version",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "T_aare_apdu_protocol_version", HFILL }},
+ { &hf_atn_ulcs_result,
+ { "result", "atn-ulcs.result",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Associate_result_vals), 0,
+ "Associate_result", HFILL }},
+ { &hf_atn_ulcs_result_source_diagnostic,
+ { "result-source-diagnostic", "atn-ulcs.result_source_diagnostic",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Associate_source_diagnostic_vals), 0,
+ "Associate_source_diagnostic", HFILL }},
+ { &hf_atn_ulcs_responding_AP_title,
+ { "responding-AP-title", "atn-ulcs.responding_AP_title",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AP_title_vals), 0,
+ "AP_title", HFILL }},
+ { &hf_atn_ulcs_responding_AE_qualifier,
+ { "responding-AE-qualifier", "atn-ulcs.responding_AE_qualifier",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_AE_qualifier_vals), 0,
+ "AE_qualifier", HFILL }},
+ { &hf_atn_ulcs_responding_AP_invocation_identifier,
+ { "responding-AP-invocation-identifier", "atn-ulcs.responding_AP_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AP_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_responding_AE_invocation_identifier,
+ { "responding-AE-invocation-identifier", "atn-ulcs.responding_AE_invocation_identifier",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "AE_invocation_identifier", HFILL }},
+ { &hf_atn_ulcs_responder_acse_requirements,
+ { "responder-acse-requirements", "atn-ulcs.responder_acse_requirements",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "ACSE_requirements", HFILL }},
+ { &hf_atn_ulcs_responding_authentication_value,
+ { "responding-authentication-value", "atn-ulcs.responding_authentication_value",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Authentication_value_vals), 0,
+ "Authentication_value", HFILL }},
+ { &hf_atn_ulcs_rlrq_apdu_request_reason,
+ { "reason", "atn-ulcs.reason",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Release_request_reason_vals), 0,
+ "Release_request_reason", HFILL }},
+ { &hf_atn_ulcs_rlre_apdu_response_reason,
+ { "reason", "atn-ulcs.reason",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Release_response_reason_vals), 0,
+ "Release_response_reason", HFILL }},
+ { &hf_atn_ulcs_abort_source,
+ { "abort-source", "atn-ulcs.abort_source",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_ABRT_source_vals), 0,
+ "ABRT_source", HFILL }},
+ { &hf_atn_ulcs_abort_diagnostic,
+ { "abort-diagnostic", "atn-ulcs.abort_diagnostic",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_ABRT_diagnostic_vals), 0,
+ "ABRT_diagnostic", HFILL }},
+ { &hf_atn_ulcs_Application_context_name_list_item,
+ { "Application-context-name", "atn-ulcs.Application_context_name",
+ FT_OID, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ap_title_form2,
+ { "ap-title-form2", "atn-ulcs.ap_title_form2",
+ FT_OID, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ap_title_form1,
+ { "ap-title-form1", "atn-ulcs.ap_title_form1",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_Name_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ae_qualifier_form2,
+ { "ae-qualifier-form2", "atn-ulcs.ae_qualifier_form2",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ae_qualifier_form1,
+ { "ae-qualifier-form1", "atn-ulcs.ae_qualifier_form1",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_acse_service_user,
+ { "acse-service-user", "atn-ulcs.acse_service_user",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_T_acse_service_user_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_acse_service_provider,
+ { "acse-service-provider", "atn-ulcs.acse_service_provider",
+ FT_UINT32, BASE_DEC, VALS(atn_ulcs_T_acse_service_provider_vals), 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_Association_information_item,
+ { "EXTERNALt", "atn-ulcs.EXTERNALt_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_charstring,
+ { "charstring", "atn-ulcs.charstring",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING", HFILL }},
+ { &hf_atn_ulcs_bitstring,
+ { "bitstring", "atn-ulcs.bitstring",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING", HFILL }},
+ { &hf_atn_ulcs_external,
+ { "external", "atn-ulcs.external_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_other,
+ { "other", "atn-ulcs.other_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_other_mechanism_name,
+ { "other-mechanism-name", "atn-ulcs.other_mechanism_name",
+ FT_OID, BASE_NONE, NULL, 0,
+ "OBJECT_IDENTIFIER", HFILL }},
+ { &hf_atn_ulcs_other_mechanism_value,
+ { "other-mechanism-value", "atn-ulcs.other_mechanism_value_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_rdnSequence,
+ { "rdnSequence", "atn-ulcs.rdnSequence",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_RDNSequence_item,
+ { "RelativeDistinguishedName", "atn-ulcs.RelativeDistinguishedName",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_RelativeDistinguishedName_item,
+ { "AttributeTypeAndValue", "atn-ulcs.AttributeTypeAndValue_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_null,
+ { "null", "atn-ulcs.null_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_T_aarq_apdu_protocol_version_version1,
+ { "version1", "atn-ulcs.version1",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_T_aare_apdu_protocol_version_version1,
+ { "version1", "atn-ulcs.version1",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ACSE_requirements_authentication,
+ { "authentication", "atn-ulcs.authentication",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_atn_ulcs_ACSE_requirements_application_context_negotiation,
+ { "application-context-negotiation", "atn-ulcs.application-context-negotiation",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+/*--- End of included file: packet-atn-ulcs-hfarr.c ---*/
+#line 810 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+ {&hf_atn_ses_type,
+ { "SPDU Type",
+ "atn-ulcs.ses.type",
+ FT_UINT8,
+ BASE_HEX,
+ VALS(atn_ses_type),
+ 0xf8,
+ "Indicates presence of session parameters",
+ HFILL}},
+ {&hf_atn_ses_param_ind,
+ { "SPDU Parameter Indication",
+ "atn-ulcs.ses.parameter-indication",
+ FT_UINT8,
+ BASE_HEX,
+ VALS(atn_ses_param_ind),
+ SES_PARAM_IND_MASK,
+ "Indicates presence of session parameters",
+ HFILL}},
+ {&hf_atn_ses_param_b1,
+ { "SRF Parameter B1",
+ "atn-ulcs.ses.srf-b1",
+ FT_UINT8,
+ BASE_HEX,
+ VALS(srf_b1),
+ 0x01,
+ "Determines if transport connection reject is \
+ transient or persistent",
+ HFILL}},
+ {&hf_atn_ses_param_b2,
+ { "SRF Parameter B2",
+ "atn-ulcs.ses.srf-b2",
+ FT_UINT8,
+ BASE_HEX,
+ VALS(srf_b2),
+ 0x02,
+ "Determines if transport connection is \
+ retained or released",
+ HFILL}},
+ { &hf_atn_pres_err,
+ { "Error Code", "atn-ulcs.pres.cpr-error",
+ FT_UINT8,
+ BASE_HEX,
+ VALS(atn_pres_err),
+ PRES_CPR_ER_MASK,
+ NULL,
+ HFILL}},
+ };
+
+ static gint *ett[] = {
+
+/*--- Included file: packet-atn-ulcs-ettarr.c ---*/
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-ettarr.c"
+ &ett_atn_ulcs_Fully_encoded_data,
+ &ett_atn_ulcs_PDV_list,
+ &ett_atn_ulcs_T_presentation_data_values,
+ &ett_atn_ulcs_EXTERNALt,
+ &ett_atn_ulcs_T_encoding,
+ &ett_atn_ulcs_ACSE_apdu,
+ &ett_atn_ulcs_AARQ_apdu,
+ &ett_atn_ulcs_T_aarq_apdu_protocol_version,
+ &ett_atn_ulcs_AARE_apdu,
+ &ett_atn_ulcs_T_aare_apdu_protocol_version,
+ &ett_atn_ulcs_RLRQ_apdu,
+ &ett_atn_ulcs_RLRE_apdu,
+ &ett_atn_ulcs_ABRT_apdu,
+ &ett_atn_ulcs_ACSE_requirements,
+ &ett_atn_ulcs_Application_context_name_list,
+ &ett_atn_ulcs_AP_title,
+ &ett_atn_ulcs_AE_qualifier,
+ &ett_atn_ulcs_Associate_source_diagnostic,
+ &ett_atn_ulcs_Association_information,
+ &ett_atn_ulcs_Authentication_value,
+ &ett_atn_ulcs_T_other,
+ &ett_atn_ulcs_Name,
+ &ett_atn_ulcs_RDNSequence,
+ &ett_atn_ulcs_RelativeDistinguishedName,
+ &ett_atn_ulcs_AttributeTypeAndValue,
+
+/*--- End of included file: packet-atn-ulcs-ettarr.c ---*/
+#line 860 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c"
+ &ett_atn_ses,
+ &ett_atn_pres,
+ &ett_atn_acse,
+ &ett_atn_ulcs
+ };
+
+ proto_atn_ulcs = proto_register_protocol (
+ ATN_ULCS_PROTO ,
+ "ATN-ULCS",
+ "atn-ulcs");
+
+ proto_register_field_array (
+ proto_atn_ulcs,
+ hf_atn_ulcs,
+ array_length(hf_atn_ulcs));
+
+ proto_register_subtree_array (
+ ett,
+ array_length (ett));
+
+ new_register_dissector(
+ "atn-ulcs",
+ dissect_atn_ulcs,
+ proto_atn_ulcs);
+
+ atn_cm_handle = find_dissector("atn-cm");
+ atn_cpdlc_handle = find_dissector("atn-cpdlc");
+
+ /* initiate sub dissector list */
+ register_heur_dissector_list(
+ "atn-ulcs",
+ &atn_ulcs_heur_subdissector_list);
+
+ /* init aare/aare data */
+ if(!aarq_data_tree) {
+ aarq_data_tree = se_tree_create(
+ EMEM_TREE_TYPE_RED_BLACK,
+ "aarq-data"); }
+
+ if(!atn_conversation_tree) {
+ atn_conversation_tree = se_tree_create(
+ EMEM_TREE_TYPE_RED_BLACK,
+ "atn-conversations"); }
+}
+
+void proto_reg_handoff_atn_ulcs(void)
+{
+ /* add session dissector to cotp dissector list dissector list*/
+ heur_dissector_add(
+ "cotp",
+ dissect_atn_ulcs_heur,
+ proto_atn_ulcs);
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
diff --git a/epan/dissectors/packet-atn-ulcs.h b/epan/dissectors/packet-atn-ulcs.h
new file mode 100644
index 0000000000..ae070a6f9f
--- /dev/null
+++ b/epan/dissectors/packet-atn-ulcs.h
@@ -0,0 +1,122 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-atn-ulcs.h */
+/* ../../tools/asn2wrs.py -u -L -p atn-ulcs -c ./atn-ulcs.cnf -s ./packet-atn-ulcs-template -D . -O ../../epan/dissectors atn-ulcs.asn */
+
+/* Input file: packet-atn-ulcs-template.h */
+
+#line 1 "../../asn1/atn-ulcs/packet-atn-ulcs-template.h"
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+
+/* packet-atn-ulcs.h
+ * Definitions for atn packet disassembly structures and routines
+ *
+ *
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef PACKET_ATN_ULCS_H
+#define PACKET_ATN_ULCS_H
+
+#include "config.h"
+
+#include "packet.h"
+
+/* IA5 charset (7-bit) for PER IA5 decoding */
+static const gchar ia5alpha[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, \
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, \
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, \
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, \
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, \
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, \
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, \
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, \
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, '\0'
+};
+
+enum msg_type {
+ um,
+ dm,
+ no_msg
+};
+
+enum ae_qualifier {
+ ads = 0,
+ cma =1, /* contact management (CM) */
+ cpdlc = 2, /* "plain old" CPDLC */
+ ati = 3 ,
+ arf =10 ,
+ met =11,
+ gac =12,
+ pmcpdlc =22, /* "protected mode" CPDLC */
+ unknown = -1
+};
+
+typedef struct atn_conversation_t {
+ gint ae_qualifier; /* A/G application type */
+} atn_conversation_t;
+
+atn_conversation_t * create_atn_conversation(
+ address*,
+ guint16,
+ address*,
+ atn_conversation_t*);
+
+atn_conversation_t * find_atn_conversation(
+ address*,
+ guint16,
+ address*);
+
+/* struct for conversation data reconstruction used in AARQ and AARE */
+/* if transport data is larger than 32 octets AARQ/AARE is contained */
+/* within DT frames which have only dest_ref, but no src_ref */
+/* if AARQ/AARQ is contained within CR/CC only src_ref is present in CR */
+/* while CC provides src_ref and dstref */
+typedef struct aarq_data_t {
+ gboolean aarq_pending; /* flag tells whether AARQ/sequence is pending (true) */
+ /* required not to mix up different AARQ/AARE sequences */
+ /* during simoultanous establishment of transport connections */
+ /* i.e. GND facility initialises cpcstart and cmcontact at the same time */
+ atn_conversation_t* cv; /* pointer to AARQ conversation */
+} aarq_data_t;
+
+emem_tree_t *get_atn_conversation_tree(void);
+
+guint32 get_aircraft_24_bit_address_from_nsap(packet_info *);
+int check_heur_msg_type(packet_info *);
+
+#endif
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 noexpandtab:
+ * :indentSize=2:tabSize=2:noTabs=false:
+ */
+