From c5af152628f84cfddfa3d872d8be5b58d9a0ae03 Mon Sep 17 00:00:00 2001 From: Bill Meier Date: Sun, 9 Aug 2015 12:20:54 -0400 Subject: Trivial: Convert 'tabs' indentation to '4 space' indentation Change-Id: If71dd8a04050ce11e37ad88ee862419313c06639 Reviewed-on: https://code.wireshark.org/review/9946 Reviewed-by: Bill Meier --- asn1/atn-cm/atn-cm.asn | 197 +- asn1/atn-cm/atn-cm.cnf | 18 +- asn1/atn-cm/packet-atn-cm-template.c | 317 ++- asn1/atn-cpdlc/atn-cpdlc.asn | 3464 ++++++++++++++-------------- asn1/atn-cpdlc/atn-cpdlc.cnf | 130 +- asn1/atn-cpdlc/packet-atn-cpdlc-template.c | 510 ++-- asn1/atn-ulcs/atn-ulcs.asn | 484 ++-- asn1/atn-ulcs/atn-ulcs.cnf | 912 ++++---- asn1/atn-ulcs/packet-atn-ulcs-template.c | 1277 +++++----- asn1/atn-ulcs/packet-atn-ulcs-template.h | 83 +- 10 files changed, 3672 insertions(+), 3720 deletions(-) (limited to 'asn1') diff --git a/asn1/atn-cm/atn-cm.asn b/asn1/atn-cm/atn-cm.asn index ccd9bbe198..fdbf4ddf70 100644 --- a/asn1/atn-cm/atn-cm.asn +++ b/asn1/atn-cm/atn-cm.asn @@ -1,10 +1,5 @@ --- c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: - - -- ICAO doc 9705 Edition 2 Contact Management (CM) -CMMessageSetVersion1 DEFINITIONS AUTOMATIC TAGS ::= +CMMessageSetVersion1 DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- ---------------------------------------------------------------------------------- @@ -14,24 +9,24 @@ BEGIN CMAircraftMessage ::= CHOICE { - cmLogonRequest [0] CMLogonRequest, - cmContactResponse [1] CMContactResponse, - cmAbortReason [2] CMAbortReason, - ... -} + cmLogonRequest [0] CMLogonRequest, + cmContactResponse [1] CMContactResponse, + cmAbortReason [2] CMAbortReason, + ... +} -- Ground-generated messages CMGroundMessage ::= CHOICE { - cmLogonResponse [0] CMLogonResponse, - cmUpdate [1] CMUpdate, - cmContactRequest [2] CMContactRequest, - cmForwardRequest [3] CMForwardRequest, - cmAbortReason [4] CMAbortReason, - cmForwardResponse [5] CMForwardResponse, - ... -} + cmLogonResponse [0] CMLogonResponse, + cmUpdate [1] CMUpdate, + cmContactRequest [2] CMContactRequest, + cmForwardRequest [3] CMForwardRequest, + cmAbortReason [4] CMAbortReason, + cmForwardResponse [5] CMForwardResponse, + ... +} -- ---------------------------------------------------------------------------------- -- CM Message Components @@ -42,145 +37,145 @@ Airport ::=IA5String (SIZE(4)) APAddress ::= CHOICE { - longTsap [0] LongTsap, - shortTsap [1] ShortTsap -} + longTsap [0] LongTsap, + shortTsap [1] ShortTsap +} AEQualifier ::= INTEGER (0..255) --- ATN AE-Qualifier Numeric Values are described in 4 +-- ATN AE-Qualifier Numeric Values are described in 4 AEQualifierVersion ::= SEQUENCE { - aeQualifier AEQualifier, - apVersion VersionNumber -} + aeQualifier AEQualifier, + apVersion VersionNumber +} AEQualifierVersionAddress ::= SEQUENCE { - aeQualifier AEQualifier, - apVersion VersionNumber, - apAddress APAddress -} + aeQualifier AEQualifier, + apVersion VersionNumber, + apAddress APAddress +} CMAbortReason ::= ENUMERATED { - timer-expired (0), - undefined-error (1), - invalid-PDU (2), - protocol-error (3), - dialogue-acceptance-not-permitted (4), - dialogue-end-not-accepted (5), - communication-service-error (6), - communication-service-failure (7), - invalid-QOS-parameter (8), - expected-PDU-missing (9), - ... -} - + timer-expired (0), + undefined-error (1), + invalid-PDU (2), + protocol-error (3), + dialogue-acceptance-not-permitted (4), + dialogue-end-not-accepted (5), + communication-service-error (6), + communication-service-failure (7), + invalid-QOS-parameter (8), + expected-PDU-missing (9), + ... +} + CMContactRequest ::= SEQUENCE { - facilityDesignation FacilityDesignation, - address LongTsap -} + facilityDesignation FacilityDesignation, + address LongTsap +} -CMContactResponse ::= Response +CMContactResponse ::= Response -CMForwardRequest ::= CMLogonRequest +CMForwardRequest ::= CMLogonRequest CMForwardResponse ::= ENUMERATED { - success (0), - incompatible-version (1), - service-not-supported (2) + success (0), + incompatible-version (1), + service-not-supported (2) } CMLogonRequest ::= SEQUENCE { - aircraftFlightIdentification [0] AircraftFlightIdentification, - cMLongTSAP [1] LongTsap, + aircraftFlightIdentification [0] AircraftFlightIdentification, + cMLongTSAP [1] LongTsap, - groundInitiatedApplications [2] SEQUENCE SIZE (1..256) OF AEQualifierVersionAddress OPTIONAL, - airOnlyInitiatedApplications [3] SEQUENCE SIZE (1..256) OF AEQualifierVersion OPTIONAL, - facilityDesignation [4] FacilityDesignation OPTIONAL, - airportDeparture [5] Airport OPTIONAL, - airportDestination [6] Airport OPTIONAL, - dateTimeDepartureETD [7] DateTime OPTIONAL -} + groundInitiatedApplications [2] SEQUENCE SIZE (1..256) OF AEQualifierVersionAddress OPTIONAL, + airOnlyInitiatedApplications [3] SEQUENCE SIZE (1..256) OF AEQualifierVersion OPTIONAL, + facilityDesignation [4] FacilityDesignation OPTIONAL, + airportDeparture [5] Airport OPTIONAL, + airportDestination [6] Airport OPTIONAL, + dateTimeDepartureETD [7] DateTime OPTIONAL +} CMLogonResponse ::= SEQUENCE { - airInitiatedApplications [0] SEQUENCE SIZE (1..256) OF AEQualifierVersionAddress - OPTIONAL, - groundOnlyInitiatedApplications [1] SEQUENCE SIZE (1..256) OF AEQualifierVersion - OPTIONAL -} + airInitiatedApplications [0] SEQUENCE SIZE (1..256) OF AEQualifierVersionAddress + OPTIONAL, + groundOnlyInitiatedApplications [1] SEQUENCE SIZE (1..256) OF AEQualifierVersion + OPTIONAL +} CMUpdate ::= CMLogonResponse Date ::= SEQUENCE { - year Year, - month Month, - day Day + year Year, + month Month, + day Day } - -- The Date field does not have to correspond to the flight if the field is not to be used; - -- the field's value can be assigned a meaningless, but compliant, value locally. If operational - -- use of the Date field is intended, there must be bilateral agreements in place to ensure its proper - -- use. This is a local implementation issue. + -- The Date field does not have to correspond to the flight if the field is not to be used; + -- the field's value can be assigned a meaningless, but compliant, value locally. If operational + -- use of the Date field is intended, there must be bilateral agreements in place to ensure its proper + -- use. This is a local implementation issue. DateTime ::= SEQUENCE { - date Date, - time Time -} + date Date, + time Time +} Day ::= INTEGER (1..31) - --unit = Day, Range (1..31), resolution = 1 + --unit = Day, Range (1..31), resolution = 1 FacilityDesignation ::= IA5String (SIZE(4..8)) LongTsap ::= SEQUENCE { - rDP OCTET STRING (SIZE(5)), - shortTsap ShortTsap -} + rDP OCTET STRING (SIZE(5)), + shortTsap ShortTsap +} Month ::= INTEGER (1..12) - --unit = Month, Range (1..12), resolution = 1 + --unit = Month, Range (1..12), resolution = 1 Response ::= ENUMERATED { - contactSuccess (0), - contactNotSuccessful (1) -} + contactSuccess (0), + contactNotSuccessful (1) +} ShortTsap ::= SEQUENCE { - aRS [0] OCTET STRING (SIZE(3)) OPTIONAL, - -- the aRS contains the ICAO 24 bit aircraft address when the ShortTsap belongs to an aircraft; - -- or a ground address when the Short Tsap belongs to a ground system - locSysNselTsel [1] OCTET STRING (SIZE(10..11)) -} + aRS [0] OCTET STRING (SIZE(3)) OPTIONAL, + -- the aRS contains the ICAO 24 bit aircraft address when the ShortTsap belongs to an aircraft; + -- or a ground address when the Short Tsap belongs to a ground system + locSysNselTsel [1] OCTET STRING (SIZE(10..11)) +} Time ::= SEQUENCE { - hours Timehours, - minutes Timeminutes -} + hours Timehours, + minutes Timeminutes +} -Timehours ::= INTEGER (0..23) +Timehours ::= INTEGER (0..23) -- units = hour, range (0..23), resolution = 1 hour -Timeminutes ::= INTEGER (0..59) +Timeminutes ::= INTEGER (0..59) -- units = minute, range (0..59), resolution = 1 minute -VersionNumber ::= INTEGER (1..255) - -- VersionNumber 0 is reserved for the Dialogue Service +VersionNumber ::= INTEGER (1..255) + -- VersionNumber 0 is reserved for the Dialogue Service Year ::= INTEGER (1996..2095) - --unit = Year, Range (1996..2095), resolution = 1 + --unit = Year, Range (1996..2095), resolution = 1 END @@ -188,12 +183,12 @@ END -- Editor modelines - http://www.wireshark.org/tools/modelines.html -- -- Local variables: --- c-basic-offset: 2 --- tab-width: 2 --- indent-tabs-mode: t +-- c-basic-offset: 4 +-- tab-width: 8 +-- indent-tabs-mode: nil -- End: -- --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: +-- vi: set shiftwidth=4 tabstop=8 expandtab: +-- :indentSize=4:tabSize=8:noTabs=true: -- diff --git a/asn1/atn-cm/atn-cm.cnf b/asn1/atn-cm/atn-cm.cnf index 38e23bc0bd..4f7d282f6d 100644 --- a/asn1/atn-cm/atn-cm.cnf +++ b/asn1/atn-cm/atn-cm.cnf @@ -1,24 +1,20 @@ -# c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: - #.MODULE_IMPORT #.EXPORTS #.PDU_NEW - CMAircraftMessage - CMGroundMessage + CMAircraftMessage + CMGroundMessage #.END # # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: -# c-basic-offset: 2 -# tab-width: 2 -# indent-tabs-mode: t +# c-basic-offset: 4 +# tab-width: 8 +# indent-tabs-mode: nil # End: # -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: +# vi: set shiftwidth=4 tabstop=8 expandtab: +# :indentSize=4:tabSize=8:noTabs=true: diff --git a/asn1/atn-cm/packet-atn-cm-template.c b/asn1/atn-cm/packet-atn-cm-template.c index 46373fd277..4dddf6ef53 100644 --- a/asn1/atn-cm/packet-atn-cm-template.c +++ b/asn1/atn-cm/packet-atn-cm-template.c @@ -1,9 +1,3 @@ -/* 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 * Copyright 2013 @@ -67,185 +61,184 @@ static int proto_atn_cm = -1; static int dissect_atn_cm( - tvbuff_t *tvb, - packet_info *pinfo, - proto_tree *tree, - void *data _U_) + tvbuff_t *tvb, + packet_info *pinfo, + proto_tree *tree, + void *data _U_) { - int type; - proto_tree *sub_tree; - - sub_tree = proto_tree_add_subtree( - tree, tvb, 0, -1, ett_atn_cm, NULL, ATN_CM_PROTO); - - /* ti = proto_tree_add_item(tree, proto_atn_cm, tvb, 0, 0 , ENC_NA); */ - /* 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, NULL); - break; - case dm: - dissect_CMAircraftMessage_PDU( - tvb, - pinfo, - sub_tree, NULL); - break; - default: - break; - } - return tvb_reported_length_remaining(tvb, 0); + int type; + proto_tree *sub_tree; + + sub_tree = proto_tree_add_subtree( + tree, tvb, 0, -1, ett_atn_cm, NULL, ATN_CM_PROTO); + + /* ti = proto_tree_add_item(tree, proto_atn_cm, tvb, 0, 0 , ENC_NA); */ + /* 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, NULL); + break; + case dm: + dissect_CMAircraftMessage_PDU( + tvb, + pinfo, + sub_tree, NULL); + 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_) + tvbuff_t *tvb, + packet_info *pinfo, + proto_tree *tree, + void *data _U_) { - atn_conversation_t *atn_cv = NULL; - volatile 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, 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, 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; + atn_conversation_t *atn_cv = NULL; + volatile 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, 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, 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[] = { - #include "packet-atn-cm-hfarr.c" + #include "packet-atn-cm-hfarr.c" }; - static gint *ett[] = { - #include "packet-atn-cm-ettarr.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); + static gint *ett[] = { + #include "packet-atn-cm-ettarr.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, - "ATN-CM over ATN-ULCS", - "atn-cm-ulcs", - proto_atn_cm, HEURISTIC_ENABLE); + /* add session dissector to subdissector list*/ + heur_dissector_add( + "atn-ulcs", + dissect_atn_cm_heur, + "ATN-CM over ATN-ULCS", + "atn-cm-ulcs", + proto_atn_cm, HEURISTIC_ENABLE); } /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: - * c-basic-offset: 2 - * tab-width: 2 - * indent-tabs-mode: t + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=2 tabstop=2 noexpandtab: - * :indentSize=2:tabSize=2:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ - diff --git a/asn1/atn-cpdlc/atn-cpdlc.asn b/asn1/atn-cpdlc/atn-cpdlc.asn index 7702d39b17..32fc1a13f9 100644 --- a/asn1/atn-cpdlc/atn-cpdlc.asn +++ b/asn1/atn-cpdlc/atn-cpdlc.asn @@ -1,98 +1,94 @@ --- c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: - -- Sub-Volume IV ASN.1 reference definitions for ICAO Doc. 9705, -- Second Edition -- Version 1.1, 03 Oct 2001 -- protected mode PDR's --- 2011-10-25 Doc 9705 Draft Ed 3 (ICAO web site - 11/00) including "9705 PDRS FOR CPDLC" +-- 2011-10-25 Doc 9705 Draft Ed 3 (ICAO web site - 11/00) including "9705 PDRS FOR CPDLC" -- based on "ACP WGN SG/N2 Version 1.1 (Output Montreal - May 2005)" --- plain old CPDLC -CPDLCAPDUsVersion1 DEFINITIONS ::= +-- plain old CPDLC +CPDLCAPDUsVersion1 DEFINITIONS ::= BEGIN IMPORTS - ATCUplinkMessage, ATCDownlinkMessage - FROM PMCPDLCMessageSetVersion1 - ATCForwardMessage, ATCForwardResponse - FROM PMCPDLCAPDUsVersion1; + ATCUplinkMessage, ATCDownlinkMessage + FROM PMCPDLCMessageSetVersion1 + ATCForwardMessage, ATCForwardResponse + FROM PMCPDLCAPDUsVersion1; -- ---------------------------------------------------------------------------------- -- Ground Generated Messages - Top level -- ---------------------------------------------------------------------------------- GroundPDUs ::= CHOICE { - abortUser [0] CPDLCUserAbortReason, - abortProvider [1] CPDLCProviderAbortReason, - startup [2] UplinkMessage, - send [3] ATCUplinkMessage, - forward [4] ATCForwardMessage, - forwardresponse [5] ATCForwardResponse, - ... + abortUser [0] CPDLCUserAbortReason, + abortProvider [1] CPDLCProviderAbortReason, + startup [2] UplinkMessage, + send [3] ATCUplinkMessage, + forward [4] ATCForwardMessage, + forwardresponse [5] ATCForwardResponse, + ... } UplinkMessage ::= CHOICE { - noMessage [0] NULL, - aTCUplinkMessage [1] ATCUplinkMessage + noMessage [0] NULL, + aTCUplinkMessage [1] ATCUplinkMessage } AircraftPDUs::= CHOICE { - abortUser [0] CPDLCUserAbortReason, - abortProvider [1] CPDLCProviderAbortReason, - startdown [2] StartDownMessage, - send [3] ATCDownlinkMessage, - ... + abortUser [0] CPDLCUserAbortReason, + abortProvider [1] CPDLCProviderAbortReason, + startdown [2] StartDownMessage, + send [3] ATCDownlinkMessage, + ... } StartDownMessage ::= SEQUENCE { - mode Mode DEFAULT cpdlc, - startDownlinkMessage DownlinkMessage + mode Mode DEFAULT cpdlc, + startDownlinkMessage DownlinkMessage } Mode ::= ENUMERATED { - cpdlc (0), - dsc (1) + cpdlc (0), + dsc (1) } DownlinkMessage ::= CHOICE { - noMessage [0] NULL, - aTCDownlinkMessage [1] ATCDownlinkMessage + noMessage [0] NULL, + aTCDownlinkMessage [1] ATCDownlinkMessage } CPDLCUserAbortReason ::= ENUMERATED { - undefined (0), - no-message-identification-numbers-available (1), - duplicate-message-identification-numbers (2), - no-longer-next-data-authority (3), - current-data-authority-abort (4), - commanded-termination (5), - invalid-response (6), - ... + undefined (0), + no-message-identification-numbers-available (1), + duplicate-message-identification-numbers (2), + no-longer-next-data-authority (3), + current-data-authority-abort (4), + commanded-termination (5), + invalid-response (6), + ... } CPDLCProviderAbortReason ::= ENUMERATED { - timer-expired (0), - undefined-error (1), - invalid-PDU (2), - protocol-error (3), - communication-service-error (4), - communication-service-failure (5), - invalid-QOS-parameter (6), - expected-PDU-missing (7), - ... - } + timer-expired (0), + undefined-error (1), + invalid-PDU (2), + protocol-error (3), + communication-service-error (4), + communication-service-failure (5), + invalid-QOS-parameter (6), + expected-PDU-missing (7), + ... + } END @@ -111,127 +107,127 @@ FROM PMCPDLCMessageSetVersion1; -- ---------------------------------------------------------------------------------- ProtectedGroundPDUs ::= CHOICE { - abortUser [0] PMCPDLCUserAbortReason, - abortProvider [1] PMCPDLCProviderAbortReason, - startup [2] ProtectedUplinkMessage, - send [3] ProtectedUplinkMessage, - forward [4] ATCForwardMessage, - forwardresponse [5] ATCForwardResponse, - ... + abortUser [0] PMCPDLCUserAbortReason, + abortProvider [1] PMCPDLCProviderAbortReason, + startup [2] ProtectedUplinkMessage, + send [3] ProtectedUplinkMessage, + forward [4] ATCForwardMessage, + forwardresponse [5] ATCForwardResponse, + ... } ProtectedUplinkMessage::= SEQUENCE { - algorithmIdentifier [0] AlgorithmIdentifier OPTIONAL, - protectedMessage [1] CPDLCMessage OPTIONAL, + algorithmIdentifier [0] AlgorithmIdentifier OPTIONAL, + protectedMessage [1] CPDLCMessage OPTIONAL, -- PER encoded ATCUplinkMessage -- (see Module PMCPDLCMessageSetVersion1) - integrityCheck [2] BIT STRING, - ... + integrityCheck [2] BIT STRING, + ... } ATCForwardMessage ::= SEQUENCE { - forwardHeader ForwardHeader, - forwardMessage ForwardMessage + forwardHeader ForwardHeader, + forwardMessage ForwardMessage } ForwardHeader ::= SEQUENCE { - dateTime DateTimeGroup, - aircraftID AircraftFlightIdentification, - aircraftAddress AircraftAddress + dateTime DateTimeGroup, + aircraftID AircraftFlightIdentification, + aircraftAddress AircraftAddress } ForwardMessage ::= CHOICE { - upElementIDs [0] BIT STRING, + upElementIDs [0] BIT STRING, --PER encoded ATCUplinkMessageData, -- (see Module PMCPDLCMessageSetVersion1) - downElementIDs [1] BIT STRING + downElementIDs [1] BIT STRING --PER encoded ATCDownlinkMessageData, -- (see Module PMCPDLCMessageSetVersion1) } ATCForwardResponse ::= ENUMERATED { - success (0), - service-not-supported (1), - version-not-equal (2), - ... + success (0), + service-not-supported (1), + version-not-equal (2), + ... } -- ---------------------------------------------------------------------------------- -- Aircraft Generated Messages - Top level -- ---------------------------------------------------------------------------------- ProtectedAircraftPDUs::= CHOICE { - abortUser [0] PMCPDLCUserAbortReason, - abortProvider [1] PMCPDLCProviderAbortReason, - startdown [2] ProtectedStartDownMessage, - send [3] ProtectedDownlinkMessage, - ... + abortUser [0] PMCPDLCUserAbortReason, + abortProvider [1] PMCPDLCProviderAbortReason, + startdown [2] ProtectedStartDownMessage, + send [3] ProtectedDownlinkMessage, + ... } ProtectedStartDownMessage ::= SEQUENCE { - mode ProtectedMode DEFAULT cpdlc, - startDownlinkMessage ProtectedDownlinkMessage + mode ProtectedMode DEFAULT cpdlc, + startDownlinkMessage ProtectedDownlinkMessage } ProtectedMode ::= ENUMERATED { - cpdlc (0), - dsc (1) + cpdlc (0), + dsc (1) } ProtectedDownlinkMessage::= SEQUENCE { - algorithmIdentifier [0] AlgorithmIdentifier OPTIONAL, - protectedMessage [1] CPDLCMessage OPTIONAL, + algorithmIdentifier [0] AlgorithmIdentifier OPTIONAL, + protectedMessage [1] CPDLCMessage OPTIONAL, --PER encoded ATCDownlinkMessage, -- (see Module PMCPDLCMessageSetVersion1) - integrityCheck [2] BIT STRING, - ... + integrityCheck [2] BIT STRING, + ... } -- ---------------------------------------------------------------------------------- -- Uplink and Downlink messages - Common Elements -- ---------------------------------------------------------------------------------- -AlgorithmIdentifier ::= RELATIVE-OID +AlgorithmIdentifier ::= RELATIVE-OID --root is {icao-arc atn-algorithms(9)} CPDLCMessage ::= BIT STRING PMCPDLCUserAbortReason ::= ENUMERATED { - undefined (0), - no-message-identification-numbers-available (1), - duplicate-message-identification-numbers (2), - no-longer-next-data-authority (3), - current-data-authority-abort (4), - commanded-termination (5), - invalid-response (6), - time-out-of-synchronisation (7), - unknown-integrity-check (8), - validation-failure (9), - unable-to-decode-message (10), - invalid-pdu (11), - invalid-CPDLC-message (12), - ... + undefined (0), + no-message-identification-numbers-available (1), + duplicate-message-identification-numbers (2), + no-longer-next-data-authority (3), + current-data-authority-abort (4), + commanded-termination (5), + invalid-response (6), + time-out-of-synchronisation (7), + unknown-integrity-check (8), + validation-failure (9), + unable-to-decode-message (10), + invalid-pdu (11), + invalid-CPDLC-message (12), + ... } PMCPDLCProviderAbortReason ::= ENUMERATED { - timer-expired (0), - undefined-error (1), - invalid-PDU (2), - protocol-error (3), - communication-service-error (4), - communication-service-failure (5), - invalid-QOS-parameter (6), - expected-PDU-missing (7), - ... + timer-expired (0), + undefined-error (1), + invalid-PDU (2), + protocol-error (3), + communication-service-error (4), + communication-service-failure (5), + invalid-QOS-parameter (6), + expected-PDU-missing (7), + ... } END @@ -241,34 +237,34 @@ BEGIN ATCUplinkMessage ::= SEQUENCE { - header ATCMessageHeader, - messageData ATCUplinkMessageData + header ATCMessageHeader, + messageData ATCUplinkMessageData } ATCUplinkMessageData ::= SEQUENCE { - elementIds SEQUENCE SIZE (1..5) OF ATCUplinkMsgElementId, - constrainedData SEQUENCE - { - routeClearanceData SEQUENCE SIZE (1..2) OF RouteClearance OPTIONAL, - ... - } OPTIONAL + elementIds SEQUENCE SIZE (1..5) OF ATCUplinkMsgElementId, + constrainedData SEQUENCE + { + routeClearanceData SEQUENCE SIZE (1..2) OF RouteClearance OPTIONAL, + ... + } OPTIONAL } ATCDownlinkMessage ::= SEQUENCE { - header ATCMessageHeader, - messageData ATCDownlinkMessageData + header ATCMessageHeader, + messageData ATCDownlinkMessageData } ATCDownlinkMessageData ::= SEQUENCE { - elementIds SEQUENCE SIZE (1..5) OF ATCDownlinkMsgElementId, - constrainedData SEQUENCE - { - routeClearanceData SEQUENCE SIZE (1..2) OF RouteClearance OPTIONAL, - ... - } OPTIONAL + elementIds SEQUENCE SIZE (1..5) OF ATCDownlinkMsgElementId, + constrainedData SEQUENCE + { + routeClearanceData SEQUENCE SIZE (1..2) OF RouteClearance OPTIONAL, + ... + } OPTIONAL } -- ---------------------------------------------------------------------------------- @@ -276,10 +272,10 @@ ATCDownlinkMessageData ::= SEQUENCE -- ---------------------------------------------------------------------------------- ATCMessageHeader ::= SEQUENCE { - messageIdNumber [0] MsgIdentificationNumber, - messageRefNumber [1] MsgReferenceNumber OPTIONAL, - dateTime [2] DateTimeGroup, - logicalAck [3] LogicalAck DEFAULT notRequired + messageIdNumber [0] MsgIdentificationNumber, + messageRefNumber [1] MsgReferenceNumber OPTIONAL, + dateTime [2] DateTimeGroup, + logicalAck [3] LogicalAck DEFAULT notRequired } MsgIdentificationNumber ::= INTEGER (0..63) @@ -288,8 +284,8 @@ MsgReferenceNumber ::= INTEGER (0..63) LogicalAck ::= ENUMERATED { - required (0), - notRequired (1) + required (0), + notRequired (1) } -- ---------------------------------------------------------------------------------- @@ -297,956 +293,956 @@ LogicalAck ::= ENUMERATED -- ---------------------------------------------------------------------------------- ATCUplinkMsgElementId ::= CHOICE { - -- UNABLE - -- Urg(N)/Alr(M)/Resp(N) - uM0NULL [0] NULL, - - -- STANDBY - -- Urg(N)/Alr(L)/Resp(N) - uM1NULL [1] NULL, - - -- REQUEST DEFERRED - -- Urg(N)/Alr(L)/Resp(N) - uM2NULL [2] NULL, - - -- ROGER - -- Urg(N)/Alr(L)/Resp(N) - uM3NULL [3] NULL, - - -- AFFIRM - -- Urg(N)/Alr(L)/Resp(N) - uM4NULL [4] NULL, - - -- NEGATIVE Urg(N)/Alr(L)/Resp(N) - uM5NULL [5] NULL, - - -- EXPECT [level] Urg(L)/Alr(L)/Resp(R) - uM6Level [6] Level, - - -- EXPECT CLIMB AT [time] - -- Urg(L)/Alr(L)/Resp(R) - uM7Time [7] Time, - - -- EXPECT CLIMB AT [position] - -- Urg(L)/Alr(L)/Resp(R) - uM8Position [8] Position, - - -- EXPECT DESCENT AT [time] - -- Urg(L)/Alr(L)/Resp(R) - uM9Time [9] Time, - - -- EXPECT DESCENT AT [position] - -- Urg(L)/Alr(L)/Resp(R) - uM10Position [10] Position, - - -- EXPECT CRUISE CLIMB AT [time] - -- Urg(L)/Alr(L)/Resp(R) - uM11Time [11] Time, - - -- EXPECT CRUISE CLIMB AT [position] - -- Urg(L)/Alr(L)/Resp(R) - uM12Position [12] Position, - - -- AT [time] EXPECT CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM13TimeLevel [13] TimeLevel, - - -- AT [position] EXPECT CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM14PositionLevel [14] PositionLevel, - - -- AT [time] EXPECT DESCENT TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM15TimeLevel [15] TimeLevel, - - -- AT [position] EXPECT DESCENT TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM16PositionLevel [16] PositionLevel, - - -- AT [time] EXPECT CRUISE CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM17TimeLevel [17] TimeLevel, - - -- AT [position] EXPECT CRUISE CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(R) - uM18PositionLevel [18] PositionLevel, - - -- MAINTAIN [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM19Level [19] Level, - - -- CLIMB TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM20Level [20] Level, - - -- AT [time] CLIMB TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM21TimeLevel [21] TimeLevel, - - -- AT [position] CLIMB TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM22PositionLevel [22] PositionLevel, - - -- DESCEND TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM23Level [23] Level, - - -- AT [time] DESCEND TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM24TimeLevel [24] TimeLevel, - - -- AT [position] DESCEND TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM25PositionLevel [25] PositionLevel, - - -- CLIMB TO REACH [level] BY [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM26LevelTime [26] LevelTime, - - -- CLIMB TO REACH [level] BY [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM27LevelPosition [27] LevelPosition, - - -- DESCEND TO REACH [level] BY [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM28LevelTime [28] LevelTime, - - -- DESCEND TO REACH [level] BY [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM29LevelPosition [29] LevelPosition, - - -- MAINTAIN BLOCK [level] TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM30LevelLevel [30] LevelLevel, - - -- CLIMB TO AND MAINTAIN BLOCK [level] TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM31LevelLevel [31] LevelLevel, - - -- DESCEND TO AND MAINTAIN BLOCK [level] TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM32LevelLevel [32] LevelLevel, - - -- Reserved - -- Urg(L)/Alr(L)/Resp(Y) - uM33NULL [33] NULL, - - -- CRUISE CLIMB TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM34Level [34] Level, - - -- CRUISE CLIMB ABOVE [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM35Level [35] Level, - - -- EXPEDITE CLIMB TO [level] - -- Urg(U)/Alr(M)/Resp(W/U) - uM36Level [36] Level, - - -- EXPEDITE DESCENT TO [level] - -- Urg(U)/Alr(M)/Resp(W/U) - uM37Level [37] Level, - - -- IMMEDIATELY CLIMB TO [level] - -- Urg(D)/Alr(H)/Resp(W/U) - uM38Level [38] Level, - - -- IMMEDIATELY DESCEND TO [level] - -- Urg(D)/Alr(H)/Resp(W/U) - uM39Level [39] Level, - - -- Reserved - -- Urg(L)/Alr(L)/Resp(Y) - uM40NULL [40] NULL, - - -- Reserved Urg(L)/Alr(L)/Resp(Y) - uM41NULL [41] NULL, - - -- EXPECT TO CROSS [position] AT [level] - -- Urg(L)/Alr(L)/Resp(R) - uM42PositionLevel [42] PositionLevel, - - -- EXPECT TO CROSS [position] AT OR ABOVE [level] - -- Urg(L)/Alr(L)/Resp(R) - uM43PositionLevel [43] PositionLevel, - - -- EXPECT TO CROSS [position] AT OR BELOW [level] - -- Urg(L)/Alr(L)/Resp(R) - uM44PositionLevel [44] PositionLevel, - - -- EXPECT TO CROSS [position] AT AND MAINTAIN [level] - -- Urg(L)/Alr(L)/Resp(R) - uM45PositionLevel [45] PositionLevel, - - -- CROSS [position] AT [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM46PositionLevel [46] PositionLevel, - - -- CROSS [position] AT OR ABOVE [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM47PositionLevel [47] PositionLevel, - - -- CROSS [position] AT OR BELOW [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM48PositionLevel [48] PositionLevel, - - -- CROSS [position] AT AND MAINTAIN [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM49PositionLevel [49] PositionLevel, - - -- CROSS [position] BETWEEN [level] AND [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM50PositionLevelLevel [50] PositionLevelLevel, - - -- CROSS [position] AT [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM51PositionTime [51] PositionTime, - - -- CROSS [position] AT OR BEFORE [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM52PositionTime [52] PositionTime, - - -- CROSS [position] AT OR AFTER [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM53PositionTime [53] PositionTime, - - -- CROSS [position] BETWEEN [time] AND [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM54PositionTimeTime [54] PositionTimeTime, - - -- CROSS [position] AT [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM55PositionSpeed [55] PositionSpeed, - - -- CROSS [position] AT OR LESS THAN [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM56PositionSpeed [56] PositionSpeed, - - -- CROSS [position] AT OR GREATER THAN [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM57PositionSpeed [57] PositionSpeed, - - -- CROSS [position] AT [time] AT [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM58PositionTimeLevel [58] PositionTimeLevel, - - -- CROSS [position] AT OR BEFORE [time] AT [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM59PositionTimeLevel [59] PositionTimeLevel, - - -- CROSS [position] AT OR AFTER [time] AT [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM60PositionTimeLevel [60] PositionTimeLevel, - - -- CROSS [position] AT AND MAINTAIN [level] AT [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM61PositionLevelSpeed [61] PositionLevelSpeed, + -- UNABLE + -- Urg(N)/Alr(M)/Resp(N) + uM0NULL [0] NULL, + + -- STANDBY + -- Urg(N)/Alr(L)/Resp(N) + uM1NULL [1] NULL, + + -- REQUEST DEFERRED + -- Urg(N)/Alr(L)/Resp(N) + uM2NULL [2] NULL, + + -- ROGER + -- Urg(N)/Alr(L)/Resp(N) + uM3NULL [3] NULL, + + -- AFFIRM + -- Urg(N)/Alr(L)/Resp(N) + uM4NULL [4] NULL, + + -- NEGATIVE Urg(N)/Alr(L)/Resp(N) + uM5NULL [5] NULL, + + -- EXPECT [level] Urg(L)/Alr(L)/Resp(R) + uM6Level [6] Level, + + -- EXPECT CLIMB AT [time] + -- Urg(L)/Alr(L)/Resp(R) + uM7Time [7] Time, + + -- EXPECT CLIMB AT [position] + -- Urg(L)/Alr(L)/Resp(R) + uM8Position [8] Position, + + -- EXPECT DESCENT AT [time] + -- Urg(L)/Alr(L)/Resp(R) + uM9Time [9] Time, + + -- EXPECT DESCENT AT [position] + -- Urg(L)/Alr(L)/Resp(R) + uM10Position [10] Position, + + -- EXPECT CRUISE CLIMB AT [time] + -- Urg(L)/Alr(L)/Resp(R) + uM11Time [11] Time, + + -- EXPECT CRUISE CLIMB AT [position] + -- Urg(L)/Alr(L)/Resp(R) + uM12Position [12] Position, + + -- AT [time] EXPECT CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM13TimeLevel [13] TimeLevel, + + -- AT [position] EXPECT CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM14PositionLevel [14] PositionLevel, + + -- AT [time] EXPECT DESCENT TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM15TimeLevel [15] TimeLevel, + + -- AT [position] EXPECT DESCENT TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM16PositionLevel [16] PositionLevel, + + -- AT [time] EXPECT CRUISE CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM17TimeLevel [17] TimeLevel, + + -- AT [position] EXPECT CRUISE CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(R) + uM18PositionLevel [18] PositionLevel, + + -- MAINTAIN [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM19Level [19] Level, + + -- CLIMB TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM20Level [20] Level, + + -- AT [time] CLIMB TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM21TimeLevel [21] TimeLevel, + + -- AT [position] CLIMB TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM22PositionLevel [22] PositionLevel, + + -- DESCEND TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM23Level [23] Level, + + -- AT [time] DESCEND TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM24TimeLevel [24] TimeLevel, + + -- AT [position] DESCEND TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM25PositionLevel [25] PositionLevel, + + -- CLIMB TO REACH [level] BY [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM26LevelTime [26] LevelTime, + + -- CLIMB TO REACH [level] BY [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM27LevelPosition [27] LevelPosition, + + -- DESCEND TO REACH [level] BY [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM28LevelTime [28] LevelTime, + + -- DESCEND TO REACH [level] BY [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM29LevelPosition [29] LevelPosition, + + -- MAINTAIN BLOCK [level] TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM30LevelLevel [30] LevelLevel, + + -- CLIMB TO AND MAINTAIN BLOCK [level] TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM31LevelLevel [31] LevelLevel, + + -- DESCEND TO AND MAINTAIN BLOCK [level] TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM32LevelLevel [32] LevelLevel, + + -- Reserved + -- Urg(L)/Alr(L)/Resp(Y) + uM33NULL [33] NULL, + + -- CRUISE CLIMB TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM34Level [34] Level, + + -- CRUISE CLIMB ABOVE [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM35Level [35] Level, + + -- EXPEDITE CLIMB TO [level] + -- Urg(U)/Alr(M)/Resp(W/U) + uM36Level [36] Level, + + -- EXPEDITE DESCENT TO [level] + -- Urg(U)/Alr(M)/Resp(W/U) + uM37Level [37] Level, + + -- IMMEDIATELY CLIMB TO [level] + -- Urg(D)/Alr(H)/Resp(W/U) + uM38Level [38] Level, + + -- IMMEDIATELY DESCEND TO [level] + -- Urg(D)/Alr(H)/Resp(W/U) + uM39Level [39] Level, - -- AT [time] CROSS [position] AT AND MAINTAIN [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM62TimePositionLevel [62] TimePositionLevel, + -- Reserved + -- Urg(L)/Alr(L)/Resp(Y) + uM40NULL [40] NULL, - -- AT [time] CROSS [position] AT AND MAINTAIN [level] AT [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM63TimePositionLevelSpeed [63] TimePositionLevelSpeed, + -- Reserved Urg(L)/Alr(L)/Resp(Y) + uM41NULL [41] NULL, - -- OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(M)/Resp(W/U) - uM64DistanceSpecifiedDirection [64] DistanceSpecifiedDirection, + -- EXPECT TO CROSS [position] AT [level] + -- Urg(L)/Alr(L)/Resp(R) + uM42PositionLevel [42] PositionLevel, - -- AT [position] OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(M)/Resp(W/U) - uM65PositionDistanceSpecifiedDirection[65] PositionDistanceSpecifiedDirection, + -- EXPECT TO CROSS [position] AT OR ABOVE [level] + -- Urg(L)/Alr(L)/Resp(R) + uM43PositionLevel [43] PositionLevel, - -- AT [time] OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(M)/Resp(W/U) - uM66TimeDistanceSpecifiedDirection [66] TimeDistanceSpecifiedDirection, + -- EXPECT TO CROSS [position] AT OR BELOW [level] + -- Urg(L)/Alr(L)/Resp(R) + uM44PositionLevel [44] PositionLevel, - -- PROCEED BACK ON ROUTE - -- Urg(N)/Alr(M)/Resp(W/U) - uM67NULL [67] NULL, + -- EXPECT TO CROSS [position] AT AND MAINTAIN [level] + -- Urg(L)/Alr(L)/Resp(R) + uM45PositionLevel [45] PositionLevel, - -- REJOIN ROUTE BY [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM68Position [68] Position, + -- CROSS [position] AT [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM46PositionLevel [46] PositionLevel, - -- REJOIN ROUTE BY [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM69Time [69] Time, + -- CROSS [position] AT OR ABOVE [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM47PositionLevel [47] PositionLevel, - -- EXPECT BACK ON ROUTE BY [position] - -- Urg(L)/Alr(L)/Resp(R) - uM70Position [70] Position, + -- CROSS [position] AT OR BELOW [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM48PositionLevel [48] PositionLevel, - -- EXPECT BACK ON ROUTE BY [time] - -- Urg(L)/Alr(L)/Resp(R) - uM71Time [71] Time, + -- CROSS [position] AT AND MAINTAIN [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM49PositionLevel [49] PositionLevel, - -- RESUME OWN NAVIGATION - -- Urg(N)/Alr(M)/Resp(W/U) - uM72NULL [72] NULL, + -- CROSS [position] BETWEEN [level] AND [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM50PositionLevelLevel [50] PositionLevelLevel, - -- [DepartureClearance] - -- Urg(N)/Alr(M)/Resp(W/U) - uM73DepartureClearance [73] DepartureClearance, + -- CROSS [position] AT [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM51PositionTime [51] PositionTime, - -- PROCEED DIRECT TO [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM74Position [74] Position, + -- CROSS [position] AT OR BEFORE [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM52PositionTime [52] PositionTime, - -- WHEN ABLE PROCEED DIRECT TO [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM75Position [75] Position, + -- CROSS [position] AT OR AFTER [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM53PositionTime [53] PositionTime, - -- AT [time] PROCEED DIRECT TO [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM76TimePosition [76] TimePosition, + -- CROSS [position] BETWEEN [time] AND [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM54PositionTimeTime [54] PositionTimeTime, - -- AT [position] PROCEED DIRECT TO [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM77PositionPosition [77] PositionPosition, + -- CROSS [position] AT [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM55PositionSpeed [55] PositionSpeed, - -- AT [level] PROCEED DIRECT TO [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM78LevelPosition [78] LevelPosition, + -- CROSS [position] AT OR LESS THAN [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM56PositionSpeed [56] PositionSpeed, - -- CLEARED TO [position] VIA [routeClearance] - -- Urg(N)/Alr(M)/Resp(W/U) - uM79PositionRouteClearance [79] PositionRouteClearanceIndex, + -- CROSS [position] AT OR GREATER THAN [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM57PositionSpeed [57] PositionSpeed, - -- CLEARED [routeClearance] - -- Urg(N)/Alr(M)/Resp(W/U) - uM80RouteClearance [80] RouteClearanceIndex, + -- CROSS [position] AT [time] AT [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM58PositionTimeLevel [58] PositionTimeLevel, - -- CLEARED [procedureName] - -- Urg(N)/Alr(M)/Resp(W/U) - uM81ProcedureName [81] ProcedureName, + -- CROSS [position] AT OR BEFORE [time] AT [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM59PositionTimeLevel [59] PositionTimeLevel, - -- CLEARED TO DEVIATE UP TO [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(M)/Resp(W/U) - uM82DistanceSpecifiedDirection [82] DistanceSpecifiedDirection, + -- CROSS [position] AT OR AFTER [time] AT [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM60PositionTimeLevel [60] PositionTimeLevel, - -- AT [position] CLEARED [routeClearance] - -- Urg(N)/Alr(M)/Resp(W/U) - uM83PositionRouteClearance [83] PositionRouteClearanceIndex, + -- CROSS [position] AT AND MAINTAIN [level] AT [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM61PositionLevelSpeed [61] PositionLevelSpeed, - -- AT [position] CLEARED [procedureName] - -- Urg(N)/Alr(M)/Resp(W/U) - uM84PositionProcedureName [84] PositionProcedureName, + -- AT [time] CROSS [position] AT AND MAINTAIN [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM62TimePositionLevel [62] TimePositionLevel, - -- EXPECT [routeClearance] - -- Urg(L)/Alr(L)/Resp(R) - uM85RouteClearance [85] RouteClearanceIndex, + -- AT [time] CROSS [position] AT AND MAINTAIN [level] AT [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM63TimePositionLevelSpeed [63] TimePositionLevelSpeed, - -- AT [position] EXPECT [routeClearance] - -- Urg(L)/Alr(L)/Resp(R) - uM86PositionRouteClearance [86] PositionRouteClearanceIndex, + -- OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(M)/Resp(W/U) + uM64DistanceSpecifiedDirection [64] DistanceSpecifiedDirection, - -- EXPECT DIRECT TO [position] - -- Urg(L)/Alr(L)/Resp(R) - uM87Position [87] Position, + -- AT [position] OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(M)/Resp(W/U) + uM65PositionDistanceSpecifiedDirection[65] PositionDistanceSpecifiedDirection, - -- AT [position] EXPECT DIRECT TO [position] - -- Urg(L)/Alr(L)/Resp(R) - uM88PositionPosition [88]PositionPosition, + -- AT [time] OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(M)/Resp(W/U) + uM66TimeDistanceSpecifiedDirection [66] TimeDistanceSpecifiedDirection, - -- AT [time] EXPECT DIRECT TO [position] - -- Urg(L)/Alr(L)/Resp(R) - uM89TimePosition [89] TimePosition, + -- PROCEED BACK ON ROUTE + -- Urg(N)/Alr(M)/Resp(W/U) + uM67NULL [67] NULL, + -- REJOIN ROUTE BY [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM68Position [68] Position, - -- AT [level] EXPECT DIRECT TO [position] - -- Urg(L)/Alr(L)/Resp(R) - uM90LevelPosition [90] LevelPosition, + -- REJOIN ROUTE BY [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM69Time [69] Time, - -- HOLD AT [position] MAINTAIN [level] INBOUND TRACK [degrees][direction] TURNS [legtype] - -- Urg(N)/Alr(M)/Resp(W/U) - uM91HoldClearance [91] HoldClearance, + -- EXPECT BACK ON ROUTE BY [position] + -- Urg(L)/Alr(L)/Resp(R) + uM70Position [70] Position, - -- HOLD AT [position] AS PUBLISHED MAINTAIN [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM92PositionLevel [92] PositionLevel, + -- EXPECT BACK ON ROUTE BY [time] + -- Urg(L)/Alr(L)/Resp(R) + uM71Time [71] Time, - -- EXPECT FURTHER CLEARANCE AT [time] - -- Urg(L)/Alr(L)/Resp(R) - uM93Time [93] Time, + -- RESUME OWN NAVIGATION + -- Urg(N)/Alr(M)/Resp(W/U) + uM72NULL [72] NULL, - -- TURN [direction] HEADING [degrees] - -- Urg(N)/Alr(M)/Resp(W/U) - uM94DirectionDegrees [94] DirectionDegrees, + -- [DepartureClearance] + -- Urg(N)/Alr(M)/Resp(W/U) + uM73DepartureClearance [73] DepartureClearance, - -- TURN [direction] GROUND TRACK [degrees] - -- Urg(N)/Alr(M)/Resp(W/U) - uM95DirectionDegrees [95] DirectionDegrees, + -- PROCEED DIRECT TO [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM74Position [74] Position, - -- CONTINUE PRESENT HEADING - -- Urg(N)/Alr(M)/Resp(W/U) - uM96NULL [96] NULL, + -- WHEN ABLE PROCEED DIRECT TO [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM75Position [75] Position, - -- AT [position] FLY HEADING [degrees] - -- Urg(N)/Alr(M)/Resp(W/U) - uM97PositionDegrees [97] PositionDegrees, + -- AT [time] PROCEED DIRECT TO [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM76TimePosition [76] TimePosition, - -- IMMEDIATELY TURN [direction] HEADING [degrees] - -- Urg(D)/Alr(H)/Resp(W/U) - uM98DirectionDegrees [98] DirectionDegrees, + -- AT [position] PROCEED DIRECT TO [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM77PositionPosition [77] PositionPosition, - -- EXPECT [procedureName] - -- Urg(L)/Alr(L)/Resp(R) - uM99ProcedureName [99] ProcedureName, + -- AT [level] PROCEED DIRECT TO [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM78LevelPosition [78] LevelPosition, - -- AT [time] EXPECT [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM100TimeSpeed [100] TimeSpeed, + -- CLEARED TO [position] VIA [routeClearance] + -- Urg(N)/Alr(M)/Resp(W/U) + uM79PositionRouteClearance [79] PositionRouteClearanceIndex, - -- AT [position] EXPECT [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM101PositionSpeed [101] PositionSpeed, + -- CLEARED [routeClearance] + -- Urg(N)/Alr(M)/Resp(W/U) + uM80RouteClearance [80] RouteClearanceIndex, - -- AT [level] EXPECT [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM102LevelSpeed [102] LevelSpeed, + -- CLEARED [procedureName] + -- Urg(N)/Alr(M)/Resp(W/U) + uM81ProcedureName [81] ProcedureName, - -- AT [time] EXPECT [speed] TO [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM103TimeSpeedSpeed [103] TimeSpeedSpeed, + -- CLEARED TO DEVIATE UP TO [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(M)/Resp(W/U) + uM82DistanceSpecifiedDirection [82] DistanceSpecifiedDirection, - -- AT [position] EXPECT [speed] TO [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM104PositionSpeedSpeed [104] PositionSpeedSpeed, + -- AT [position] CLEARED [routeClearance] + -- Urg(N)/Alr(M)/Resp(W/U) + uM83PositionRouteClearance [83] PositionRouteClearanceIndex, - -- AT [level] EXPECT [speed] TO [speed] - -- Urg(L)/Alr(L)/Resp(R) - uM105LevelSpeedSpeed [105] LevelSpeedSpeed, + -- AT [position] CLEARED [procedureName] + -- Urg(N)/Alr(M)/Resp(W/U) + uM84PositionProcedureName [84] PositionProcedureName, - -- MAINTAIN [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM106Speed [106] Speed, + -- EXPECT [routeClearance] + -- Urg(L)/Alr(L)/Resp(R) + uM85RouteClearance [85] RouteClearanceIndex, - -- MAINTAIN PRESENT SPEED - -- Urg(N)/Alr(M)/Resp(W/U) - uM107NULL [107] NULL, + -- AT [position] EXPECT [routeClearance] + -- Urg(L)/Alr(L)/Resp(R) + uM86PositionRouteClearance [86] PositionRouteClearanceIndex, - -- MAINTAIN [speed] OR GREATER - -- Urg(N)/Alr(M)/Resp(W/U) - uM108Speed [108] Speed, + -- EXPECT DIRECT TO [position] + -- Urg(L)/Alr(L)/Resp(R) + uM87Position [87] Position, - -- MAINTAIN [speed] OR LESS - -- Urg(N)/Alr(M)/Resp(W/U) - uM109Speed [109] Speed, + -- AT [position] EXPECT DIRECT TO [position] + -- Urg(L)/Alr(L)/Resp(R) + uM88PositionPosition [88]PositionPosition, - -- MAINTAIN [speed] TO [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM110SpeedSpeed [110] SpeedSpeed, + -- AT [time] EXPECT DIRECT TO [position] + -- Urg(L)/Alr(L)/Resp(R) + uM89TimePosition [89] TimePosition, - -- INCREASE SPEED TO [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM111Speed [111] Speed, - -- INCREASE SPEED TO [speed] OR GREATER - -- Urg(N)/Alr(M)/Resp(W/U) - uM112Speed [112] Speed, + -- AT [level] EXPECT DIRECT TO [position] + -- Urg(L)/Alr(L)/Resp(R) + uM90LevelPosition [90] LevelPosition, - -- REDUCE SPEED TO [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM113Speed [113] Speed, + -- HOLD AT [position] MAINTAIN [level] INBOUND TRACK [degrees][direction] TURNS [legtype] + -- Urg(N)/Alr(M)/Resp(W/U) + uM91HoldClearance [91] HoldClearance, - -- REDUCE SPEED TO [speed] OR LESS - -- Urg(N)/Alr(M)/Resp(W/U) - uM114Speed [114] Speed, + -- HOLD AT [position] AS PUBLISHED MAINTAIN [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM92PositionLevel [92] PositionLevel, - -- DO NOT EXCEED [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM115Speed [115] Speed, + -- EXPECT FURTHER CLEARANCE AT [time] + -- Urg(L)/Alr(L)/Resp(R) + uM93Time [93] Time, - -- RESUME NORMAL SPEED - -- Urg(N)/Alr(M)/Resp(W/U) - uM116NULL [116] NULL, + -- TURN [direction] HEADING [degrees] + -- Urg(N)/Alr(M)/Resp(W/U) + uM94DirectionDegrees [94] DirectionDegrees, - -- CONTACT [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM117UnitNameFrequency [117] UnitNameFrequency, + -- TURN [direction] GROUND TRACK [degrees] + -- Urg(N)/Alr(M)/Resp(W/U) + uM95DirectionDegrees [95] DirectionDegrees, - -- AT [position] CONTACT [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM118PositionUnitNameFrequency [118] PositionUnitNameFrequency, + -- CONTINUE PRESENT HEADING + -- Urg(N)/Alr(M)/Resp(W/U) + uM96NULL [96] NULL, - -- AT [time] CONTACT [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM119TimeUnitNameFrequency [119] TimeUnitNameFrequency, + -- AT [position] FLY HEADING [degrees] + -- Urg(N)/Alr(M)/Resp(W/U) + uM97PositionDegrees [97] PositionDegrees, - -- MONITOR [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM120UnitNameFrequency [120] UnitNameFrequency, + -- IMMEDIATELY TURN [direction] HEADING [degrees] + -- Urg(D)/Alr(H)/Resp(W/U) + uM98DirectionDegrees [98] DirectionDegrees, - -- AT [position] MONITOR [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM121PositionUnitNameFrequency [121] PositionUnitNameFrequency, + -- EXPECT [procedureName] + -- Urg(L)/Alr(L)/Resp(R) + uM99ProcedureName [99] ProcedureName, - -- AT [time] MONITOR [unitname] [frequency] - -- Urg(N)/Alr(M)/Resp(W/U) - uM122TimeUnitNameFrequency [122] TimeUnitNameFrequency, + -- AT [time] EXPECT [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM100TimeSpeed [100] TimeSpeed, - -- SQUAWK [code] - -- Urg(N)/Alr(M)/Resp(W/U) - uM123Code [123] Code, + -- AT [position] EXPECT [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM101PositionSpeed [101] PositionSpeed, - -- STOP SQUAWK - -- Urg(N)/Alr(M)/Resp(W/U) - uM124NULL [124] NULL, + -- AT [level] EXPECT [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM102LevelSpeed [102] LevelSpeed, - -- SQUAWK MODE CHARLIE - -- Urg(N)/Alr(M)/Resp(W/U) + -- AT [time] EXPECT [speed] TO [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM103TimeSpeedSpeed [103] TimeSpeedSpeed, + + -- AT [position] EXPECT [speed] TO [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM104PositionSpeedSpeed [104] PositionSpeedSpeed, + + -- AT [level] EXPECT [speed] TO [speed] + -- Urg(L)/Alr(L)/Resp(R) + uM105LevelSpeedSpeed [105] LevelSpeedSpeed, + + -- MAINTAIN [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM106Speed [106] Speed, + + -- MAINTAIN PRESENT SPEED + -- Urg(N)/Alr(M)/Resp(W/U) + uM107NULL [107] NULL, + + -- MAINTAIN [speed] OR GREATER + -- Urg(N)/Alr(M)/Resp(W/U) + uM108Speed [108] Speed, + + -- MAINTAIN [speed] OR LESS + -- Urg(N)/Alr(M)/Resp(W/U) + uM109Speed [109] Speed, + + -- MAINTAIN [speed] TO [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM110SpeedSpeed [110] SpeedSpeed, + + -- INCREASE SPEED TO [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM111Speed [111] Speed, + + -- INCREASE SPEED TO [speed] OR GREATER + -- Urg(N)/Alr(M)/Resp(W/U) + uM112Speed [112] Speed, + + -- REDUCE SPEED TO [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM113Speed [113] Speed, + + -- REDUCE SPEED TO [speed] OR LESS + -- Urg(N)/Alr(M)/Resp(W/U) + uM114Speed [114] Speed, + + -- DO NOT EXCEED [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM115Speed [115] Speed, + + -- RESUME NORMAL SPEED + -- Urg(N)/Alr(M)/Resp(W/U) + uM116NULL [116] NULL, + + -- CONTACT [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM117UnitNameFrequency [117] UnitNameFrequency, + + -- AT [position] CONTACT [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM118PositionUnitNameFrequency [118] PositionUnitNameFrequency, + + -- AT [time] CONTACT [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM119TimeUnitNameFrequency [119] TimeUnitNameFrequency, + + -- MONITOR [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM120UnitNameFrequency [120] UnitNameFrequency, + + -- AT [position] MONITOR [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM121PositionUnitNameFrequency [121] PositionUnitNameFrequency, + + -- AT [time] MONITOR [unitname] [frequency] + -- Urg(N)/Alr(M)/Resp(W/U) + uM122TimeUnitNameFrequency [122] TimeUnitNameFrequency, + + -- SQUAWK [code] + -- Urg(N)/Alr(M)/Resp(W/U) + uM123Code [123] Code, + + -- STOP SQUAWK + -- Urg(N)/Alr(M)/Resp(W/U) + uM124NULL [124] NULL, + + -- SQUAWK MODE CHARLIE + -- Urg(N)/Alr(M)/Resp(W/U) uM125NULL [125] NULL, - -- STOP SQUAWK MODE CHARLIE - -- Urg(N)/Alr(M)/Resp(W/U) - uM126NULL [126] NULL, - - -- REPORT BACK ON ROUTE - -- Urg(N)/Alr(L)/Resp(W/U) - uM127NULL [127] NULL, - - -- REPORT LEAVING [level] - -- Urg(N)/Alr(L)/Resp(W/U) - uM128Level [128] Level, - - -- REPORT MAINTAINING [level] - -- Urg(N)/Alr(L)/Resp(W/U) - uM129Level [129] Level, - - -- REPORT PASSING [position] - -- Urg(N)/Alr(L)/Resp(W/U) - uM130Position [130] Position, - - -- REPORT REMAINING FUEL AND PERSONS ON BOARD - -- Urg(U)/Alr(M)/Resp(Y) - uM131NULL [131] NULL, - - -- REPORT POSITION - -- Urg(N)/Alr(M)/Resp(Y) - uM132NULL [132] NULL, - - -- REPORT PRESENT LEVEL - -- Urg(N)/Alr(M)/Resp(Y) - uM133NULL [133] NULL, - - -- REPORT [speedtype] [speedtype] [speedtype]SPEED - -- Urg(N)/Alr(M)/Resp(Y) - uM134SpeedTypeSpeedTypeSpeedType [134] SpeedTypeSpeedTypeSpeedType, - - -- CONFIRM ASSIGNED LEVEL - -- Urg(N)/Alr(L)/Resp(Y) - uM135NULL [135] NULL, - - -- CONFIRM ASSIGNED SPEED - -- Urg(N)/Alr(L)/Resp(Y) - uM136NULL [136] NULL, - - -- CONFIRM ASSIGNED ROUTE - -- Urg(N)/Alr(L)/Resp(Y) - uM137NULL [137] NULL, - - -- CONFIRM TIME OVER REPORTED WAYPOINT - -- Urg(N)/Alr(L)/Resp(Y) - uM138NULL [138] NULL, - - -- CONFIRM REPORTED WAYPOINT - -- Urg(N)/Alr(L)/Resp(Y) - uM139NULL [139] NULL, - - -- CONFIRM NEXT WAYPOINT - -- Urg(N)/Alr(L)/Resp(Y) - uM140NULL [140] NULL, - - -- CONFIRM NEXT WAYPOINT ETA - -- Urg(N)/Alr(L)/Resp(Y) - uM141NULL [141] NULL, - - -- CONFIRM ENSUING WAYPOINT - -- Urg(N)/Alr(L)/Resp(Y) - uM142NULL [142] NULL, - - -- CONFIRM REQUEST - -- Urg(N)/Alr(L)/Resp(Y) - uM143NULL [143] NULL, - - -- CONFIRM SQUAWK - -- Urg(N)/Alr(L)/Resp(Y) - uM144NULL [144] NULL, - - -- REPORT HEADING - -- Urg(N)/Alr(M)/Resp(Y) - uM145NULL [145] NULL, - - -- REPORT GROUND TRACK - -- Urg(N)/Alr(M)/Resp(Y) - uM146NULL [146] NULL, - - -- REQUEST POSITION REPORT - -- Urg(N)/Alr(M)/Resp(Y ) - uM147NULL [147] NULL, - - -- WHEN CAN YOU ACCEPT [level] - -- Urg(N)/Alr(L)/Resp(Y) - uM148Level [148] Level, - - -- CAN YOU ACCEPT [level] AT [position] - -- Urg(N)/Alr(L)/Resp(A/N) - uM149LevelPosition [149] LevelPosition, - - -- CAN YOU ACCEPT [level] AT [time] - -- Urg(N)/Alr(L)/Resp(A/N) - uM150LevelTime [150] LevelTime, - - -- WHEN CAN YOU ACCEPT [speed] - -- Urg(N)/Alr(L)/Resp(Y) - uM151Speed [151] Speed, - - -- WHEN CAN YOU ACCEPT [specifiedDistance] [direction] OFFSET - -- Urg(N)/Alr(L)/Resp(Y) - uM152DistanceSpecifiedDirection [152] DistanceSpecifiedDirection, - - -- ALTIMETER [altimeter] - -- Urg(N)/Alr(L)/Resp(R) - uM153Altimeter [153] Altimeter, - - -- RADAR SERVICE TERMINATED - -- Urg(N)/Alr(L)/Resp(R) - uM154NULL [154] NULL, - - -- RADAR CONTACT [position] - -- Urg(N)/Alr(M)/Resp(R) - uM155Position [155] Position, - - -- RADAR CONTACT LOST - -- Urg(N)/Alr(M)/Resp(R) - uM156NULL [156] NULL, - - -- CHECK STUCK MICROPHONE [frequency] - -- Urg(U)/Alr(M)/Resp(N) - uM157Frequency [157] Frequency, - - -- ATIS [atiscode] - -- Urg(N)/Alr(L)/Resp(R) - uM158AtisCode [158] ATISCode, - - -- ERROR [errorInformation] - -- Urg(U)/Alr(M)/Resp(N) - uM159ErrorInformation [159] ErrorInformation, - - -- NEXT DATA AUTHORITY [facility] - -- Urg(L)/Alr(N)/Resp(N) - uM160Facility [160] Facility, - - -- END SERVICE - -- Urg(L)/Alr(N)/Resp(N) - uM161NULL [161] NULL, - - -- SERVICE UNAVAILABLE - -- Urg(L)/Alr(L)/Resp(N ) - uM162NULL [162] NULL, - - -- [facilitydesignation] - -- Urg(L)/Alr(N)/Resp(N) - uM163FacilityDesignation [163] FacilityDesignation, - - -- WHEN READY - -- Urg(L)/Alr(N)/Resp(N) - uM164NULL [164] NULL, - - -- THEN - -- Urg(L)/Alr(N)/Resp(N) - uM165NULL [165] NULL, - - -- DUE TO [traffictype]TRAFFIC - -- Urg(L)/Alr(N)/Resp(N) - uM166TrafficType [166] TrafficType, - - -- DUE TO AIRSPACE RESTRICTION - -- Urg(L)/Alr(N)/Resp(N) - uM167NULL [167] NULL, - - -- DISREGARD - -- Urg(U)/Alr(M)/Resp(R) - uM168NULL [168] NULL, - - -- [freetext] - -- Urg(N)/Alr(L)/Resp(R) - uM169FreeText [169] FreeText, - - -- [freetext] - -- Urg(D)/Alr(H)/Resp(R) - uM170FreeText [170] FreeText, - - -- CLIMB AT [verticalRate] MINIMUM - -- Urg(N)/Alr(M)/Resp(W/U) - uM171VerticalRate [171] VerticalRate, - - -- CLIMB AT [verticalRate] MAXIMUM - -- Urg(N)/Alr(M)/Resp(W/U) - uM172VerticalRate [172] VerticalRate, + -- STOP SQUAWK MODE CHARLIE + -- Urg(N)/Alr(M)/Resp(W/U) + uM126NULL [126] NULL, + + -- REPORT BACK ON ROUTE + -- Urg(N)/Alr(L)/Resp(W/U) + uM127NULL [127] NULL, + + -- REPORT LEAVING [level] + -- Urg(N)/Alr(L)/Resp(W/U) + uM128Level [128] Level, + + -- REPORT MAINTAINING [level] + -- Urg(N)/Alr(L)/Resp(W/U) + uM129Level [129] Level, + + -- REPORT PASSING [position] + -- Urg(N)/Alr(L)/Resp(W/U) + uM130Position [130] Position, + + -- REPORT REMAINING FUEL AND PERSONS ON BOARD + -- Urg(U)/Alr(M)/Resp(Y) + uM131NULL [131] NULL, + + -- REPORT POSITION + -- Urg(N)/Alr(M)/Resp(Y) + uM132NULL [132] NULL, + + -- REPORT PRESENT LEVEL + -- Urg(N)/Alr(M)/Resp(Y) + uM133NULL [133] NULL, + + -- REPORT [speedtype] [speedtype] [speedtype]SPEED + -- Urg(N)/Alr(M)/Resp(Y) + uM134SpeedTypeSpeedTypeSpeedType [134] SpeedTypeSpeedTypeSpeedType, + + -- CONFIRM ASSIGNED LEVEL + -- Urg(N)/Alr(L)/Resp(Y) + uM135NULL [135] NULL, + + -- CONFIRM ASSIGNED SPEED + -- Urg(N)/Alr(L)/Resp(Y) + uM136NULL [136] NULL, + + -- CONFIRM ASSIGNED ROUTE + -- Urg(N)/Alr(L)/Resp(Y) + uM137NULL [137] NULL, + + -- CONFIRM TIME OVER REPORTED WAYPOINT + -- Urg(N)/Alr(L)/Resp(Y) + uM138NULL [138] NULL, + + -- CONFIRM REPORTED WAYPOINT + -- Urg(N)/Alr(L)/Resp(Y) + uM139NULL [139] NULL, + + -- CONFIRM NEXT WAYPOINT + -- Urg(N)/Alr(L)/Resp(Y) + uM140NULL [140] NULL, + + -- CONFIRM NEXT WAYPOINT ETA + -- Urg(N)/Alr(L)/Resp(Y) + uM141NULL [141] NULL, + + -- CONFIRM ENSUING WAYPOINT + -- Urg(N)/Alr(L)/Resp(Y) + uM142NULL [142] NULL, + + -- CONFIRM REQUEST + -- Urg(N)/Alr(L)/Resp(Y) + uM143NULL [143] NULL, + + -- CONFIRM SQUAWK + -- Urg(N)/Alr(L)/Resp(Y) + uM144NULL [144] NULL, - -- DESCEND AT [verticalRate] MINIMUM - -- Urg(N)/Alr(M)/Resp(W/U) - uM173VerticalRate [173] VerticalRate, + -- REPORT HEADING + -- Urg(N)/Alr(M)/Resp(Y) + uM145NULL [145] NULL, - -- DESCEND AT [verticalRate] MAXIMUM - -- Urg(N)/Alr(M)/Resp(W/U) - uM174VerticalRate [174] VerticalRate, - - -- REPORT REACHING [level] - -- Urg(N)/Alr(L)/Resp(W/U) - uM175Level [175] Level, - - -- MAINTAIN OWN SEPARATION AND VMC - -- Urg(N)/Alr(M)/Resp(W/U) - uM176NULL [176] NULL, - - -- AT PILOTS DISCRETION - -- Urg(L)/Alr(L)/Resp(N) - uM177NULL [177] NULL, - - -- Reserved - -- Urg(L)/Alr(L)/Resp(Y) - uM178NULL [178] NULL, - - -- SQUAWK IDENT - -- Urg(N)/Alr(M)/Resp(W/U) - uM179NULL [179] NULL, - - -- REPORT REACHING BLOCK [level] TO [level] - -- Urg(N)/Alr(L)/Resp(W/U) - uM180LevelLevel [180] LevelLevel, - - -- REPORT DISTANCE [tofrom] [position] - -- Urg(N)/Alr(M)/Resp(Y) - uM181ToFromPosition [181] ToFromPosition, - - -- CONFIRM ATIS CODE - -- Urg(N)/Alr(L)/Resp(Y) - uM182NULL [182] NULL, - - -- [freetext] - -- Urg(N)/Alr(M)/Resp(N) - uM183FreeText [183] FreeText, - - -- AT [time] REPORT DISTANCE [tofrom] [position] - -- Urg(N)/Alr(L)/Resp(Y) - uM184TimeToFromPosition [184] TimeToFromPosition, - - -- AFTER PASSING [position] CLIMB TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM185PositionLevel [185] PositionLevel, - - -- AFTER PASSING [position] DESCEND TO [level] - -- Urg(N)/Alr(M)/Resp(W/U) - uM186PositionLevel [186] PositionLevel, - - -- [freetext] - -- Urg(L)/Alr(N)/Resp(N) - uM187FreeText [187] FreeText, - - -- AFTER PASSING [position] MAINTAIN [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM188PositionSpeed [188] PositionSpeed, - - -- ADJUST SPEED TO [speed] - -- Urg(N)/Alr(M)/Resp(W/U) - uM189Speed [189] Speed, - - -- FLY HEADING [degrees] - -- Urg(N)/Alr(M)/Resp(W/U) - uM190Degrees [190] Degrees, - - -- ALL ATS TERMINATED - -- Urg(N)/Alr(M)/Resp(R) - uM191NULL [191] NULL, - - -- REACH [level] BY [time] - -- Urg(N)/Alr(M)/Resp(W/U) - uM192LevelTime [192] LevelTime, - - -- IDENTIFICATION LOST - -- Urg(N)/Alr(M)/Resp(R) - uM193NULL [193] NULL, - - -- [freetext] - -- Urg(N)/Alr(L)/Resp(Y) - uM194FreeText [194] FreeText, - - -- [freetext] - -- Urg(L)/Alr(L)/Resp(R) - uM195FreeText [195] FreeText, - - -- [freetext] - -- Urg(N)/Alr(M)/Resp - uM196FreeText [196] FreeText, - - -- [freetext] - -- Urg(U)/Alr(M)/Resp(W/U) - uM197FreeText [197] FreeText, - - -- [freetext] - -- Urg(D)/Alr(H)/Resp(W/U) - uM198FreeText [198] FreeText, - - -- [freetext] - -- Urg(N)/Alr(L)/Resp(N) - uM199FreeText [199] FreeText, - - -- REPORT REACHING - -- Urg(N)/Alr(L)/Resp(W/U) - uM200NULL [200] NULL, - - -- Not Used - -- Urg(L)/Alr(L)/Resp(N) - uM201NULL [201] NULL, - - -- Not Used - -- Urg(L)/Alr(L)/Resp(N) - uM202NULL [202] NULL, - - -- [freetext] - -- Urg(N)/Alr(M)/Resp(R) - uM203FreeText [203] FreeText, - - -- [freetext] - -- Urg(N)/Alr(M)/Resp(Y) - uM204FreeText [204] FreeText, - - -- [freetext] - -- Urg(N)/Alr(M)/Resp(A/N) - uM205FreeText [205] FreeText, - - -- [freetext] - -- Urg(L)/Alr(N)/Resp(Y) - uM206FreeText [206] FreeText, - - -- [freetext] - -- Urg(L)/Alr(L)/Resp(Y) - uM207FreeText [207] FreeText, - - -- [freetext] - -- Urg(L)/Alr(L)/Resp(N) - uM208FreeText [208] FreeText, - - -- REACH [level] BY [position] - -- Urg(N)/Alr(M)/Resp(W/U) - uM209LevelPosition [209] LevelPosition, - - -- IDENTIFIED [position] - -- Urg(N)/Alr(M)/Resp(R) - uM210Position [210] Position, - - -- REQUEST FORWARDED - -- Urg(N)/Alr(L)/Resp(N) - uM211NULL [211] NULL, - - -- [facilitydesignation] ATIS [atiscode] CURRENT - -- Urg(N)/Alr(L)/Resp(R) - uM212FacilityDesignationATISCode [212] FacilityDesignationATISCode, - - -- [facilitydesignation] ALTIMETER [altimeter] - -- Urg(N)/Alr(L)/Resp(R) - uM213FacilityDesignationAltimeter [213] FacilityDesignationAltimeter, - - -- RVR RUNWAY [runway] [rvr] - -- Urg(N)/Alr(M)/Resp(R) - uM214RunwayRVR [214] RunwayRVR, - - -- TURN [direction][degrees] - -- Urg(N)/Alr(M)/Resp(W/U) - uM215DirectionDegrees [215] DirectionDegrees, - - -- REQUEST FLIGHT PLAN - -- Urg(N)/Alr(M)/Resp(Y) - uM216NULL [216] NULL, - - -- REPORT ARRIVAL - -- Urg(N)/Alr(M)/Resp(Y) - uM217NULL [217] NULL, - - -- REQUEST ALREADY RECEIVED - -- Urg(L)/Alr(N)/Resp(N) - uM218NULL [218] NULL, - - -- STOP CLIMB AT [level] - -- Urg(U)/Alr(M)/Resp(W/U) - uM219Level [219] Level, - - -- STOP DESCENT AT [level] - -- Urg(U)/Alr(M)/Resp(W/U) - uM220Level [220] Level, - - -- STOP TURN HEADING [degrees] - -- Urg(U)/Alr(M)/Resp(W/U) - uM221Degrees [221] Degrees, - - -- NO SPEED RESTRICTION - -- Urg(L)/Alr(L)/Resp(R) - uM222NULL [222] NULL, - - -- REDUCE TO MINIMUM APPROACH SPEED - -- Urg(N)/Alr(M)/Resp(W/U) - uM223NULL [223] NULL, - - -- NO DELAY EXPECTED - -- Urg(N)/Alr(L)/Resp(R) - uM224NULL [224] NULL, - - -- DELAY NOT DETERMINED - -- Urg(N)/Alr(L)/Resp(R) - uM225NULL [225] NULL, + -- REPORT GROUND TRACK + -- Urg(N)/Alr(M)/Resp(Y) + uM146NULL [146] NULL, - -- EXPECTED APPROACH TIME [time] - -- Urg(N)/Alr(L)/Resp(R) - uM226Time [226] Time, + -- REQUEST POSITION REPORT + -- Urg(N)/Alr(M)/Resp(Y ) + uM147NULL [147] NULL, - -- LOGICAL ACKNOWLEDGMENT - -- Urg(N)/Alr(M)/Resp(N) - uM227NULL [227] NULL, + -- WHEN CAN YOU ACCEPT [level] + -- Urg(N)/Alr(L)/Resp(Y) + uM148Level [148] Level, - -- REPORT ETA [position] - --Urg(L)/Alr(L)/Resp(Y) - uM228Position [228] Position, + -- CAN YOU ACCEPT [level] AT [position] + -- Urg(N)/Alr(L)/Resp(A/N) + uM149LevelPosition [149] LevelPosition, - -- REPORT ALTERNATE AERODROME - -- Urg(L)/Alr(L)/Resp(Y) - uM229NULL [229] NULL, + -- CAN YOU ACCEPT [level] AT [time] + -- Urg(N)/Alr(L)/Resp(A/N) + uM150LevelTime [150] LevelTime, - -- IMMEDIATELY - -- Urg(D)/Alr(H)/Resp(N) - uM230NULL [230] NULL, + -- WHEN CAN YOU ACCEPT [speed] + -- Urg(N)/Alr(L)/Resp(Y) + uM151Speed [151] Speed, - -- STATE PREFERRED LEVEL - -- Urg(L)/Alr(L)/Resp(Y) - uM231NULL [231] NULL, + -- WHEN CAN YOU ACCEPT [specifiedDistance] [direction] OFFSET + -- Urg(N)/Alr(L)/Resp(Y) + uM152DistanceSpecifiedDirection [152] DistanceSpecifiedDirection, - -- STATE TOP OF DESCENT - -- Urg(L)/Alr(L)/Resp(Y) - uM232NULL [232] NULL, + -- ALTIMETER [altimeter] + -- Urg(N)/Alr(L)/Resp(R) + uM153Altimeter [153] Altimeter, - -- USE OF LOGICAL ACKNOWLEDGMENT PROHIBITED - -- Urg(N)/Alr(M)/Resp(N) - uM233NULL [233] NULL, + -- RADAR SERVICE TERMINATED + -- Urg(N)/Alr(L)/Resp(R) + uM154NULL [154] NULL, - -- FLIGHT PLAN NOT HELD - -- Urg(L)/Alr(L)/Resp(N) - uM234NULL [234] NULL, + -- RADAR CONTACT [position] + -- Urg(N)/Alr(M)/Resp(R) + uM155Position [155] Position, - -- ROGER 7500 - -- Urg(U)/Alr(H)/Resp(N) - uM235NULL [235] NULL, + -- RADAR CONTACT LOST + -- Urg(N)/Alr(M)/Resp(R) + uM156NULL [156] NULL, - -- LEAVE CONTROLLED AIRSPACE - -- Urg(N)/Alr(M)/Resp(W/U) - uM236NULL [236] NULL, - ..., + -- CHECK STUCK MICROPHONE [frequency] + -- Urg(U)/Alr(M)/Resp(N) + uM157Frequency [157] Frequency, - -- REQUEST AGAIN WITH NEXT UNIT - -- Urg(N)/Alr(L)/Resp(N) - uM237NULL [237]NULL + -- ATIS [atiscode] + -- Urg(N)/Alr(L)/Resp(R) + uM158AtisCode [158] ATISCode, + + -- ERROR [errorInformation] + -- Urg(U)/Alr(M)/Resp(N) + uM159ErrorInformation [159] ErrorInformation, + + -- NEXT DATA AUTHORITY [facility] + -- Urg(L)/Alr(N)/Resp(N) + uM160Facility [160] Facility, + + -- END SERVICE + -- Urg(L)/Alr(N)/Resp(N) + uM161NULL [161] NULL, + + -- SERVICE UNAVAILABLE + -- Urg(L)/Alr(L)/Resp(N ) + uM162NULL [162] NULL, + + -- [facilitydesignation] + -- Urg(L)/Alr(N)/Resp(N) + uM163FacilityDesignation [163] FacilityDesignation, + + -- WHEN READY + -- Urg(L)/Alr(N)/Resp(N) + uM164NULL [164] NULL, + + -- THEN + -- Urg(L)/Alr(N)/Resp(N) + uM165NULL [165] NULL, + + -- DUE TO [traffictype]TRAFFIC + -- Urg(L)/Alr(N)/Resp(N) + uM166TrafficType [166] TrafficType, + + -- DUE TO AIRSPACE RESTRICTION + -- Urg(L)/Alr(N)/Resp(N) + uM167NULL [167] NULL, + + -- DISREGARD + -- Urg(U)/Alr(M)/Resp(R) + uM168NULL [168] NULL, + + -- [freetext] + -- Urg(N)/Alr(L)/Resp(R) + uM169FreeText [169] FreeText, + + -- [freetext] + -- Urg(D)/Alr(H)/Resp(R) + uM170FreeText [170] FreeText, + + -- CLIMB AT [verticalRate] MINIMUM + -- Urg(N)/Alr(M)/Resp(W/U) + uM171VerticalRate [171] VerticalRate, + + -- CLIMB AT [verticalRate] MAXIMUM + -- Urg(N)/Alr(M)/Resp(W/U) + uM172VerticalRate [172] VerticalRate, + + -- DESCEND AT [verticalRate] MINIMUM + -- Urg(N)/Alr(M)/Resp(W/U) + uM173VerticalRate [173] VerticalRate, + + -- DESCEND AT [verticalRate] MAXIMUM + -- Urg(N)/Alr(M)/Resp(W/U) + uM174VerticalRate [174] VerticalRate, + + -- REPORT REACHING [level] + -- Urg(N)/Alr(L)/Resp(W/U) + uM175Level [175] Level, + + -- MAINTAIN OWN SEPARATION AND VMC + -- Urg(N)/Alr(M)/Resp(W/U) + uM176NULL [176] NULL, + + -- AT PILOTS DISCRETION + -- Urg(L)/Alr(L)/Resp(N) + uM177NULL [177] NULL, + + -- Reserved + -- Urg(L)/Alr(L)/Resp(Y) + uM178NULL [178] NULL, + + -- SQUAWK IDENT + -- Urg(N)/Alr(M)/Resp(W/U) + uM179NULL [179] NULL, + + -- REPORT REACHING BLOCK [level] TO [level] + -- Urg(N)/Alr(L)/Resp(W/U) + uM180LevelLevel [180] LevelLevel, + + -- REPORT DISTANCE [tofrom] [position] + -- Urg(N)/Alr(M)/Resp(Y) + uM181ToFromPosition [181] ToFromPosition, + + -- CONFIRM ATIS CODE + -- Urg(N)/Alr(L)/Resp(Y) + uM182NULL [182] NULL, + + -- [freetext] + -- Urg(N)/Alr(M)/Resp(N) + uM183FreeText [183] FreeText, + + -- AT [time] REPORT DISTANCE [tofrom] [position] + -- Urg(N)/Alr(L)/Resp(Y) + uM184TimeToFromPosition [184] TimeToFromPosition, + + -- AFTER PASSING [position] CLIMB TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM185PositionLevel [185] PositionLevel, + + -- AFTER PASSING [position] DESCEND TO [level] + -- Urg(N)/Alr(M)/Resp(W/U) + uM186PositionLevel [186] PositionLevel, + + -- [freetext] + -- Urg(L)/Alr(N)/Resp(N) + uM187FreeText [187] FreeText, + + -- AFTER PASSING [position] MAINTAIN [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM188PositionSpeed [188] PositionSpeed, + + -- ADJUST SPEED TO [speed] + -- Urg(N)/Alr(M)/Resp(W/U) + uM189Speed [189] Speed, + + -- FLY HEADING [degrees] + -- Urg(N)/Alr(M)/Resp(W/U) + uM190Degrees [190] Degrees, + + -- ALL ATS TERMINATED + -- Urg(N)/Alr(M)/Resp(R) + uM191NULL [191] NULL, + + -- REACH [level] BY [time] + -- Urg(N)/Alr(M)/Resp(W/U) + uM192LevelTime [192] LevelTime, + + -- IDENTIFICATION LOST + -- Urg(N)/Alr(M)/Resp(R) + uM193NULL [193] NULL, + + -- [freetext] + -- Urg(N)/Alr(L)/Resp(Y) + uM194FreeText [194] FreeText, + + -- [freetext] + -- Urg(L)/Alr(L)/Resp(R) + uM195FreeText [195] FreeText, + + -- [freetext] + -- Urg(N)/Alr(M)/Resp + uM196FreeText [196] FreeText, + + -- [freetext] + -- Urg(U)/Alr(M)/Resp(W/U) + uM197FreeText [197] FreeText, + + -- [freetext] + -- Urg(D)/Alr(H)/Resp(W/U) + uM198FreeText [198] FreeText, + + -- [freetext] + -- Urg(N)/Alr(L)/Resp(N) + uM199FreeText [199] FreeText, + + -- REPORT REACHING + -- Urg(N)/Alr(L)/Resp(W/U) + uM200NULL [200] NULL, + + -- Not Used + -- Urg(L)/Alr(L)/Resp(N) + uM201NULL [201] NULL, + + -- Not Used + -- Urg(L)/Alr(L)/Resp(N) + uM202NULL [202] NULL, + + -- [freetext] + -- Urg(N)/Alr(M)/Resp(R) + uM203FreeText [203] FreeText, + + -- [freetext] + -- Urg(N)/Alr(M)/Resp(Y) + uM204FreeText [204] FreeText, + + -- [freetext] + -- Urg(N)/Alr(M)/Resp(A/N) + uM205FreeText [205] FreeText, + + -- [freetext] + -- Urg(L)/Alr(N)/Resp(Y) + uM206FreeText [206] FreeText, + + -- [freetext] + -- Urg(L)/Alr(L)/Resp(Y) + uM207FreeText [207] FreeText, + + -- [freetext] + -- Urg(L)/Alr(L)/Resp(N) + uM208FreeText [208] FreeText, + + -- REACH [level] BY [position] + -- Urg(N)/Alr(M)/Resp(W/U) + uM209LevelPosition [209] LevelPosition, + + -- IDENTIFIED [position] + -- Urg(N)/Alr(M)/Resp(R) + uM210Position [210] Position, + + -- REQUEST FORWARDED + -- Urg(N)/Alr(L)/Resp(N) + uM211NULL [211] NULL, + + -- [facilitydesignation] ATIS [atiscode] CURRENT + -- Urg(N)/Alr(L)/Resp(R) + uM212FacilityDesignationATISCode [212] FacilityDesignationATISCode, + + -- [facilitydesignation] ALTIMETER [altimeter] + -- Urg(N)/Alr(L)/Resp(R) + uM213FacilityDesignationAltimeter [213] FacilityDesignationAltimeter, + + -- RVR RUNWAY [runway] [rvr] + -- Urg(N)/Alr(M)/Resp(R) + uM214RunwayRVR [214] RunwayRVR, + + -- TURN [direction][degrees] + -- Urg(N)/Alr(M)/Resp(W/U) + uM215DirectionDegrees [215] DirectionDegrees, + + -- REQUEST FLIGHT PLAN + -- Urg(N)/Alr(M)/Resp(Y) + uM216NULL [216] NULL, + + -- REPORT ARRIVAL + -- Urg(N)/Alr(M)/Resp(Y) + uM217NULL [217] NULL, + + -- REQUEST ALREADY RECEIVED + -- Urg(L)/Alr(N)/Resp(N) + uM218NULL [218] NULL, + + -- STOP CLIMB AT [level] + -- Urg(U)/Alr(M)/Resp(W/U) + uM219Level [219] Level, + + -- STOP DESCENT AT [level] + -- Urg(U)/Alr(M)/Resp(W/U) + uM220Level [220] Level, + + -- STOP TURN HEADING [degrees] + -- Urg(U)/Alr(M)/Resp(W/U) + uM221Degrees [221] Degrees, + + -- NO SPEED RESTRICTION + -- Urg(L)/Alr(L)/Resp(R) + uM222NULL [222] NULL, + + -- REDUCE TO MINIMUM APPROACH SPEED + -- Urg(N)/Alr(M)/Resp(W/U) + uM223NULL [223] NULL, + + -- NO DELAY EXPECTED + -- Urg(N)/Alr(L)/Resp(R) + uM224NULL [224] NULL, + + -- DELAY NOT DETERMINED + -- Urg(N)/Alr(L)/Resp(R) + uM225NULL [225] NULL, + + -- EXPECTED APPROACH TIME [time] + -- Urg(N)/Alr(L)/Resp(R) + uM226Time [226] Time, + + -- LOGICAL ACKNOWLEDGMENT + -- Urg(N)/Alr(M)/Resp(N) + uM227NULL [227] NULL, + + -- REPORT ETA [position] + --Urg(L)/Alr(L)/Resp(Y) + uM228Position [228] Position, + + -- REPORT ALTERNATE AERODROME + -- Urg(L)/Alr(L)/Resp(Y) + uM229NULL [229] NULL, + + -- IMMEDIATELY + -- Urg(D)/Alr(H)/Resp(N) + uM230NULL [230] NULL, + + -- STATE PREFERRED LEVEL + -- Urg(L)/Alr(L)/Resp(Y) + uM231NULL [231] NULL, + + -- STATE TOP OF DESCENT + -- Urg(L)/Alr(L)/Resp(Y) + uM232NULL [232] NULL, + + -- USE OF LOGICAL ACKNOWLEDGMENT PROHIBITED + -- Urg(N)/Alr(M)/Resp(N) + uM233NULL [233] NULL, + + -- FLIGHT PLAN NOT HELD + -- Urg(L)/Alr(L)/Resp(N) + uM234NULL [234] NULL, + + -- ROGER 7500 + -- Urg(U)/Alr(H)/Resp(N) + uM235NULL [235] NULL, + + -- LEAVE CONTROLLED AIRSPACE + -- Urg(N)/Alr(M)/Resp(W/U) + uM236NULL [236] NULL, + ..., + + -- REQUEST AGAIN WITH NEXT UNIT + -- Urg(N)/Alr(L)/Resp(N) + uM237NULL [237]NULL } ------------------------------------------------------------------------------------ @@ -1254,462 +1250,462 @@ ATCUplinkMsgElementId ::= CHOICE -- ---------------------------------------------------------------------------------- ATCDownlinkMsgElementId ::= CHOICE { - -- WILCO - -- Urg(N)/Alr(M)/Resp(N) - dM0NULL [0] NULL, + -- WILCO + -- Urg(N)/Alr(M)/Resp(N) + dM0NULL [0] NULL, + + --UNABLE + -- Urg(N)/Alr(M)/Resp(N) + dM1NULL [1] NULL, - --UNABLE - -- Urg(N)/Alr(M)/Resp(N) - dM1NULL [1] NULL, + -- STANDBY + -- Urg(N)/Alr(M)/Resp(N) + dM2NULL [2] NULL, - -- STANDBY - -- Urg(N)/Alr(M)/Resp(N) - dM2NULL [2] NULL, + -- ROGER + -- Urg(N)/Alr(M)/Resp(N) + dM3NULL [3] NULL, - -- ROGER - -- Urg(N)/Alr(M)/Resp(N) - dM3NULL [3] NULL, + -- AFFIRM + -- Urg(N)/Alr(M)/Resp(N) + dM4NULL [4] NULL, - -- AFFIRM - -- Urg(N)/Alr(M)/Resp(N) - dM4NULL [4] NULL, + -- NEGATIVE + -- Urg(N)/Alr(M)/Resp(N) + dM5NULL [5] NULL, - -- NEGATIVE - -- Urg(N)/Alr(M)/Resp(N) - dM5NULL [5] NULL, + -- REQUEST [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM6Level [6] Level, - -- REQUEST [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM6Level [6] Level, + -- REQUEST BLOCK [level] TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM7LevelLevel [7] LevelLevel, - -- REQUEST BLOCK [level] TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM7LevelLevel [7] LevelLevel, + -- REQUEST CRUISE CLIMB TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM8Level [8] Level, - -- REQUEST CRUISE CLIMB TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM8Level [8] Level, + -- REQUEST CLIMB TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM9Level [9] Level, - -- REQUEST CLIMB TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM9Level [9] Level, + -- REQUEST DESCENT TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM10Level [10] Level, - -- REQUEST DESCENT TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM10Level [10] Level, + -- AT [position] REQUEST CLIMB TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM11PositionLevel [11] PositionLevel, - -- AT [position] REQUEST CLIMB TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM11PositionLevel [11] PositionLevel, + -- AT [position] REQUEST DESCENT TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM12PositionLevel [12] PositionLevel, - -- AT [position] REQUEST DESCENT TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM12PositionLevel [12] PositionLevel, + -- AT [time] REQUEST CLIMB TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM13TimeLevel [13] TimeLevel, - -- AT [time] REQUEST CLIMB TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM13TimeLevel [13] TimeLevel, + -- AT [time] REQUEST DESCENT TO [level] + -- Urg(N)/Alr(L)/Resp(Y) + dM14TimeLevel [14] TimeLevel, - -- AT [time] REQUEST DESCENT TO [level] - -- Urg(N)/Alr(L)/Resp(Y) - dM14TimeLevel [14] TimeLevel, + -- REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(L)/Resp(Y) + dM15DistanceSpecifiedDirection [15] DistanceSpecifiedDirection, - -- REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(L)/Resp(Y) - dM15DistanceSpecifiedDirection [15] DistanceSpecifiedDirection, + -- AT [position] REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(L)/Resp(Y) + dM16PositionDistanceSpecifiedDirection [16] PositionDistanceSpecifiedDirection, - -- AT [position] REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(L)/Resp(Y) - dM16PositionDistanceSpecifiedDirection [16] PositionDistanceSpecifiedDirection, + -- AT [time] REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(L)/Resp(Y) + dM17TimeDistanceSpecifiedDirection [17] TimeDistanceSpecifiedDirection, - -- AT [time] REQUEST OFFSET [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(L)/Resp(Y) - dM17TimeDistanceSpecifiedDirection [17] TimeDistanceSpecifiedDirection, + -- REQUEST [speed] + -- Urg(N)/Alr(L)/Resp(Y) + dM18Speed [18] Speed, - -- REQUEST [speed] - -- Urg(N)/Alr(L)/Resp(Y) - dM18Speed [18] Speed, + -- REQUEST [speed] TO [speed] + -- Urg(N)/Alr(L)/Resp(Y) + dM19SpeedSpeed [19] SpeedSpeed, - -- REQUEST [speed] TO [speed] - -- Urg(N)/Alr(L)/Resp(Y) - dM19SpeedSpeed [19] SpeedSpeed, + -- REQUEST VOICE CONTACT + -- Urg(N)/Alr(L)/Resp(Y) + dM20NULL [20] NULL, - -- REQUEST VOICE CONTACT - -- Urg(N)/Alr(L)/Resp(Y) - dM20NULL [20] NULL, + -- REQUEST VOICE CONTACT [frequency] + -- Urg(N)/Alr(L)/Resp(Y) + dM21Frequency [21] Frequency, - -- REQUEST VOICE CONTACT [frequency] - -- Urg(N)/Alr(L)/Resp(Y) - dM21Frequency [21] Frequency, + -- REQUEST DIRECT TO [position] + -- Urg(N)/Alr(L)/Resp(Y) + dM22Position [22] Position, - -- REQUEST DIRECT TO [position] - -- Urg(N)/Alr(L)/Resp(Y) - dM22Position [22] Position, + -- REQUEST [procedureName] + -- Urg(N)/Alr(L)/Resp(Y) + dM23ProcedureName [23] ProcedureName, - -- REQUEST [procedureName] - -- Urg(N)/Alr(L)/Resp(Y) - dM23ProcedureName [23] ProcedureName, + -- REQUEST CLEARANCE [routeClearance] + -- Urg(N)/Alr(L)/Resp(Y) + dM24RouteClearance [24] RouteClearanceIndex, - -- REQUEST CLEARANCE [routeClearance] - -- Urg(N)/Alr(L)/Resp(Y) - dM24RouteClearance [24] RouteClearanceIndex, + -- REQUEST [clearanceType] CLEARANCE + -- Urg(N)/Alr(L)/Resp(Y) + dM25ClearanceType [25] ClearanceType, - -- REQUEST [clearanceType] CLEARANCE - -- Urg(N)/Alr(L)/Resp(Y) - dM25ClearanceType [25] ClearanceType, + -- REQUEST WEATHER DEVIATION TO [position] VIA [routeClearance] + -- Urg(N)/Alr(M)/Resp(Y) + dM26PositionRouteClearance [26] PositionRouteClearanceIndex, - -- REQUEST WEATHER DEVIATION TO [position] VIA [routeClearance] - -- Urg(N)/Alr(M)/Resp(Y) - dM26PositionRouteClearance [26] PositionRouteClearanceIndex, + -- REQUEST WEATHER DEVIATION UP TO [specifiedDistance] [direction] OF ROUTE + -- Urg(N)/Alr(M)/Resp(Y) + dM27DistanceSpecifiedDirection [27] DistanceSpecifiedDirection, - -- REQUEST WEATHER DEVIATION UP TO [specifiedDistance] [direction] OF ROUTE - -- Urg(N)/Alr(M)/Resp(Y) - dM27DistanceSpecifiedDirection [27] DistanceSpecifiedDirection, + -- LEAVING [level] + -- Urg(N)/Alr(L)/Resp(N) + dM28Level [28] Level, - -- LEAVING [level] - -- Urg(N)/Alr(L)/Resp(N) - dM28Level [28] Level, + -- CLIMBING TO [level] + -- Urg(N)/Alr(L)/Resp(N) + dM29Level [29]Level, - -- CLIMBING TO [level] - -- Urg(N)/Alr(L)/Resp(N) - dM29Level [29]Level, + -- DESCENDING TO [level] + -- Urg(N)/Alr(L)/Resp(N) + dM30Level [30] Level, - -- DESCENDING TO [level] - -- Urg(N)/Alr(L)/Resp(N) - dM30Level [30] Level, + -- PASSING [position] + -- Urg(N)/Alr(L)/Resp(N) + dM31Position [31] Position, - -- PASSING [position] - -- Urg(N)/Alr(L)/Resp(N) - dM31Position [31] Position, + -- PRESENT LEVEL [level] + -- Urg(N)/Alr(L)/Resp(N) + dM32Level [32] Level, - -- PRESENT LEVEL [level] - -- Urg(N)/Alr(L)/Resp(N) - dM32Level [32] Level, + -- PRESENT POSITION [position] + -- Urg(N)/Alr(L)/Resp(N) + dM33Position [33] Position, - -- PRESENT POSITION [position] - -- Urg(N)/Alr(L)/Resp(N) - dM33Position [33] Position, + -- PRESENT SPEED [speed] + -- Urg(N)/Alr(L)/Resp(N) + dM34Speed [34] Speed, - -- PRESENT SPEED [speed] - -- Urg(N)/Alr(L)/Resp(N) - dM34Speed [34] Speed, + -- PRESENT HEADING [degrees] + -- Urg(N)/Alr(L)/Resp(N) + dM35Degrees [35] Degrees, - -- PRESENT HEADING [degrees] - -- Urg(N)/Alr(L)/Resp(N) - dM35Degrees [35] Degrees, + -- PRESENT GROUND TRACK [degrees] + -- Urg(N)/Alr(L)/Resp(N) + dM36Degrees [36] Degrees, - -- PRESENT GROUND TRACK [degrees] - -- Urg(N)/Alr(L)/Resp(N) - dM36Degrees [36] Degrees, + -- MAINTAINING [level] + -- Urg(N)/Alr(L)/Resp(N) + dM37Level [37] Level, - -- MAINTAINING [level] - -- Urg(N)/Alr(L)/Resp(N) - dM37Level [37] Level, + -- ASSIGNED LEVEL [level] + -- Urg(N)/Alr(M)/Resp(N) + dM38Level [38] Level, - -- ASSIGNED LEVEL [level] - -- Urg(N)/Alr(M)/Resp(N) - dM38Level [38] Level, + -- ASSIGNED SPEED [speed] + -- Urg(N)/Alr(M)/Resp(N) + dM39Speed [39] Speed, - -- ASSIGNED SPEED [speed] - -- Urg(N)/Alr(M)/Resp(N) - dM39Speed [39] Speed, + -- ASSIGNED ROUTE [routeClearance] + -- Urg(N)/Alr(M)/Resp(N) + dM40RouteClearance [40] RouteClearanceIndex, - -- ASSIGNED ROUTE [routeClearance] - -- Urg(N)/Alr(M)/Resp(N) - dM40RouteClearance [40] RouteClearanceIndex, + -- BACK ON ROUTE + -- Urg(N)/Alr(M)/Resp(N) + dM41NULL [41] NULL, - -- BACK ON ROUTE - -- Urg(N)/Alr(M)/Resp(N) - dM41NULL [41] NULL, + -- NEXT WAYPOINT [position] + -- Urg(N)/Alr(L)/Resp(N) + dM42Position [42] Position, - -- NEXT WAYPOINT [position] - -- Urg(N)/Alr(L)/Resp(N) - dM42Position [42] Position, + -- NEXT WAYPOINT ETA [time] + -- Urg(N)/Alr(L)/Resp(N) + dM43Time [43] Time, - -- NEXT WAYPOINT ETA [time] - -- Urg(N)/Alr(L)/Resp(N) - dM43Time [43] Time, + -- ENSUING WAYPOINT [position] + -- Urg(N)/Alr(L)/Resp(N) + dM44Position [44] Position, - -- ENSUING WAYPOINT [position] - -- Urg(N)/Alr(L)/Resp(N) - dM44Position [44] Position, + -- REPORTED WAYPOINT [position] + -- Urg(N)/Alr(L)/Resp(N) + dM45Position [45] Position, - -- REPORTED WAYPOINT [position] - -- Urg(N)/Alr(L)/Resp(N) - dM45Position [45] Position, + -- REPORTED WAYPOINT [time] + -- Urg(N)/Alr(L)/Resp(N) + dM46Time [46] Time, - -- REPORTED WAYPOINT [time] - -- Urg(N)/Alr(L)/Resp(N) - dM46Time [46] Time, + -- SQUAWKING [code] + -- Urg(N)/Alr(L)/Resp(N) + dM47Code [47] Code, - -- SQUAWKING [code] - -- Urg(N)/Alr(L)/Resp(N) - dM47Code [47] Code, + -- POSITION REPORT [positionreport] + -- Urg(N)/Alr(M)/Resp(N) + dM48PositionReport [48] PositionReport, - -- POSITION REPORT [positionreport] - -- Urg(N)/Alr(M)/Resp(N) - dM48PositionReport [48] PositionReport, + -- WHEN CAN WE EXPECT [speed] + -- Urg(L)/Alr(L)/Resp(Y) + dM49Speed [49] Speed, - -- WHEN CAN WE EXPECT [speed] - -- Urg(L)/Alr(L)/Resp(Y) - dM49Speed [49] Speed, + -- WHEN CAN WE EXPECT [speed] TO [speed] + -- Urg(L)/Alr(L)/Resp(Y) + dM50SpeedSpeed [50] SpeedSpeed, - -- WHEN CAN WE EXPECT [speed] TO [speed] - -- Urg(L)/Alr(L)/Resp(Y) - dM50SpeedSpeed [50] SpeedSpeed, + -- WHEN CAN WE EXPECT BACK ON ROUTE + -- Urg(L)/Alr(L)/Resp(Y) + dM51NULL [51] NULL, - -- WHEN CAN WE EXPECT BACK ON ROUTE - -- Urg(L)/Alr(L)/Resp(Y) - dM51NULL [51] NULL, + -- WHEN CAN WE EXPECT LOWER LEVEL + -- Urg(L)/Alr(L)/Resp(Y) + dM52NULL [52] NULL, - -- WHEN CAN WE EXPECT LOWER LEVEL - -- Urg(L)/Alr(L)/Resp(Y) - dM52NULL [52] NULL, + -- WHEN CAN WE EXPECT HIGHER LEVEL Urg(L)/Alr(L)/Resp(Y) + dM53NULL [53] NULL, - -- WHEN CAN WE EXPECT HIGHER LEVEL Urg(L)/Alr(L)/Resp(Y) - dM53NULL [53] NULL, - - -- WHEN CAN WE EXPECT CRUISE CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(Y) - dM54Level [54] Level, + -- WHEN CAN WE EXPECT CRUISE CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(Y) + dM54Level [54] Level, - -- PAN PAN PAN - -- Urg(U)/Alr(H)/Resp(Y) - dM55NULL [55] NULL, + -- PAN PAN PAN + -- Urg(U)/Alr(H)/Resp(Y) + dM55NULL [55] NULL, - -- MAYDAY MAYDAY MAYDAY - -- Urg(D)/Alr(H)/Resp(Y) - dM56NULL [56] NULL, + -- MAYDAY MAYDAY MAYDAY + -- Urg(D)/Alr(H)/Resp(Y) + dM56NULL [56] NULL, - -- [remainingFuel] OF FUEL REMAINING AND [personsonboard] PERSONS ON BOARD - -- Urg(U)/Alr(H)/Resp(Y) - dM57RemainingFuelPersonsOnBoard [57] RemainingFuelPersonsOnBoard, + -- [remainingFuel] OF FUEL REMAINING AND [personsonboard] PERSONS ON BOARD + -- Urg(U)/Alr(H)/Resp(Y) + dM57RemainingFuelPersonsOnBoard [57] RemainingFuelPersonsOnBoard, - -- CANCEL EMERGENCY - -- Urg(U)/Alr(M)/Resp(Y) - dM58NULL [58] NULL, + -- CANCEL EMERGENCY + -- Urg(U)/Alr(M)/Resp(Y) + dM58NULL [58] NULL, - -- DIVERTING TO [position] VIA [routeClearance] - -- Urg(U)/Alr(H)/Resp(Y) - dM59PositionRouteClearance [59] PositionRouteClearanceIndex, + -- DIVERTING TO [position] VIA [routeClearance] + -- Urg(U)/Alr(H)/Resp(Y) + dM59PositionRouteClearance [59] PositionRouteClearanceIndex, - -- OFFSETTING [specifiedDistance] [direction] OF ROUTE - -- Urg(U)/Alr(H)/Resp(Y) - dM60DistanceSpecifiedDirection [60] DistanceSpecifiedDirection, + -- OFFSETTING [specifiedDistance] [direction] OF ROUTE + -- Urg(U)/Alr(H)/Resp(Y) + dM60DistanceSpecifiedDirection [60] DistanceSpecifiedDirection, - -- DESCENDING TO [level] - -- Urg(U)/Alr(H)/Resp(Y) - dM61Level [61] Level, + -- DESCENDING TO [level] + -- Urg(U)/Alr(H)/Resp(Y) + dM61Level [61] Level, - -- ERROR [errorInformation] - -- Urg(U)/Alr(L)/Resp(N) - dM62ErrorInformation [62] ErrorInformation, + -- ERROR [errorInformation] + -- Urg(U)/Alr(L)/Resp(N) + dM62ErrorInformation [62] ErrorInformation, - -- NOT CURRENT DATA AUTHORITY - -- Urg(L)/Alr(L)/Resp(N) - dM63NULL [63] NULL, + -- NOT CURRENT DATA AUTHORITY + -- Urg(L)/Alr(L)/Resp(N) + dM63NULL [63] NULL, - -- [facilitydesignation] - -- Urg(L)/Alr(L)/Resp(N) - dM64FacilityDesignation [64] FacilityDesignation, + -- [facilitydesignation] + -- Urg(L)/Alr(L)/Resp(N) + dM64FacilityDesignation [64] FacilityDesignation, - -- DUE TO WEATHER - -- Urg(L)/Alr(L)/Resp(N) - dM65NULL [65] NULL, + -- DUE TO WEATHER + -- Urg(L)/Alr(L)/Resp(N) + dM65NULL [65] NULL, - -- DUE TO AIRCRAFT PERFORMANCE - -- Urg(L)/Alr(L)/Resp(N) - dM66NULL [66] NULL, + -- DUE TO AIRCRAFT PERFORMANCE + -- Urg(L)/Alr(L)/Resp(N) + dM66NULL [66] NULL, - -- [freetext] - -- Urg(N)/Alr(L)/Resp(N) - dM67FreeText [67] FreeText, + -- [freetext] + -- Urg(N)/Alr(L)/Resp(N) + dM67FreeText [67] FreeText, - -- [freetext] - -- Urg(D)/Alr(H)/Resp(Y) - dM68FreeText [68] FreeText, + -- [freetext] + -- Urg(D)/Alr(H)/Resp(Y) + dM68FreeText [68] FreeText, - -- REQUEST VMC DESCENT - -- Urg(N)/Alr(L)/Resp(Y) - dM69NULL [69] NULL, + -- REQUEST VMC DESCENT + -- Urg(N)/Alr(L)/Resp(Y) + dM69NULL [69] NULL, - -- REQUEST HEADING [degrees] - -- Urg(N)/Alr(L)/Resp(Y) - dM70Degrees [70] Degrees, + -- REQUEST HEADING [degrees] + -- Urg(N)/Alr(L)/Resp(Y) + dM70Degrees [70] Degrees, - -- REQUEST GROUND TRACK [degrees] - -- Urg(N)/Alr(L)/Resp(Y) - dM71Degrees [71] Degrees, + -- REQUEST GROUND TRACK [degrees] + -- Urg(N)/Alr(L)/Resp(Y) + dM71Degrees [71] Degrees, - -- REACHING [level] - -- Urg(N)/Alr(L)/Resp(N) - dM72Level [72] Level, + -- REACHING [level] + -- Urg(N)/Alr(L)/Resp(N) + dM72Level [72] Level, - -- [versionnumber] - -- Urg(L)/Alr(L)/Resp(N) - dM73Versionnumber [73] VersionNumber, + -- [versionnumber] + -- Urg(L)/Alr(L)/Resp(N) + dM73Versionnumber [73] VersionNumber, - -- REQUEST TO MAINTAIN OWN SEPARATION AND VMC - -- Urg(L)/Alr(L)/Resp(Y) - dM74NULL [74] NULL, + -- REQUEST TO MAINTAIN OWN SEPARATION AND VMC + -- Urg(L)/Alr(L)/Resp(Y) + dM74NULL [74] NULL, - -- AT PILOTS DISCRETION - -- Urg(L)/Alr(L)/Resp(N) - dM75NULL [75] NULL, + -- AT PILOTS DISCRETION + -- Urg(L)/Alr(L)/Resp(N) + dM75NULL [75] NULL, - -- REACHING BLOCK [level] TO [level] - -- Urg(N)/Alr(L)/Resp(N) - dM76LevelLevel [76] LevelLevel, + -- REACHING BLOCK [level] TO [level] + -- Urg(N)/Alr(L)/Resp(N) + dM76LevelLevel [76] LevelLevel, - -- ASSIGNED BLOCK [level] TO [level] - -- Urg(N)/Alr(M)/Resp(N) - dM77LevelLevel [77] LevelLevel, + -- ASSIGNED BLOCK [level] TO [level] + -- Urg(N)/Alr(M)/Resp(N) + dM77LevelLevel [77] LevelLevel, - -- AT [time] [distance] [tofrom] [position] - -- Urg(N)/Alr(L)/Resp(N) - dM78TimeDistanceToFromPosition [78] TimeDistanceToFromPosition, + -- AT [time] [distance] [tofrom] [position] + -- Urg(N)/Alr(L)/Resp(N) + dM78TimeDistanceToFromPosition [78] TimeDistanceToFromPosition, - -- ATIS [atiscode] - -- Urg(N)/Alr(L)/Resp(N) - dM79AtisCode [79] ATISCode, + -- ATIS [atiscode] + -- Urg(N)/Alr(L)/Resp(N) + dM79AtisCode [79] ATISCode, - -- DEVIATING UP TO [specifiedDistance] [direction] OF ROUTE - -- Urg(U)/Alr(H)/Resp(Y) - dM80DistanceSpecifiedDirection [80] DistanceSpecifiedDirection, + -- DEVIATING UP TO [specifiedDistance] [direction] OF ROUTE + -- Urg(U)/Alr(H)/Resp(Y) + dM80DistanceSpecifiedDirection [80] DistanceSpecifiedDirection, - -- WE CAN ACCEPT [level] AT [time] - -- Urg(L)/Alr(L)/Resp(N) - dM81LevelTime [81] LevelTime, + -- WE CAN ACCEPT [level] AT [time] + -- Urg(L)/Alr(L)/Resp(N) + dM81LevelTime [81] LevelTime, - -- WE CANNOT ACCEPT [level] - -- Urg(L)/Alr(L)/Resp(N) - dM82Level [82] Level, + -- WE CANNOT ACCEPT [level] + -- Urg(L)/Alr(L)/Resp(N) + dM82Level [82] Level, - -- WE CAN ACCEPT [speed] AT [time] - -- Urg(L)/Alr(L)/Resp(N) - dM83SpeedTime [83] SpeedTime, + -- WE CAN ACCEPT [speed] AT [time] + -- Urg(L)/Alr(L)/Resp(N) + dM83SpeedTime [83] SpeedTime, - -- WE CANNOT ACCEPT [speed] - -- Urg(L)/Alr(L)/Resp(N) - dM84Speed [84] Speed, + -- WE CANNOT ACCEPT [speed] + -- Urg(L)/Alr(L)/Resp(N) + dM84Speed [84] Speed, - -- WE CAN ACCEPT [specifiedDistance] [direction] AT [time] - -- Urg(L)/Alr(L)/Resp(N) - dM85DistanceSpecifiedDirectionTime [85] DistanceSpecifiedDirectionTime, + -- WE CAN ACCEPT [specifiedDistance] [direction] AT [time] + -- Urg(L)/Alr(L)/Resp(N) + dM85DistanceSpecifiedDirectionTime [85] DistanceSpecifiedDirectionTime, - -- WE CANNOT ACCEPT [specifiedDistance] [direction] - -- Urg(L)/Alr(L)/Resp(N) - dM86DistanceSpecifiedDirection [86] DistanceSpecifiedDirection, + -- WE CANNOT ACCEPT [specifiedDistance] [direction] + -- Urg(L)/Alr(L)/Resp(N) + dM86DistanceSpecifiedDirection [86] DistanceSpecifiedDirection, - -- WHEN CAN WE EXPECT CLIMB TO [level] - -- Urg(L)/Alr(L)/Resp(Y) - dM87Level [87] Level, + -- WHEN CAN WE EXPECT CLIMB TO [level] + -- Urg(L)/Alr(L)/Resp(Y) + dM87Level [87] Level, - -- WHEN CAN WE EXPECT DESCENT TO [level] - --Urg(L)/Alr(L)/Resp(Y) - dM88Level [88] Level, + -- WHEN CAN WE EXPECT DESCENT TO [level] + --Urg(L)/Alr(L)/Resp(Y) + dM88Level [88] Level, - -- MONITORING [unitname] [frequency] - -- Urg(U)/Alr(M)/Resp(N) - dM89UnitnameFrequency [89] UnitNameFrequency, + -- MONITORING [unitname] [frequency] + -- Urg(U)/Alr(M)/Resp(N) + dM89UnitnameFrequency [89] UnitNameFrequency, - -- [freetext] - -- Urg(N)/Alr(M)/Resp(N) - dM90FreeText [90] FreeText, + -- [freetext] + -- Urg(N)/Alr(M)/Resp(N) + dM90FreeText [90] FreeText, - -- [freetext] - -- Urg(N)/Alr(L)/Resp(Y) - dM91FreeText [91] FreeText, + -- [freetext] + -- Urg(N)/Alr(L)/Resp(Y) + dM91FreeText [91] FreeText, - -- [freetext] - -- Urg(L)/Alr(L)/Resp(Y) - dM92FreeText [92] FreeText, + -- [freetext] + -- Urg(L)/Alr(L)/Resp(Y) + dM92FreeText [92] FreeText, - -- [freetext] - -- Urg(U)/Alr(H)/Resp(N) - dM93FreeText [93] FreeText, + -- [freetext] + -- Urg(U)/Alr(H)/Resp(N) + dM93FreeText [93] FreeText, - -- [freetext] - -- Urg(D)/Alr(H)/Resp(N) - dM94FreeText [94] FreeText, + -- [freetext] + -- Urg(D)/Alr(H)/Resp(N) + dM94FreeText [94] FreeText, - -- [freetext] - -- Urg(U)/Alr(M)/Resp(N) - dM95FreeText [95] FreeText, + -- [freetext] + -- Urg(U)/Alr(M)/Resp(N) + dM95FreeText [95] FreeText, - -- [freetext] - -- Urg(U)/Alr(L)/Resp(N) - dM96FreeText [96] FreeText, + -- [freetext] + -- Urg(U)/Alr(L)/Resp(N) + dM96FreeText [96] FreeText, - -- [freetext] - -- Urg(L)/Alr(L)/Resp(N) - dM97FreeText [97] FreeText, + -- [freetext] + -- Urg(L)/Alr(L)/Resp(N) + dM97FreeText [97] FreeText, - -- [freetext] - -- Urg(N)/Alr(N)/Resp(N) - dM98FreeText [98] FreeText, + -- [freetext] + -- Urg(N)/Alr(N)/Resp(N) + dM98FreeText [98] FreeText, - -- CURRENT DATA AUTHORITY - -- Urg(L)/Alr(L)/Resp(N) - dM99NULL [99] NULL, + -- CURRENT DATA AUTHORITY + -- Urg(L)/Alr(L)/Resp(N) + dM99NULL [99] NULL, - -- LOGICAL ACKNOWLEDGMENT - -- Urg(N)/Alr(M)/Resp(N) - dM100NULL [100] NULL, + -- LOGICAL ACKNOWLEDGMENT + -- Urg(N)/Alr(M)/Resp(N) + dM100NULL [100] NULL, - -- REQUEST END OF SERVICE - -- Urg(L)/Alr(L)/Resp(Y) - dM101NULL [101] NULL, + -- REQUEST END OF SERVICE + -- Urg(L)/Alr(L)/Resp(Y) + dM101NULL [101] NULL, - -- LANDING REPORT - -- Urg(N)/Alr(N)/Resp(N) - dM102NULL [102] NULL, + -- LANDING REPORT + -- Urg(N)/Alr(N)/Resp(N) + dM102NULL [102] NULL, - -- CANCELLING IFR - -- Urg(N)/Alr(L)/Resp(Y) - dM103NULL [103] NULL, + -- CANCELLING IFR + -- Urg(N)/Alr(L)/Resp(Y) + dM103NULL [103] NULL, - -- ETA[position][time] - -- Urg(L)/Alr(L)/Resp(N) - dM104PositionTime [104] PositionTime, + -- ETA[position][time] + -- Urg(L)/Alr(L)/Resp(N) + dM104PositionTime [104] PositionTime, - -- ALTERNATE AERODROME[airport] - -- Urg(L)/Alr(L)/Resp(N) - dM105Airport [105] Airport, + -- ALTERNATE AERODROME[airport] + -- Urg(L)/Alr(L)/Resp(N) + dM105Airport [105] Airport, - -- PREFERRED LEVEL[level] - -- Urg(L)/Alr(L)/Resp(N) - dM106Level [106] Level, + -- PREFERRED LEVEL[level] + -- Urg(L)/Alr(L)/Resp(N) + dM106Level [106] Level, - -- NOT AUTHORIZED NEXT DATA AUTHORITY - -- Urg(L)/Alr(L)/Resp(N) - dM107NULL [107] NULL, + -- NOT AUTHORIZED NEXT DATA AUTHORITY + -- Urg(L)/Alr(L)/Resp(N) + dM107NULL [107] NULL, - -- DE-ICING COMPLETE - -- Urg(L)/Alr(L)/Resp(N) - dM108NULL [108] NULL, + -- DE-ICING COMPLETE + -- Urg(L)/Alr(L)/Resp(N) + dM108NULL [108] NULL, - -- TOP OF DESCENT [time] - -- Urg(L)/Alr(L)/Resp(N) - dM109Time [109] Time, + -- TOP OF DESCENT [time] + -- Urg(L)/Alr(L)/Resp(N) + dM109Time [109] Time, - -- TOP OF DESCENT [position] - -- Urg(L)/Alr(L)/Resp(N) - dM110Position [110] Position, + -- TOP OF DESCENT [position] + -- Urg(L)/Alr(L)/Resp(N) + dM110Position [110] Position, - -- TOP OF DESCENT [time] [position] - -- Urg(L)/Alr(L)/Resp(N) - dM111TimePosition [111] TimePosition, + -- TOP OF DESCENT [time] [position] + -- Urg(L)/Alr(L)/Resp(N) + dM111TimePosition [111] TimePosition, - -- SQUAWKING 7500 - -- Urg(U)/Alr(H)/Resp(N) - dM112NULL [112] NULL, + -- SQUAWKING 7500 + -- Urg(U)/Alr(H)/Resp(N) + dM112NULL [112] NULL, - -- [speedType] [speedType] [speedType] SPEED [speed] - -- Urg(N)/Alr(L)/Resp(N) - dM113SpeedTypeSpeedTypeSpeedTypeSpeed [113] SpeedTypeSpeedTypeSpeedTypeSpeed, + -- [speedType] [speedType] [speedType] SPEED [speed] + -- Urg(N)/Alr(L)/Resp(N) + dM113SpeedTypeSpeedTypeSpeedTypeSpeed [113] SpeedTypeSpeedTypeSpeedTypeSpeed, - ... + ... } AircraftAddress ::= BIT STRING (SIZE(24)) @@ -1720,8 +1716,8 @@ Airport ::= IA5String (SIZE (4)) Altimeter ::= CHOICE { - altimeterEnglish [0] AltimeterEnglish, - altimeterMetric [1] AltimeterMetric + altimeterEnglish [0] AltimeterEnglish, + altimeterMetric [1] AltimeterMetric } AltimeterEnglish ::= INTEGER (2200..3200) @@ -1736,54 +1732,54 @@ ATSRouteDesignator ::= IA5String (SIZE (2..7)) ATWAlongTrackWaypoint ::= SEQUENCE { - position [0] Position, - aTWDistance [1] ATWDistance, - speed [2] Speed OPTIONAL, - aTWLevels [3] ATWLevelSequence OPTIONAL + position [0] Position, + aTWDistance [1] ATWDistance, + speed [2] Speed OPTIONAL, + aTWLevels [3] ATWLevelSequence OPTIONAL } ATWLevel ::= SEQUENCE { - atw ATWLevelTolerance, - level Level + atw ATWLevelTolerance, + level Level } ATWLevelSequence ::= SEQUENCE SIZE (1..2) OF ATWLevel ATWLevelTolerance ::= ENUMERATED { - at (0), - atorabove (1), - atorbelow (2) + at (0), + atorabove (1), + atorbelow (2) } ATWDistance ::= SEQUENCE { - atwDistanceTolerance ATWDistanceTolerance, - distance Distance + atwDistanceTolerance ATWDistanceTolerance, + distance Distance } ATWDistanceTolerance ::= ENUMERATED { - plus (0), - minus (1) + plus (0), + minus (1) } ClearanceType ::= ENUMERATED { - noneSpecified (0), - approach (1), - departure (2), - further (3), - start-up (4), - pushback (5), - taxi (6), - take-off (7), - landing (8), - oceanic (9), - en-route (10), - downstream (11), - ... + noneSpecified (0), + approach (1), + departure (2), + further (3), + start-up (4), + pushback (5), + taxi (6), + take-off (7), + landing (8), + oceanic (9), + en-route (10), + downstream (11), + ... } Code ::= SEQUENCE SIZE (4) OF CodeOctalDigit @@ -1792,21 +1788,21 @@ CodeOctalDigit ::= INTEGER (0..7) ControlledTime ::= SEQUENCE { - time Time, - timeTolerance TimeTolerance + time Time, + timeTolerance TimeTolerance } Date ::= SEQUENCE { - year Year, - month Month, - day Day + year Year, + month Month, + day Day } DateTimeGroup ::= SEQUENCE { - date Date, - timehhmmss Timehhmmss + date Date, + timehhmmss Timehhmmss } Day ::= INTEGER (1..31) @@ -1817,8 +1813,8 @@ DegreeIncrement ::= INTEGER (1..20) Degrees ::= CHOICE { - degreesMagnetic [0] DegreesMagnetic, - degreesTrue [1] DegreesTrue + degreesMagnetic [0] DegreesMagnetic, + degreesTrue [1] DegreesTrue } DegreesMagnetic ::= INTEGER (1..360) @@ -1829,10 +1825,10 @@ DegreesTrue ::= INTEGER (1..360) DepartureClearance ::= SEQUENCE { - aircraftFlightIdentification [0] AircraftFlightIdentification, - clearanceLimit [1] Position, - flightInformation [2] FlightInformation OPTIONAL, - furtherInstructions [3] FurtherInstructions OPTIONAL + aircraftFlightIdentification [0] AircraftFlightIdentification, + clearanceLimit [1] Position, + flightInformation [2] FlightInformation OPTIONAL, + furtherInstructions [3] FurtherInstructions OPTIONAL } DepartureMinimumInterval ::= INTEGER (1..150) @@ -1840,104 +1836,104 @@ DepartureMinimumInterval ::= INTEGER (1..150) Direction ::= ENUMERATED { - left (0), - right (1), - eitherSide (2), - north (3), - south (4), - east (5), - west (6), - northEast (7), - northWest (8), - southEast (9), - southWest (10) + left (0), + right (1), + eitherSide (2), + north (3), + south (4), + east (5), + west (6), + northEast (7), + northWest (8), + southEast (9), + southWest (10) } DirectionDegrees ::= SEQUENCE { - direction Direction, - degrees Degrees + direction Direction, + degrees Degrees } Distance ::= CHOICE { - distanceNm [0] DistanceNm, - distanceKm [1] DistanceKm + distanceNm [0] DistanceNm, + distanceKm [1] DistanceKm } DistanceKm ::= INTEGER (0..8000) --- unit = Kilometer, Range (0..2000), resolution = 0.25 +-- unit = Kilometer, Range (0..2000), resolution = 0.25 DistanceNm ::= INTEGER (0..9999) --- unit = Nautical Mile, Range (0..999.9), resolution = 0.1 +-- unit = Nautical Mile, Range (0..999.9), resolution = 0.1 DistanceSpecified ::= CHOICE { - distanceSpecifiedNm [0] DistanceSpecifiedNm, - distanceSpecifiedKm [1] DistanceSpecifiedKm + distanceSpecifiedNm [0] DistanceSpecifiedNm, + distanceSpecifiedKm [1] DistanceSpecifiedKm } DistanceSpecifiedDirection ::= SEQUENCE { - distanceSpecified DistanceSpecified, - direction Direction + distanceSpecified DistanceSpecified, + direction Direction } DistanceSpecifiedDirectionTime ::= SEQUENCE { - distanceSpecifiedDirection DistanceSpecifiedDirection, - time Time + distanceSpecifiedDirection DistanceSpecifiedDirection, + time Time } DistanceSpecifiedKm ::= INTEGER (1..500) --- unit = Kilometer, Range (1..500), resolution = 1 +-- unit = Kilometer, Range (1..500), resolution = 1 DistanceSpecifiedNm ::= INTEGER (1..250) --- unit = Nautical Mile, Range (1..250), resolution = 1 +-- unit = Nautical Mile, Range (1..250), resolution = 1 ErrorInformation ::= ENUMERATED { - unrecognizedMsgReferenceNumber (0), - logicalAcknowledgmentNotAccepted (1), - insufficientResources (2), - invalidMessageElementCombination (3), - invalidMessageElement (4), - ... + unrecognizedMsgReferenceNumber (0), + logicalAcknowledgmentNotAccepted (1), + insufficientResources (2), + invalidMessageElementCombination (3), + invalidMessageElement (4), + ... } Facility ::= CHOICE{ - noFacility [0] NULL, - facilityDesignation [1] FacilityDesignation + noFacility [0] NULL, + facilityDesignation [1] FacilityDesignation } FacilityDesignation ::= IA5String (SIZE (4..8)) FacilityFunction ::= ENUMERATED { - center (0), - approach (1), - tower (2), - final (3), - groundControl (4), - clearanceDelivery (5), - departure (6), - control (7), - radio (8), - ... + center (0), + approach (1), + tower (2), + final (3), + groundControl (4), + clearanceDelivery (5), + departure (6), + control (7), + radio (8), + ... } FacilityDesignationAltimeter ::= SEQUENCE { - facilityDesignation FacilityDesignation, - altimeter Altimeter + facilityDesignation FacilityDesignation, + altimeter Altimeter } FacilityDesignationATISCode ::= SEQUENCE { - facilityDesignation FacilityDesignation, - aTISCode ATISCode + facilityDesignation FacilityDesignation, + aTISCode ATISCode } FacilityName ::= IA5String (SIZE (3..18)) @@ -1946,105 +1942,105 @@ Fix ::= IA5String (SIZE (1..5)) FixName ::= SEQUENCE { - name [0] Fix, - latlon [1] LatitudeLongitude OPTIONAL + name [0] Fix, + latlon [1] LatitudeLongitude OPTIONAL } FlightInformation ::= CHOICE { - routeOfFlight [0] RouteInformation, - levelsOfFlight [1] LevelsOfFlight, - routeAndLevels [2] RouteAndLevels + routeOfFlight [0] RouteInformation, + levelsOfFlight [1] LevelsOfFlight, + routeAndLevels [2] RouteAndLevels } FreeText ::= IA5String (SIZE (1..256)) Frequency ::= CHOICE { - frequencyhf [0] Frequencyhf, - frequencyvhf [1] Frequencyvhf, - frequencyuhf [2] Frequencyuhf, - frequencysatchannel [3] Frequencysatchannel + frequencyhf [0] Frequencyhf, + frequencyvhf [1] Frequencyvhf, + frequencyuhf [2] Frequencyuhf, + frequencysatchannel [3] Frequencysatchannel } Frequencyhf ::= INTEGER (2850..28000) --- unit = Kilohertz, Range (2850..28000), resolution = 1 +-- unit = Kilohertz, Range (2850..28000), resolution = 1 Frequencysatchannel ::= NumericString (SIZE (12)) --- Frequencysatchannel corresponds to a 12 digit telephone number +-- Frequencysatchannel corresponds to a 12 digit telephone number Frequencyuhf ::= INTEGER (9000..15999) --- unit = Megahertz, Range (225.000..399.975), resolution = 0.025 +-- unit = Megahertz, Range (225.000..399.975), resolution = 0.025 Frequencyvhf ::= INTEGER (23600..27398) --- unit = Megahertz, Range (118.000..136.990), resolution = 0.005 +-- unit = Megahertz, Range (118.000..136.990), resolution = 0.005 FurtherInstructions ::= SEQUENCE { - code [0] Code OPTIONAL, - frequencyDeparture [1] UnitNameFrequency OPTIONAL, - clearanceExpiryTime [2] Time OPTIONAL, - airportDeparture [3] Airport OPTIONAL, - airportDestination [4] Airport OPTIONAL, - timeDeparture [5] TimeDeparture OPTIONAL, - runwayDeparture [6] Runway OPTIONAL, - revisionNumber [7] RevisionNumber OPTIONAL, - aTISCode [8] ATISCode OPTIONAL + code [0] Code OPTIONAL, + frequencyDeparture [1] UnitNameFrequency OPTIONAL, + clearanceExpiryTime [2] Time OPTIONAL, + airportDeparture [3] Airport OPTIONAL, + airportDestination [4] Airport OPTIONAL, + timeDeparture [5] TimeDeparture OPTIONAL, + runwayDeparture [6] Runway OPTIONAL, + revisionNumber [7] RevisionNumber OPTIONAL, + aTISCode [8] ATISCode OPTIONAL } Holdatwaypoint ::= SEQUENCE { - position [0] Position, - holdatwaypointspeedlow [1] Speed OPTIONAL, - aTWlevel [2] ATWLevel OPTIONAL, - holdatwaypointspeedhigh [3] Speed OPTIONAL, - direction [4] Direction OPTIONAL, - degrees [5] Degrees OPTIONAL, - eFCtime [6] Time OPTIONAL, - legtype [7] LegType OPTIONAL + position [0] Position, + holdatwaypointspeedlow [1] Speed OPTIONAL, + aTWlevel [2] ATWLevel OPTIONAL, + holdatwaypointspeedhigh [3] Speed OPTIONAL, + direction [4] Direction OPTIONAL, + degrees [5] Degrees OPTIONAL, + eFCtime [6] Time OPTIONAL, + legtype [7] LegType OPTIONAL } HoldClearance ::= SEQUENCE { - position [0] Position, - level [1] Level, - degrees [2] Degrees, - direction [3] Direction, - legType [4] LegType OPTIONAL + position [0] Position, + level [1] Level, + degrees [2] Degrees, + direction [3] Direction, + legType [4] LegType OPTIONAL } Humidity ::= INTEGER (0..100) --- unit = Percent humidity, Range (0..100), resolution = 1 +-- unit = Percent humidity, Range (0..100), resolution = 1 InterceptCourseFrom ::= SEQUENCE { - fromSelection InterceptCourseFromSelection, - degrees Degrees + fromSelection InterceptCourseFromSelection, + degrees Degrees } InterceptCourseFromSelection ::= CHOICE { - publishedIdentifier [0] PublishedIdentifier, - latitudeLongitude [1] LatitudeLongitude, - placeBearingPlaceBearing [2] PlaceBearingPlaceBearing, - placeBearingDistance [3] PlaceBearingDistance + publishedIdentifier [0] PublishedIdentifier, + latitudeLongitude [1] LatitudeLongitude, + placeBearingPlaceBearing [2] PlaceBearingPlaceBearing, + placeBearingDistance [3] PlaceBearingDistance } Icing ::= ENUMERATED { - reserved (0), - light (1), - moderate (2), - severe (3) + reserved (0), + light (1), + moderate (2), + severe (3) } Latitude ::= SEQUENCE { - latitudeType LatitudeType, - latitudeDirection LatitudeDirection + latitudeType LatitudeType, + latitudeDirection LatitudeDirection } LatitudeDegrees ::= INTEGER (0..90000) @@ -2052,21 +2048,21 @@ LatitudeDegrees ::= INTEGER (0..90000) LatitudeDegreesMinutes ::= SEQUENCE { - latitudeWholeDegrees LatitudeWholeDegrees, - minutesLatLon MinutesLatLon + latitudeWholeDegrees LatitudeWholeDegrees, + minutesLatLon MinutesLatLon } LatitudeDegreesMinutesSeconds ::= SEQUENCE { - latitudeWholeDegrees LatitudeWholeDegrees, - latlonWholeMinutes LatLonWholeMinutes, - secondsLatLon SecondsLatLon + latitudeWholeDegrees LatitudeWholeDegrees, + latlonWholeMinutes LatLonWholeMinutes, + secondsLatLon SecondsLatLon } LatitudeDirection ::= ENUMERATED { - north (0), - south (1) + north (0), + south (1) } LatitudeWholeDegrees ::= INTEGER (0..89) @@ -2074,21 +2070,21 @@ LatitudeWholeDegrees ::= INTEGER (0..89) LatitudeLongitude ::= SEQUENCE { - latitude [0] Latitude OPTIONAL, - longitude [1] Longitude OPTIONAL + latitude [0] Latitude OPTIONAL, + longitude [1] Longitude OPTIONAL } LatitudeReportingPoints ::= SEQUENCE { - latitudeDirection LatitudeDirection, - latitudeDegrees LatitudeDegrees + latitudeDirection LatitudeDirection, + latitudeDegrees LatitudeDegrees } LatitudeType ::= CHOICE { - latitudeDegrees [0] LatitudeDegrees, - latitudeDegreesMinutes [1] LatitudeDegreesMinutes, - latitudeDMS [2] LatitudeDegreesMinutesSeconds + latitudeDegrees [0] LatitudeDegrees, + latitudeDegreesMinutes [1] LatitudeDegreesMinutes, + latitudeDMS [2] LatitudeDegreesMinutesSeconds } LatLonWholeMinutes ::= INTEGER (0..59) @@ -2096,14 +2092,14 @@ LatLonWholeMinutes ::= INTEGER (0..59) LatLonReportingPoints ::= CHOICE { - latitudeReportingPoints [0] LatitudeReportingPoints, - longitudeReportingPoints [1] LongitudeReportingPoints + latitudeReportingPoints [0] LatitudeReportingPoints, + longitudeReportingPoints [1] LongitudeReportingPoints } LegDistance ::= CHOICE { - legDistanceEnglish [0] LegDistanceEnglish, - legDistanceMetric [1] LegDistanceMetric + legDistanceEnglish [0] LegDistanceEnglish, + legDistanceMetric [1] LegDistanceMetric } LegDistanceEnglish ::= INTEGER (0..50) @@ -2117,14 +2113,14 @@ LegTime ::= INTEGER (0..10) LegType ::= CHOICE { - legDistance [0] LegDistance, - legTime [1] LegTime + legDistance [0] LegDistance, + legTime [1] LegTime } Level ::= CHOICE { - singleLevel [0] LevelType, - blockLevel [1] SEQUENCE SIZE (2) OF LevelType + singleLevel [0] LevelType, + blockLevel [1] SEQUENCE SIZE (2) OF LevelType } LevelFeet ::= INTEGER (-60..7000) @@ -2141,53 +2137,53 @@ LevelMeters ::= INTEGER (-30..25000) LevelPosition ::= SEQUENCE { - level Level, - position Position + level Level, + position Position } LevelProcedureName ::= SEQUENCE { - level Level, - procedureName ProcedureName + level Level, + procedureName ProcedureName } LevelsOfFlight ::= CHOICE { - level [0] Level, - procedureName [1] ProcedureName, - levelProcedureName [2] LevelProcedureName + level [0] Level, + procedureName [1] ProcedureName, + levelProcedureName [2] LevelProcedureName } LevelSpeed ::= SEQUENCE { - level Level, - speed SpeedSpeed + level Level, + speed SpeedSpeed } LevelSpeedSpeed ::= SEQUENCE { - level Level, - speeds SpeedSpeed + level Level, + speeds SpeedSpeed } LevelTime ::= SEQUENCE { - level Level, - time Time + level Level, + time Time } LevelType ::= CHOICE { - levelFeet [0] LevelFeet, - levelMeters [1] LevelMeters, - levelFlightLevel [2] LevelFlightLevel, - levelFlightLevelMetric [3] LevelFlightLevelMetric + levelFeet [0] LevelFeet, + levelMeters [1] LevelMeters, + levelFlightLevel [2] LevelFlightLevel, + levelFlightLevelMetric [3] LevelFlightLevelMetric } Longitude ::= SEQUENCE { - longitudeType LongitudeType, - longitudeDirection LongitudeDirection + longitudeType LongitudeType, + longitudeDirection LongitudeDirection } LongitudeDegrees ::= INTEGER (0..180000) @@ -2195,21 +2191,21 @@ LongitudeDegrees ::= INTEGER (0..180000) LongitudeDegreesMinutes ::= SEQUENCE { - longitudeWholeDegrees LongitudeWholeDegrees, - minutesLatLon MinutesLatLon + longitudeWholeDegrees LongitudeWholeDegrees, + minutesLatLon MinutesLatLon } LongitudeDegreesMinutesSeconds ::= SEQUENCE { - longitudeWholeDegrees LongitudeWholeDegrees, - latLonWholeMinutes LatLonWholeMinutes, - secondsLatLon SecondsLatLon + longitudeWholeDegrees LongitudeWholeDegrees, + latLonWholeMinutes LatLonWholeMinutes, + secondsLatLon SecondsLatLon } LongitudeDirection ::= ENUMERATED { - east (0), - west (1) + east (0), + west (1) } LongitudeWholeDegrees ::= INTEGER (0..179) @@ -2217,15 +2213,15 @@ LongitudeWholeDegrees ::= INTEGER (0..179) LongitudeReportingPoints ::= SEQUENCE { - longitudeDirection LongitudeDirection, - longitudeDegrees LongitudeDegrees + longitudeDirection LongitudeDirection, + longitudeDegrees LongitudeDegrees } LongitudeType ::= CHOICE { - longitudeDegrees [0] LongitudeDegrees, - longitudeDegreesMinutes [1] LongitudeDegreesMinutes, - longitudeDMS [2] LongitudeDegreesMinutesSeconds + longitudeDegrees [0] LongitudeDegrees, + longitudeDegreesMinutes [1] LongitudeDegreesMinutes, + longitudeDMS [2] LongitudeDegreesMinutesSeconds } MinutesLatLon ::= INTEGER (0..5999) @@ -2236,8 +2232,8 @@ Month ::= INTEGER (1..12) Navaid ::= SEQUENCE { - name [0] NavaidName, - latlon [1] LatitudeLongitude OPTIONAL + name [0] NavaidName, + latlon [1] LatitudeLongitude OPTIONAL } NavaidName ::= IA5String (SIZE (1..4)) @@ -2246,193 +2242,193 @@ PersonsOnBoard ::= INTEGER (1..1024) PlaceBearing ::= SEQUENCE { - publishedIdentifier PublishedIdentifier, - degrees Degrees + publishedIdentifier PublishedIdentifier, + degrees Degrees } PlaceBearingDistance ::= SEQUENCE { - publishedIdentifier PublishedIdentifier, - degrees Degrees, - distance Distance + publishedIdentifier PublishedIdentifier, + degrees Degrees, + distance Distance } PlaceBearingPlaceBearing ::= SEQUENCE SIZE (2) OF PlaceBearing Position ::= CHOICE { - fixName [0] FixName, - navaid [1] Navaid, - airport [2] Airport, - latitudeLongitude [3] LatitudeLongitude, - placeBearingDistance [4] PlaceBearingDistance + fixName [0] FixName, + navaid [1] Navaid, + airport [2] Airport, + latitudeLongitude [3] LatitudeLongitude, + placeBearingDistance [4] PlaceBearingDistance } PositionDegrees ::= SEQUENCE { - position Position, - degrees Degrees + position Position, + degrees Degrees } PositionDistanceSpecifiedDirection ::= SEQUENCE { - position Position, - distanceSpecifiedDirection DistanceSpecifiedDirection + position Position, + distanceSpecifiedDirection DistanceSpecifiedDirection } PositionLevel ::= SEQUENCE { - position Position, - level Level + position Position, + level Level } PositionLevelLevel ::= SEQUENCE { - position Position, - levels LevelLevel + position Position, + levels LevelLevel } PositionLevelSpeed ::= SEQUENCE { - positionlevel PositionLevel, - speed Speed + positionlevel PositionLevel, + speed Speed } PositionPosition ::= SEQUENCE SIZE (2) OF Position PositionProcedureName ::= SEQUENCE { - position Position, - procedureName ProcedureName + position Position, + procedureName ProcedureName } PositionReport ::= SEQUENCE { - positioncurrent [0] Position, - timeatpositioncurrent [1] Time, - level [2] Level, - fixnext [3] Position OPTIONAL, - timeetaatfixnext [4] Time OPTIONAL, - fixnextplusone [5] Position OPTIONAL, - timeetaatdestination [6] Time OPTIONAL, - remainingFuel [7] RemainingFuel OPTIONAL, - temperature [8] Temperature OPTIONAL, - winds [9] Winds OPTIONAL, - turbulence [10] Turbulence OPTIONAL, - icing [11] Icing OPTIONAL, - speed [12] Speed OPTIONAL, - speedground [13] SpeedGround OPTIONAL, - verticalChange [14] VerticalChange OPTIONAL, - trackAngle [15] Degrees OPTIONAL, - heading [16] Degrees OPTIONAL, - distance [17] Distance OPTIONAL, - humidity [18] Humidity OPTIONAL, - reportedWaypointPosition[19] Position OPTIONAL, - reportedWaypointTime [20] Time OPTIONAL, - reportedWaypointLevel [21] Level OPTIONAL + positioncurrent [0] Position, + timeatpositioncurrent [1] Time, + level [2] Level, + fixnext [3] Position OPTIONAL, + timeetaatfixnext [4] Time OPTIONAL, + fixnextplusone [5] Position OPTIONAL, + timeetaatdestination [6] Time OPTIONAL, + remainingFuel [7] RemainingFuel OPTIONAL, + temperature [8] Temperature OPTIONAL, + winds [9] Winds OPTIONAL, + turbulence [10] Turbulence OPTIONAL, + icing [11] Icing OPTIONAL, + speed [12] Speed OPTIONAL, + speedground [13] SpeedGround OPTIONAL, + verticalChange [14] VerticalChange OPTIONAL, + trackAngle [15] Degrees OPTIONAL, + heading [16] Degrees OPTIONAL, + distance [17] Distance OPTIONAL, + humidity [18] Humidity OPTIONAL, + reportedWaypointPosition[19] Position OPTIONAL, + reportedWaypointTime [20] Time OPTIONAL, + reportedWaypointLevel [21] Level OPTIONAL } PositionRouteClearanceIndex ::= SEQUENCE { - position Position, - routeClearanceIndex RouteClearanceIndex + position Position, + routeClearanceIndex RouteClearanceIndex } PositionSpeed ::= SEQUENCE { - position Position, - speed Speed + position Position, + speed Speed } PositionSpeedSpeed ::= SEQUENCE { - position Position, - speeds SpeedSpeed + position Position, + speeds SpeedSpeed } PositionTime ::= SEQUENCE { - position Position, - time Time + position Position, + time Time } PositionTimeLevel ::= SEQUENCE { - positionTime PositionTime, - level Level + positionTime PositionTime, + level Level } PositionTimeTime ::= SEQUENCE { - position Position, - times TimeTime + position Position, + times TimeTime } PositionUnitNameFrequency ::= SEQUENCE { - position Position, - unitname UnitName, - frequency Frequency + position Position, + unitname UnitName, + frequency Frequency } Procedure ::= IA5String (SIZE (1..20)) ProcedureName ::= SEQUENCE { - type [0] ProcedureType, - procedure [1] Procedure, - transition [2] ProcedureTransition OPTIONAL + type [0] ProcedureType, + procedure [1] Procedure, + transition [2] ProcedureTransition OPTIONAL } ProcedureTransition ::= IA5String (SIZE (1..5)) ProcedureType ::= ENUMERATED { - arrival (0), - approach (1), - departure (2) + arrival (0), + approach (1), + departure (2) } PublishedIdentifier ::= CHOICE { - fixName [0] FixName, - navaid [1] Navaid + fixName [0] FixName, + navaid [1] Navaid } RemainingFuel ::= Time RemainingFuelPersonsOnBoard ::= SEQUENCE { - remainingFuel RemainingFuel, - personsOnBoard PersonsOnBoard + remainingFuel RemainingFuel, + personsOnBoard PersonsOnBoard } ReportingPoints ::= SEQUENCE { - latLonReportingPoints [0] LatLonReportingPoints, - degreeIncrement [1] DegreeIncrement OPTIONAL + latLonReportingPoints [0] LatLonReportingPoints, + degreeIncrement [1] DegreeIncrement OPTIONAL } RevisionNumber ::= INTEGER (1..16) RouteAndLevels ::= SEQUENCE { - routeOfFlight RouteInformation, - levelsOfFlight LevelsOfFlight + routeOfFlight RouteInformation, + levelsOfFlight LevelsOfFlight } RouteClearance ::= SEQUENCE { - airportDeparture [0] Airport OPTIONAL, - airportDestination [1] Airport OPTIONAL, - runwayDeparture [2] Runway OPTIONAL, - procedureDeparture [3] ProcedureName OPTIONAL, - runwayArrival [4] Runway OPTIONAL, - procedureApproach [5] ProcedureName OPTIONAL, - procedureArrival [6] ProcedureName OPTIONAL, - routeInformations [7] SEQUENCE SIZE (1..128) OF RouteInformation OPTIONAL, - routeInformationAdditional [8] RouteInformationAdditional OPTIONAL + airportDeparture [0] Airport OPTIONAL, + airportDestination [1] Airport OPTIONAL, + runwayDeparture [2] Runway OPTIONAL, + procedureDeparture [3] ProcedureName OPTIONAL, + runwayArrival [4] Runway OPTIONAL, + procedureApproach [5] ProcedureName OPTIONAL, + procedureArrival [6] ProcedureName OPTIONAL, + routeInformations [7] SEQUENCE SIZE (1..128) OF RouteInformation OPTIONAL, + routeInformationAdditional [8] RouteInformationAdditional OPTIONAL } RouteClearanceIndex ::= INTEGER (1..2) @@ -2443,35 +2439,35 @@ RouteClearanceIndex ::= INTEGER (1..2) RouteInformation ::= CHOICE { - publishedIdentifier [0] PublishedIdentifier, - latitudeLongitude [1] LatitudeLongitude, - placeBearingPlaceBearing [2] PlaceBearingPlaceBearing, - placeBearingDistance [3] PlaceBearingDistance, - aTSRouteDesignator [4] ATSRouteDesignator + publishedIdentifier [0] PublishedIdentifier, + latitudeLongitude [1] LatitudeLongitude, + placeBearingPlaceBearing [2] PlaceBearingPlaceBearing, + placeBearingDistance [3] PlaceBearingDistance, + aTSRouteDesignator [4] ATSRouteDesignator } RouteInformationAdditional ::= SEQUENCE { - aTWAlongTrackWaypoints [0] SEQUENCE SIZE (1..8) OF ATWAlongTrackWaypoint OPTIONAL, - reportingpoints [1] ReportingPoints OPTIONAL, - interceptCourseFroms [2] SEQUENCE SIZE (1..4) OF InterceptCourseFrom OPTIONAL, - holdAtWaypoints [3] SEQUENCE SIZE (1..8) OF Holdatwaypoint OPTIONAL, - waypointSpeedLevels [4] SEQUENCE SIZE (1..32) OF WaypointSpeedLevel OPTIONAL, - rTARequiredTimeArrivals [5] SEQUENCE SIZE (1..32) OF RTARequiredTimeArrival OPTIONAL + aTWAlongTrackWaypoints [0] SEQUENCE SIZE (1..8) OF ATWAlongTrackWaypoint OPTIONAL, + reportingpoints [1] ReportingPoints OPTIONAL, + interceptCourseFroms [2] SEQUENCE SIZE (1..4) OF InterceptCourseFrom OPTIONAL, + holdAtWaypoints [3] SEQUENCE SIZE (1..8) OF Holdatwaypoint OPTIONAL, + waypointSpeedLevels [4] SEQUENCE SIZE (1..32) OF WaypointSpeedLevel OPTIONAL, + rTARequiredTimeArrivals [5] SEQUENCE SIZE (1..32) OF RTARequiredTimeArrival OPTIONAL } RTARequiredTimeArrival ::= SEQUENCE { - position [0] Position, - rTATime [1] RTATime, - rTATolerance [2] RTATolerance OPTIONAL + position [0] Position, + rTATime [1] RTATime, + rTATolerance [2] RTATolerance OPTIONAL } RTATime ::= SEQUENCE { - time Time, - timeTolerance TimeTolerance + time Time, + timeTolerance TimeTolerance } RTATolerance ::= INTEGER (1..150) @@ -2479,30 +2475,30 @@ RTATolerance ::= INTEGER (1..150) Runway ::= SEQUENCE { - direction RunwayDirection, - configuration RunwayConfiguration + direction RunwayDirection, + configuration RunwayConfiguration } RunwayDirection ::= INTEGER (1..36) RunwayConfiguration ::= ENUMERATED { - left (0), - right (1), - center (2), - none (3) + left (0), + right (1), + center (2), + none (3) } RunwayRVR ::= SEQUENCE { - runway Runway, - rVR RVR + runway Runway, + rVR RVR } RVR ::= CHOICE { - rVRFeet [0] RVRFeet, - rVRMeters [1] RVRMeters + rVRFeet [0] RVRFeet, + rVRMeters [1] RVRMeters } RVRFeet ::= INTEGER (0..6100) @@ -2516,13 +2512,13 @@ SecondsLatLon ::= INTEGER (0..59) Speed ::= CHOICE { - speedIndicated [0] SpeedIndicated, - speedIndicatedMetric [1] SpeedIndicatedMetric, - speedTrue [2] SpeedTrue, - speedTrueMetric [3] SpeedTrueMetric, - speedGround [4] SpeedGround, - speedGroundMetric [5] SpeedGroundMetric, - speedMach [6] SpeedMach + speedIndicated [0] SpeedIndicated, + speedIndicatedMetric [1] SpeedIndicatedMetric, + speedTrue [2] SpeedTrue, + speedTrueMetric [3] SpeedTrueMetric, + speedGround [4] SpeedGround, + speedGroundMetric [5] SpeedGroundMetric, + speedMach [6] SpeedMach } SpeedIndicated ::= INTEGER (0..400) @@ -2543,8 +2539,8 @@ SpeedMach ::= INTEGER (500..4000) SpeedSpeed ::= SEQUENCE SIZE (2) OF Speed SpeedTime ::= SEQUENCE { - speed Speed, - time Time + speed Speed, + time Time } SpeedTrue ::= INTEGER (0..2000) @@ -2555,24 +2551,24 @@ SpeedTrueMetric ::= INTEGER (0..4000) SpeedType ::= ENUMERATED { - noneSpecified (0), - indicated (1), - true (2), - ground (3), - mach (4), - approach (5), - cruise (6), - minimum (7), - maximum (8), - ... + noneSpecified (0), + indicated (1), + true (2), + ground (3), + mach (4), + approach (5), + cruise (6), + minimum (7), + maximum (8), + ... } SpeedTypeSpeedTypeSpeedType ::= SEQUENCE SIZE (3) OF SpeedType SpeedTypeSpeedTypeSpeedTypeSpeed ::= SEQUENCE { - speedTypes SpeedTypeSpeedTypeSpeedType, - speed Speed + speedTypes SpeedTypeSpeedTypeSpeedType, + speed Speed } Temperature ::= INTEGER (-100..100) @@ -2580,43 +2576,43 @@ Temperature ::= INTEGER (-100..100) Time ::= SEQUENCE { - hours TimeHours, - minutes TimeMinutes + hours TimeHours, + minutes TimeMinutes } TimeLevel ::= SEQUENCE { - time Time, - level Level + time Time, + level Level } TimeDeparture ::= SEQUENCE { - timeDepartureAllocated [0] Time OPTIONAL, - timeDepartureControlled [1] ControlledTime OPTIONAL, - timeDepartureClearanceExpected [2] Time OPTIONAL, - departureMinimumInterval [3] DepartureMinimumInterval OPTIONAL + timeDepartureAllocated [0] Time OPTIONAL, + timeDepartureControlled [1] ControlledTime OPTIONAL, + timeDepartureClearanceExpected [2] Time OPTIONAL, + departureMinimumInterval [3] DepartureMinimumInterval OPTIONAL } TimeDistanceSpecifiedDirection ::= SEQUENCE { - time Time, - distanceSpecifiedDirection DistanceSpecifiedDirection + time Time, + distanceSpecifiedDirection DistanceSpecifiedDirection } TimeDistanceToFromPosition ::= SEQUENCE { - time Time, - distance Distance, - tofrom ToFrom, - position Position + time Time, + distance Distance, + tofrom ToFrom, + position Position } Timehhmmss ::= SEQUENCE { - hoursminutes Time, - seconds TimeSeconds + hoursminutes Time, + seconds TimeSeconds } TimeHours ::= INTEGER (0..23) @@ -2624,9 +2620,9 @@ TimeHours ::= INTEGER (0..23) TimeUnitNameFrequency ::= SEQUENCE { - time Time, - unitName UnitName, - frequency Frequency + time Time, + unitName UnitName, + frequency Frequency } TimeMinutes ::= INTEGER (0..59) @@ -2634,20 +2630,20 @@ TimeMinutes ::= INTEGER (0..59) TimePosition ::= SEQUENCE { - time Time, - position Position + time Time, + position Position } TimePositionLevel ::= SEQUENCE { - timeposition TimePosition, - level Level + timeposition TimePosition, + level Level } TimePositionLevelSpeed ::= SEQUENCE { - timeposition TimePosition, - levelspeed LevelSpeed + timeposition TimePosition, + levelspeed LevelSpeed } TimeSeconds ::= INTEGER (0..59) @@ -2655,92 +2651,92 @@ TimeSeconds ::= INTEGER (0..59) TimeSpeed ::= SEQUENCE { - time Time, - speed Speed + time Time, + speed Speed } TimeSpeedSpeed ::= SEQUENCE { - time Time, - speedspeed SpeedSpeed + time Time, + speedspeed SpeedSpeed } TimeTime ::= SEQUENCE SIZE (2) OF Time TimeToFromPosition ::= SEQUENCE { - time Time, - tofrom ToFrom, - position Position + time Time, + tofrom ToFrom, + position Position } TimeTolerance ::= ENUMERATED { - at (0), - atorafter (1), - atorbefore(2) + at (0), + atorafter (1), + atorbefore(2) } ToFrom ::= ENUMERATED { - to (0), - from (1) + to (0), + from (1) } ToFromPosition ::= SEQUENCE { - toFrom ToFrom, - position Position + toFrom ToFrom, + position Position } TrafficType ::= ENUMERATED { - noneSpecified (0), - oppositeDirection (1), - sameDirection (2), - converging (3), - crossing (4), - diverging (5), - ... + noneSpecified (0), + oppositeDirection (1), + sameDirection (2), + converging (3), + crossing (4), + diverging (5), + ... } Turbulence ::= ENUMERATED { - light (0), - moderate (1), - severe (2) + light (0), + moderate (1), + severe (2) } UnitName ::= SEQUENCE { - facilityDesignation [0] FacilityDesignation, - facilityName [1] FacilityName OPTIONAL, - facilityFunction [2] FacilityFunction + facilityDesignation [0] FacilityDesignation, + facilityName [1] FacilityName OPTIONAL, + facilityFunction [2] FacilityFunction } UnitNameFrequency ::= SEQUENCE { - unitName UnitName, - frequency Frequency + unitName UnitName, + frequency Frequency } VersionNumber ::= INTEGER (0..15) VerticalChange ::= SEQUENCE { - direction VerticalDirection, - rate VerticalRate + direction VerticalDirection, + rate VerticalRate } VerticalDirection ::= ENUMERATED { - up (0), - down (1) + up (0), + down (1) } VerticalRate ::= CHOICE { - verticalRateEnglish [0] VerticalRateEnglish, - verticalRateMetric [1] VerticalRateMetric + verticalRateEnglish [0] VerticalRateEnglish, + verticalRateMetric [1] VerticalRateMetric } VerticalRateEnglish ::= INTEGER (0..3000) @@ -2751,9 +2747,9 @@ VerticalRateMetric ::= INTEGER (0..1000) WaypointSpeedLevel ::= SEQUENCE { - position [0] Position, - speed [1] Speed OPTIONAL, - aTWLevels [2] ATWLevelSequence OPTIONAL + position [0] Position, + speed [1] Speed OPTIONAL, + aTWLevels [2] ATWLevelSequence OPTIONAL } WindDirection ::= INTEGER (1..360) @@ -2761,14 +2757,14 @@ WindDirection ::= INTEGER (1..360) Winds ::= SEQUENCE { - direction WindDirection, - speed WindSpeed + direction WindDirection, + speed WindSpeed } WindSpeed ::= CHOICE { - windSpeedEnglish [0] WindSpeedEnglish, - windSpeedMetric [1] WindSpeedMetric + windSpeedEnglish [0] WindSpeedEnglish, + windSpeedMetric [1] WindSpeedMetric } WindSpeedEnglish ::= INTEGER (0..255) @@ -2787,11 +2783,11 @@ END -- Editor modelines - http://www.wireshark.org/tools/modelines.html -- -- Local variables: --- c-basic-offset: 2 --- tab-width: 2 --- indent-tabs-mode: t +-- c-basic-offset: 4 +-- tab-width: 8 +-- indent-tabs-mode: nil -- End: -- --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: +-- vi: set shiftwidth=4 tabstop=8 expandtab: +-- :indentSize=4:tabSize=8:noTabs=true: -- diff --git a/asn1/atn-cpdlc/atn-cpdlc.cnf b/asn1/atn-cpdlc/atn-cpdlc.cnf index b1ef6efb53..f9a16b8821 100644 --- a/asn1/atn-cpdlc/atn-cpdlc.cnf +++ b/asn1/atn-cpdlc/atn-cpdlc.cnf @@ -1,7 +1,3 @@ -# c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: - #.MODULE_IMPORT #.END @@ -13,126 +9,126 @@ #.PDU_NEW AircraftPDUs - GroundPDUs - ProtectedAircraftPDUs - ProtectedGroundPDUs + GroundPDUs + ProtectedAircraftPDUs + ProtectedGroundPDUs #.END #.FIELD_RENAME -AircraftPDUs/send aircraftpdus_send -GroundPDUs/send groundpdus_send -ATCUplinkMessageData/constrainedData atcuplinkmessagedata_constraineddata -ATCDownlinkMessageData/constrainedData atcdownlinkmessagedata_constraineddata -ATCDownlinkMessageData/elementIds/_item atcdownlinkmessagedata_elementids_item -ATCUplinkMessageData/elementIds/_item atcuplinkmessagedata_elementids_item -ATCDownlinkMessageData/elementIds atcdownlinkmessagedata_elementids -ATCUplinkMessageData/elementIds atcuplinkmessagedata_elementids -ATCUplinkMessage/messageData atcuplinkmessage_messagedata -ATCDownlinkMessage/messageData atcdownlinkmessage_messagedata +AircraftPDUs/send aircraftpdus_send +GroundPDUs/send groundpdus_send +ATCUplinkMessageData/constrainedData atcuplinkmessagedata_constraineddata +ATCDownlinkMessageData/constrainedData atcdownlinkmessagedata_constraineddata +ATCDownlinkMessageData/elementIds/_item atcdownlinkmessagedata_elementids_item +ATCUplinkMessageData/elementIds/_item atcuplinkmessagedata_elementids_item +ATCDownlinkMessageData/elementIds atcdownlinkmessagedata_elementids +ATCUplinkMessageData/elementIds atcuplinkmessagedata_elementids +ATCUplinkMessage/messageData atcuplinkmessage_messagedata +ATCDownlinkMessage/messageData atcdownlinkmessage_messagedata Runway/direction runway_direction -Winds/direction winds_direction -DirectionDegrees/direction direction -DistanceSpecifiedDirection/direction direction -Holdatwaypoint/direction direction -HoldClearance/direction direction -VerticalChange/direction vertical_direction -FixName/name fixname_name -Navaid/name navaid_name -Winds/speed winds_speed -LevelSpeed/speed levelspeed_speed -ProtectedGroundPDUs/abortProvider pmcpdlcproviderabortreason +Winds/direction winds_direction +DirectionDegrees/direction direction +DistanceSpecifiedDirection/direction direction +Holdatwaypoint/direction direction +HoldClearance/direction direction +VerticalChange/direction vertical_direction +FixName/name fixname_name +Navaid/name navaid_name +Winds/speed winds_speed +LevelSpeed/speed levelspeed_speed +ProtectedGroundPDUs/abortProvider pmcpdlcproviderabortreason ProtectedAircraftPDUs/abortProvider pmcpdlcproviderabortreason -ProtectedGroundPDUs/abortUser pmcpdlcuserabortreason -ProtectedAircraftPDUs/abortUser pmcpdlcuserabortreason -ProtectedStartDownMessage/mode protectedmode -ProtectedGroundPDUs/send protecteduplinkmessage -ProtectedStartDownMessage/startDownlinkMessage protecteddownlinkmessage -ProtectedGroundPDUs/startup protecteduplinkmessage -ProtectedAircraftPDUs/startdown protectedstartDownmessage +ProtectedGroundPDUs/abortUser pmcpdlcuserabortreason +ProtectedAircraftPDUs/abortUser pmcpdlcuserabortreason +ProtectedStartDownMessage/mode protectedmode +ProtectedGroundPDUs/send protecteduplinkmessage +ProtectedStartDownMessage/startDownlinkMessage protecteddownlinkmessage +ProtectedGroundPDUs/startup protecteduplinkmessage +ProtectedAircraftPDUs/startdown protectedstartDownmessage #.END #.FN_BODY CPDLCMessage - tvbuff_t *tvb_usr = NULL; + tvbuff_t *tvb_usr = NULL; - offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &tvb_usr, NULL); + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &tvb_usr, NULL); - if (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; - } - } + if (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; + } + } #.END #.FN_BODY AlgorithmIdentifier - proto_tree *top_tree=NULL; + proto_tree *top_tree=NULL; - offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, top_tree, NULL); + offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, top_tree, NULL); #.END #.FN_BODY AircraftFlightIdentification - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 8, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 8, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY Airport - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 4, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 4, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY FacilityDesignation - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 8, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,4, 8, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY FreeText - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 256, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 256, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY NavaidName - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 4, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 4, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY Procedure - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 20, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 20, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY ProcedureTransition - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY Fix - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 5, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY ATISCode - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 1, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,1, 1, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY ATSRouteDesignator - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 7, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,2, 7, FALSE, ia5alpha , 127, NULL); #.END #.FN_BODY FacilityName - offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,3, 18, FALSE, ia5alpha , 127, NULL); + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,3, 18, FALSE, ia5alpha , 127, NULL); #.END # # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: -# c-basic-offset: 2 -# tab-width: 2 -# indent-tabs-mode: t +# c-basic-offset: 4 +# tab-width: 8 +# indent-tabs-mode: nil # End: # -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: +# vi: set shiftwidth=4 tabstop=8 expandtab: +# :indentSize=4:tabSize=8:noTabs=true: # diff --git a/asn1/atn-cpdlc/packet-atn-cpdlc-template.c b/asn1/atn-cpdlc/packet-atn-cpdlc-template.c index 5db061e3d3..c08071ceb3 100644 --- a/asn1/atn-cpdlc/packet-atn-cpdlc-template.c +++ b/asn1/atn-cpdlc/packet-atn-cpdlc-template.c @@ -1,8 +1,3 @@ -/* 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 * Copyright 2013 @@ -42,9 +37,9 @@ /* 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. + 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" @@ -65,25 +60,25 @@ static const char *object_identifier_id; /* forward declarations */ static int dissect_GroundPDUs_PDU( - tvbuff_t *tvb _U_, - packet_info *pinfo _U_, - proto_tree *tree _U_, - void *data _U_); + tvbuff_t *tvb _U_, + packet_info *pinfo _U_, + proto_tree *tree _U_, + void *data _U_); static int dissect_AircraftPDUs_PDU( - tvbuff_t *tvb _U_, - packet_info *pinfo _U_, - proto_tree *tree _U_, - void *data _U_); + tvbuff_t *tvb _U_, + packet_info *pinfo _U_, + proto_tree *tree _U_, + void *data _U_); static int dissect_ProtectedGroundPDUs_PDU( - tvbuff_t *tvb _U_, - packet_info *pinfo _U_, - proto_tree *tree _U_, - void *data _U_); + tvbuff_t *tvb _U_, + packet_info *pinfo _U_, + proto_tree *tree _U_, + void *data _U_); static int dissect_ProtectedAircraftPDUs_PDU( - tvbuff_t *tvb _U_, - packet_info *pinfo _U_, - proto_tree *tree _U_, - void *data _U_); + tvbuff_t *tvb _U_, + packet_info *pinfo _U_, + proto_tree *tree _U_, + void *data _U_); #include "packet-atn-cpdlc-hf.c" @@ -98,206 +93,206 @@ static int proto_atn_cpdlc = -1; static int dissect_atn_cpdlc( - tvbuff_t *tvb, - packet_info *pinfo, - proto_tree *tree, - void *data _U_) + 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_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; } - - atn_cpdlc_tree = proto_tree_add_subtree( - tree, tvb, 0, -1, ett_atn_cpdlc, NULL, - ATN_CPDLC_PROTO ); - - 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, NULL); - }else { /* downlink PDU's = Aircraft PDU's */ - dissect_ProtectedAircraftPDUs_PDU( - tvb, - pinfo, - atn_cpdlc_tree, NULL); - } - break; - case cpdlc: - if( check_heur_msg_type(pinfo) == um ) { - /* uplink PDU's = Ground PDU's */ - dissect_GroundPDUs_PDU( - tvb, - pinfo, - atn_cpdlc_tree, NULL); - }else { /* downlink PDU's = Aircraft PDU's */ - dissect_AircraftPDUs_PDU( - tvb, - pinfo, - atn_cpdlc_tree, NULL); - } - break; - default: - break; - } - return tvb_reported_length_remaining(tvb, 0); + /* 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_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; } + + atn_cpdlc_tree = proto_tree_add_subtree( + tree, tvb, 0, -1, ett_atn_cpdlc, NULL, + ATN_CPDLC_PROTO ); + + 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, NULL); + }else { /* downlink PDU's = Aircraft PDU's */ + dissect_ProtectedAircraftPDUs_PDU( + tvb, + pinfo, + atn_cpdlc_tree, NULL); + } + break; + case cpdlc: + if( check_heur_msg_type(pinfo) == um ) { + /* uplink PDU's = Ground PDU's */ + dissect_GroundPDUs_PDU( + tvb, + pinfo, + atn_cpdlc_tree, NULL); + }else { /* downlink PDU's = Aircraft PDU's */ + dissect_AircraftPDUs_PDU( + tvb, + pinfo, + atn_cpdlc_tree, NULL); + } + 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_) + tvbuff_t *tvb, + packet_info *pinfo, + proto_tree *tree, + void *data _U_) { - atn_conversation_t *atn_cv = NULL; - volatile gboolean is_atn_cpdlc = FALSE; - volatile gboolean is_pm = FALSE; - int type; - - type = check_heur_msg_type(pinfo); - - switch(type){ - case um: - TRY { - dissect_ProtectedGroundPDUs_PDU(tvb, pinfo, NULL, NULL); - is_atn_cpdlc = TRUE; - is_pm = TRUE;} - CATCH_ALL{ - is_atn_cpdlc = FALSE; - is_pm = FALSE;} - ENDTRY; - if (is_atn_cpdlc) { - break; - } - TRY { - dissect_GroundPDUs_PDU(tvb, pinfo, NULL, NULL); - is_pm = FALSE; - is_atn_cpdlc = TRUE;} - CATCH_ALL{ - is_atn_cpdlc = FALSE; - is_pm = FALSE;} - ENDTRY; - break; - case dm: - TRY { - dissect_ProtectedAircraftPDUs_PDU(tvb, pinfo, NULL, NULL); - is_atn_cpdlc = TRUE; - is_pm = TRUE;} - CATCH_ALL { - is_atn_cpdlc = FALSE; - is_pm = FALSE; } - ENDTRY; - if (is_atn_cpdlc) { - break; - } - TRY{ - dissect_AircraftPDUs_PDU(tvb, pinfo, NULL, NULL); - is_atn_cpdlc = TRUE; - is_pm = FALSE;} - 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; + atn_conversation_t *atn_cv = NULL; + volatile gboolean is_atn_cpdlc = FALSE; + volatile gboolean is_pm = FALSE; + int type; + + type = check_heur_msg_type(pinfo); + + switch(type){ + case um: + TRY { + dissect_ProtectedGroundPDUs_PDU(tvb, pinfo, NULL, NULL); + is_atn_cpdlc = TRUE; + is_pm = TRUE;} + CATCH_ALL{ + is_atn_cpdlc = FALSE; + is_pm = FALSE;} + ENDTRY; + if (is_atn_cpdlc) { + break; + } + TRY { + dissect_GroundPDUs_PDU(tvb, pinfo, NULL, NULL); + is_pm = FALSE; + is_atn_cpdlc = TRUE;} + CATCH_ALL{ + is_atn_cpdlc = FALSE; + is_pm = FALSE;} + ENDTRY; + break; + case dm: + TRY { + dissect_ProtectedAircraftPDUs_PDU(tvb, pinfo, NULL, NULL); + is_atn_cpdlc = TRUE; + is_pm = TRUE;} + CATCH_ALL { + is_atn_cpdlc = FALSE; + is_pm = FALSE; } + ENDTRY; + if (is_atn_cpdlc) { + break; + } + TRY{ + dissect_AircraftPDUs_PDU(tvb, pinfo, NULL, NULL); + is_atn_cpdlc = TRUE; + is_pm = FALSE;} + 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; } @@ -305,56 +300,55 @@ dissect_atn_cpdlc_heur( void proto_register_atn_cpdlc (void) { static hf_register_info hf_atn_cpdlc[] = { - #include "packet-atn-cpdlc-hfarr.c" - }; - - static gint *ett[] = { - #include "packet-atn-cpdlc-ettarr.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); + #include "packet-atn-cpdlc-hfarr.c" + }; + + static gint *ett[] = { + #include "packet-atn-cpdlc-ettarr.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, - "ATN-CPDLC over ATN-ULCS", - "atn-cpdlc-ulcs", - proto_atn_cpdlc, HEURISTIC_ENABLE); + /* add session dissector to atn dissector list dissector list*/ + heur_dissector_add( + "atn-ulcs", + dissect_atn_cpdlc_heur, + "ATN-CPDLC over ATN-ULCS", + "atn-cpdlc-ulcs", + proto_atn_cpdlc, HEURISTIC_ENABLE); } - /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: - * c-basic-offset: 2 - * tab-width: 2 - * indent-tabs-mode: t + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=2 tabstop=2 noexpandtab: - * :indentSize=2:tabSize=2:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ diff --git a/asn1/atn-ulcs/atn-ulcs.asn b/asn1/atn-ulcs/atn-ulcs.asn index 92a3a1a7e8..8aad7b97e3 100644 --- a/asn1/atn-ulcs/atn-ulcs.asn +++ b/asn1/atn-ulcs/atn-ulcs.asn @@ -1,46 +1,42 @@ --- c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: - -- File: atn-ulcs.asn -- Sub-Volume IV ASN.1 reference definitions for ICAO Doc. 9705, -- Second Edition -- Version 1.1, 03 Oct 2001 --- The majority of the ULCS protocol definitions are specified in the ULCS +-- The majority of the ULCS protocol definitions are specified in the ULCS -- Technical Provisions by reference to ISO/IEC Standards and/or ITU-T --- Recommendations. The ASN.1 definitions are reproduced here for ease of --- reference and to allow explanatory annotations to be added. In the case of --- any discrepancy between the definitions here and the corresponding --- definitions defined in or referenced by the ULCS Technical Provisions, +-- Recommendations. The ASN.1 definitions are reproduced here for ease of +-- reference and to allow explanatory annotations to be added. In the case of +-- any discrepancy between the definitions here and the corresponding +-- definitions defined in or referenced by the ULCS Technical Provisions, -- the latter are assumed to take precedence. -- The following ASN.1 modules are included here: --- * General ULCS types. These are ASN.1 definitions used in the ULCS --- Technical Provisions, though there is no equivalent ASN.1 module --- defined there. The definitions in this module would generally be --- incorporated into a wider "user" protocol module if using ASN.1 automated --- tools. They are defined in a separate module here so that their syntax can +-- * General ULCS types. These are ASN.1 definitions used in the ULCS +-- Technical Provisions, though there is no equivalent ASN.1 module +-- defined there. The definitions in this module would generally be +-- incorporated into a wider "user" protocol module if using ASN.1 automated +-- tools. They are defined in a separate module here so that their syntax can -- easily be verified by an ASN.1 syntax checker. --- * Connection-oriented ACSE definitions. This is equivalent to the "ACSE-1" +-- * Connection-oriented ACSE definitions. This is equivalent to the "ACSE-1" -- module defined in the connection-oriented ACSE protocol standard. --- * Information Framework. This is an extract of relevant definitions from the --- InformationFramework module in the OSI standard "Directory : Models". The --- types defined in this module are not actively used in the ULCS protocol, but --- they are needed to satisfy IMPORTS statements in the ACSE definitions, and --- to allow certain CHOICE types in the ACSE definitions to be sorted correctly --- into canonical order. +-- * Information Framework. This is an extract of relevant definitions from the +-- InformationFramework module in the OSI standard "Directory : Models". The +-- types defined in this module are not actively used in the ULCS protocol, but +-- they are needed to satisfy IMPORTS statements in the ACSE definitions, and +-- to allow certain CHOICE types in the ACSE definitions to be sorted correctly +-- into canonical order. --- Note.- In the following definitions, the ASN.1 comment " X" indicates --- choice elements and optional elements in sequence types that are defined as --- "Excluded" in the ULCS profile. That is, implementations of ULCS provisions --- are never required to encode values for such elements (though they are --- required to indicate the absence of these elements in all instances, by means --- of bits in the appropriate PER preamble or choice index). +-- Note.- In the following definitions, the ASN.1 comment " X" indicates +-- choice elements and optional elements in sequence types that are defined as +-- "Excluded" in the ULCS profile. That is, implementations of ULCS provisions +-- are never required to encode values for such elements (though they are +-- required to indicate the absence of these elements in all instances, by means +-- of bits in the appropriate PER preamble or choice index). -- General ULCS types @@ -57,41 +53,41 @@ ULCS DEFINITIONS ::= BEGIN --Fully-encoded-data ::= SEQUENCE SIZE (1, ...) OF PDV-list Fully-encoded-data ::= SEQUENCE SIZE (1, ..., 2..MAX) OF PDV-list -- contains one or more presentation-data-value-list (PDV-list) values --- ATN commentary: The SIZE constraint above differs from the referenced --- standard, which specifies (in 8.2): +-- ATN commentary: The SIZE constraint above differs from the referenced +-- standard, which specifies (in 8.2): -- Fully-encoded-data ::= SEQUENCE SIZE (1, ..., 2..MAX) OF PDV-list. --- The ULCS provisions specify a simplified, but compatible, efficiency --- constraint as there will never be more than one element in the SEQUENCE OF --- for the foreseeable future. +-- The ULCS provisions specify a simplified, but compatible, efficiency +-- constraint as there will never be more than one element in the SEQUENCE OF +-- for the foreseeable future. -- This simplifies matters for some compilers. PDV-list ::= SEQUENCE { - transfer-syntax-name Transfer-syntax-name OPTIONAL, -- X - presentation-context-identifier Presentation-context-identifier, - presentation-data-values CHOICE - { single-ASN1-type [0] ABSTRACT-SYNTAX.&Type - (CONSTRAINED BY { - -- Type corresponding to presentation context identifier -- }) , -- X - octet-aligned [1] IMPLICIT OCTET STRING, -- X - arbitrary [2] IMPLICIT BIT STRING } - -- contains one or more presentation data values from the same - -- presentation context. - -- ATN Commentary: only the arbitrary BIT STRING encoding choice is used. + transfer-syntax-name Transfer-syntax-name OPTIONAL, -- X + presentation-context-identifier Presentation-context-identifier, + presentation-data-values CHOICE + { single-ASN1-type [0] ABSTRACT-SYNTAX.&Type + (CONSTRAINED BY { + -- Type corresponding to presentation context identifier -- }) , -- X + octet-aligned [1] IMPLICIT OCTET STRING, -- X + arbitrary [2] IMPLICIT BIT STRING } + -- contains one or more presentation data values from the same + -- presentation context. + -- ATN Commentary: only the arbitrary BIT STRING encoding choice is used. } Transfer-syntax-name ::= OBJECT IDENTIFIER -- ATN: not used for ATN Upper Layers -Presentation-context-identifier::= INTEGER -- ATN: the following values are - -- ATN-specific -{ acse-apdu (1), - reserved (2), - user-ase-apdu (3) } (1..127, ... ) --- ATN commentary: The SIZE constraint above differs from the referenced --- standard, which specifies (in 8.2): +Presentation-context-identifier::= INTEGER -- ATN: the following values are + -- ATN-specific +{ acse-apdu (1), + reserved (2), + user-ase-apdu (3) } (1..127, ... ) +-- ATN commentary: The SIZE constraint above differs from the referenced +-- standard, which specifies (in 8.2): -- Presentation-context-identifier::= INTEGER (1..127, ..., 128..MAX ). --- The ULCS provisions specify a simplified, but compatible, efficiency --- constraint as there will never be more than 127 presentation contexts in --- ATN for the foreseeable future. +-- The ULCS provisions specify a simplified, but compatible, efficiency +-- constraint as there will never be more than 127 presentation contexts in +-- ATN for the foreseeable future. -- This simplifies matters for some compilers. The list of defined values is -- shown here for guidance only, and has no effect on the PER encoding. @@ -106,22 +102,22 @@ END -- of ULCS definitions --************************************************************************* ACSE-1 {joint-iso-itu-t association-control(2) modules(0) apdus(0) version1(1)} --- ACSE-1 refers to ACSE version 1 -DEFINITIONS ::= +-- ACSE-1 refers to ACSE version 1 +DEFINITIONS ::= BEGIN - EXPORTS - acse-as-id, ACSE-apdu, aCSE-id, Application-context-name, AP-title, - AE-qualifier, -- AE-title, (ATN: AE-title is not needed) - AP-invocation-identifier, - AE-invocation-identifier, Mechanism-name, Authentication-value, - ACSE-requirements; - IMPORTS Name, RelativeDistinguishedName - FROM InformationFramework - { joint-iso-ccitt ds(5) module(1) informationFramework(1) 2 }; - -- The data types Name and RelativeDistinguishedName are imported - -- from ISO/IEC 9594-2 | ITU-T Rec. X.501. - -- ATN Commentary: The relevant InformationFramework extracts are given - -- below. + EXPORTS + acse-as-id, ACSE-apdu, aCSE-id, Application-context-name, AP-title, + AE-qualifier, -- AE-title, (ATN: AE-title is not needed) + AP-invocation-identifier, + AE-invocation-identifier, Mechanism-name, Authentication-value, + ACSE-requirements; + IMPORTS Name, RelativeDistinguishedName + FROM InformationFramework + { joint-iso-ccitt ds(5) module(1) informationFramework(1) 2 }; + -- The data types Name and RelativeDistinguishedName are imported + -- from ISO/IEC 9594-2 | ITU-T Rec. X.501. + -- ATN Commentary: The relevant InformationFramework extracts are given + -- below. -- ************************************************************************* -- EXTERNAL @@ -129,9 +125,9 @@ BEGIN -- EXTERNAL is an ASN.1 UNIVERSAL type. The definition in the PER standard -- ISO/IEC 8825-2 | ITU-T Rec. X.691 is assumed for ACSE. --- The type is used in ACSE user-information +-- The type is used in ACSE user-information -- fields. ASN.1 compilers will not in general allow EXTERNAL to be --- redefined (therefore 'EXTERNALt'), +-- redefined (therefore 'EXTERNALt'), -- and it is invalid ASN.1 to define a type with tag [UNIVERSAL 8] -- -- Workaround for bug in asn2wrs in the .cnf file @@ -140,13 +136,13 @@ BEGIN -- tagged assignments. -- EXTERNALt ::= [8] IMPLICIT SEQUENCE { - direct-reference OBJECT IDENTIFIER OPTIONAL, -- X - indirect-reference INTEGER OPTIONAL, - data-value-descriptor ObjectDescriptor OPTIONAL, -- X - encoding CHOICE { - single-ASN1-type [0] ABSTRACT-SYNTAX.&Type, - octet-aligned [1] IMPLICIT OCTET STRING, -- X - arbitrary [2] IMPLICIT BIT STRING }} + direct-reference OBJECT IDENTIFIER OPTIONAL, -- X + indirect-reference INTEGER OPTIONAL, + data-value-descriptor ObjectDescriptor OPTIONAL, -- X + encoding CHOICE { + single-ASN1-type [0] ABSTRACT-SYNTAX.&Type, + octet-aligned [1] IMPLICIT OCTET STRING, -- X + arbitrary [2] IMPLICIT BIT STRING }} -- ATN: implementations are advised to use arbitrary (BIT STRING) -- encodings only (see Guidance Material section 2.6.5.21). -- BIT STRING values are not padded to octet boundaries. @@ -155,122 +151,122 @@ EXTERNALt ::= [8] IMPLICIT SEQUENCE { -- object identifier assignments acse-as-id OBJECT IDENTIFIER ::= {joint-iso-itu-t association-control(2) abstract-syntax(1) apdus(0) version1(1)} - -- may be used to reference the abstract syntax of the ACSE APDUs -aCSE-id OBJECT IDENTIFIER ::= + -- may be used to reference the abstract syntax of the ACSE APDUs +aCSE-id OBJECT IDENTIFIER ::= { joint-iso-itu-t association-control(2) ase-id(3) acse-ase(1) version(1) } -- may be used to identify the Association Control ASE. -- top level CHOICE ACSE-apdu ::= CHOICE { - aarq AARQ-apdu, -- ACSE associate request pdu - aare AARE-apdu, -- ACSE associate response pdu - rlrq RLRQ-apdu, -- ACSE release request pdu - rlre RLRE-apdu, -- ACSE release response pdu - abrt ABRT-apdu, -- ACSE abort pdu - ... + aarq AARQ-apdu, -- ACSE associate request pdu + aare AARE-apdu, -- ACSE associate response pdu + rlrq RLRQ-apdu, -- ACSE release request pdu + rlre RLRE-apdu, -- ACSE release response pdu + abrt ABRT-apdu, -- ACSE abort pdu + ... } AARQ-apdu ::= [ APPLICATION 0 ] IMPLICIT SEQUENCE -{ protocol-version [0] IMPLICIT BIT STRING { version1 (0) } DEFAULT { version1 }, -- X - application-context-name [1] Application-context-name, - called-AP-title [2] AP-title OPTIONAL, -- X - called-AE-qualifier [3] AE-qualifier OPTIONAL, -- X - called-AP-invocation-identifier [4] AP-invocation-identifier OPTIONAL, -- X - called-AE-invocation-identifier [5] AE-invocation-identifier OPTIONAL, -- X - calling-AP-title [6] AP-title OPTIONAL, - calling-AE-qualifier [7] AE-qualifier OPTIONAL, - calling-AP-invocation-identifier [8] AP-invocation-identifier OPTIONAL, -- X - calling-AE-invocation-identifier [9] AE-invocation-identifier OPTIONAL, -- X - -- The following field is not present if only the Kernel is used. - -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. - sender-acse-requirements [10] IMPLICIT ACSE-requirements OPTIONAL, - -- The following field is only present if the Authentication functional - -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2. - mechanism-name [11] IMPLICIT Mechanism-name OPTIONAL, - -- The following field is only present if the Authentication functional - -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2. - calling-authentication-value [12] EXPLICIT Authentication-value OPTIONAL, - application-context-name-list [13] IMPLICIT Application-context-name-list OPTIONAL, -- X - -- The above field is only present if the Application Context Negotiation - -- functional unit is selected - never for ATN - implementation-information [29] IMPLICIT Implementation-data OPTIONAL, -- X - ..., ..., -- ATN: Note use of extension marker pair - user-information [30] IMPLICIT Association-information OPTIONAL +{ protocol-version [0] IMPLICIT BIT STRING { version1 (0) } DEFAULT { version1 }, -- X + application-context-name [1] Application-context-name, + called-AP-title [2] AP-title OPTIONAL, -- X + called-AE-qualifier [3] AE-qualifier OPTIONAL, -- X + called-AP-invocation-identifier [4] AP-invocation-identifier OPTIONAL, -- X + called-AE-invocation-identifier [5] AE-invocation-identifier OPTIONAL, -- X + calling-AP-title [6] AP-title OPTIONAL, + calling-AE-qualifier [7] AE-qualifier OPTIONAL, + calling-AP-invocation-identifier [8] AP-invocation-identifier OPTIONAL, -- X + calling-AE-invocation-identifier [9] AE-invocation-identifier OPTIONAL, -- X + -- The following field is not present if only the Kernel is used. + -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. + sender-acse-requirements [10] IMPLICIT ACSE-requirements OPTIONAL, + -- The following field is only present if the Authentication functional + -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2. + mechanism-name [11] IMPLICIT Mechanism-name OPTIONAL, + -- The following field is only present if the Authentication functional + -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2. + calling-authentication-value [12] EXPLICIT Authentication-value OPTIONAL, + application-context-name-list [13] IMPLICIT Application-context-name-list OPTIONAL, -- X + -- The above field is only present if the Application Context Negotiation + -- functional unit is selected - never for ATN + implementation-information [29] IMPLICIT Implementation-data OPTIONAL, -- X + ..., ..., -- ATN: Note use of extension marker pair + user-information [30] IMPLICIT Association-information OPTIONAL } AARE-apdu ::= [ APPLICATION 1 ] IMPLICIT SEQUENCE -{ protocol-version [0] IMPLICIT BIT STRING{ version1 (0) } - DEFAULT { version1 }, -- X - application-context-name [1] Application-context-name, - result [2] Associate-result, - result-source-diagnostic [3] Associate-source-diagnostic, - responding-AP-title [4] AP-title OPTIONAL, -- X - responding-AE-qualifier [5] AE-qualifier OPTIONAL, -- X - responding-AP-invocation-identifier [6] AP-invocation-identifier OPTIONAL, -- X - responding-AE-invocation-identifier [7] AE-invocation-identifier OPTIONAL, -- X - -- The following field is not present if only the Kernel is used. - -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. - responder-acse-requirements [8] IMPLICIT ACSE-requirements OPTIONAL, - -- The following field is only present if the Authentication functional - -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2. - mechanism-name [9] IMPLICIT Mechanism-name OPTIONAL, - -- The following field is only present if the Authentication functional - -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2. - responding-authentication-value [10] EXPLICIT Authentication-value OPTIONAL, - application-context-name-list [11] IMPLICIT Application-context-name-list - OPTIONAL, -- X - -- The above field is only present if the Application Context Negotiation - -- functional unit is selected - never for ATN - implementation-information [29] IMPLICIT Implementation-data OPTIONAL, --X - ..., ..., -- ATN: Note use of extension marker pair - user-information [30] IMPLICIT Association-information OPTIONAL +{ protocol-version [0] IMPLICIT BIT STRING{ version1 (0) } + DEFAULT { version1 }, -- X + application-context-name [1] Application-context-name, + result [2] Associate-result, + result-source-diagnostic [3] Associate-source-diagnostic, + responding-AP-title [4] AP-title OPTIONAL, -- X + responding-AE-qualifier [5] AE-qualifier OPTIONAL, -- X + responding-AP-invocation-identifier [6] AP-invocation-identifier OPTIONAL, -- X + responding-AE-invocation-identifier [7] AE-invocation-identifier OPTIONAL, -- X + -- The following field is not present if only the Kernel is used. + -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. + responder-acse-requirements [8] IMPLICIT ACSE-requirements OPTIONAL, + -- The following field is only present if the Authentication functional + -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2. + mechanism-name [9] IMPLICIT Mechanism-name OPTIONAL, + -- The following field is only present if the Authentication functional + -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2. + responding-authentication-value [10] EXPLICIT Authentication-value OPTIONAL, + application-context-name-list [11] IMPLICIT Application-context-name-list + OPTIONAL, -- X + -- The above field is only present if the Application Context Negotiation + -- functional unit is selected - never for ATN + implementation-information [29] IMPLICIT Implementation-data OPTIONAL, --X + ..., ..., -- ATN: Note use of extension marker pair + user-information [30] IMPLICIT Association-information OPTIONAL } RLRQ-apdu ::= [ APPLICATION 2 ] IMPLICIT SEQUENCE -{ reason [0] IMPLICIT Release-request-reason OPTIONAL, - ..., ..., -- ATN: Note use of extension marker pair - user-information [30] IMPLICIT Association-information OPTIONAL +{ reason [0] IMPLICIT Release-request-reason OPTIONAL, + ..., ..., -- ATN: Note use of extension marker pair + user-information [30] IMPLICIT Association-information OPTIONAL } RLRE-apdu ::= [ APPLICATION 3 ] IMPLICIT SEQUENCE -{ reason [0] IMPLICIT Release-response-reason OPTIONAL, - ..., ..., -- ATN: Note use of extension marker pair - user-information [30] IMPLICIT Association-information OPTIONAL +{ reason [0] IMPLICIT Release-response-reason OPTIONAL, + ..., ..., -- ATN: Note use of extension marker pair + user-information [30] IMPLICIT Association-information OPTIONAL } ABRT-apdu ::= [ APPLICATION 4 ] IMPLICIT SEQUENCE -{ abort-source [0] IMPLICIT ABRT-source, - abort-diagnostic [1] IMPLICIT ABRT-diagnostic OPTIONAL, - -- The above field is not present if only the Kernel is used. - -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. - ..., ..., -- ATN: Note use of extension marker pair - user-information [30] IMPLICIT Association-information OPTIONAL +{ abort-source [0] IMPLICIT ABRT-source, + abort-diagnostic [1] IMPLICIT ABRT-diagnostic OPTIONAL, + -- The above field is not present if only the Kernel is used. + -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required. + ..., ..., -- ATN: Note use of extension marker pair + user-information [30] IMPLICIT Association-information OPTIONAL } ABRT-diagnostic ::= ENUMERATED -{ no-reason-given (1), - protocol-error (2), - authentication-mechanism-name-not-recognized (3), - authentication-mechanism-name-required (4), - authentication-failure (5), - authentication-required (6), - ... } - -ABRT-source ::= INTEGER { acse-service-user (0), acse-service-provider (1)} (0..1, ...) - -ACSE-requirements ::= BIT STRING -{ authentication (0), application-context-negotiation(1) } --- ATN commentary: application-context-negotiation (bit 1) is +{ no-reason-given (1), + protocol-error (2), + authentication-mechanism-name-not-recognized (3), + authentication-mechanism-name-required (4), + authentication-failure (5), + authentication-required (6), + ... } + +ABRT-source ::= INTEGER { acse-service-user (0), acse-service-provider (1)} (0..1, ...) + +ACSE-requirements ::= BIT STRING +{ authentication (0), application-context-negotiation(1) } +-- ATN commentary: application-context-negotiation (bit 1) is -- never set for ATN ULCS. Use of authentication is deprecated -- for Doc 9705 ed 1/ed 2. -Application-context-name-list ::= SEQUENCE OF Application-context-name +Application-context-name-list ::= SEQUENCE OF Application-context-name -- ATN Commentary: the above type is not used for ATN ULCS. Application-context-name ::= OBJECT IDENTIFIER @@ -281,31 +277,31 @@ Application-context-name ::= OBJECT IDENTIFIER -- MG: asn2wrs cannot handle untagged CHOICEs within either a SET or a SEQUENCE. -- https://wiki.wireshark.org/Asn2wrs_Handmassaging_the_ASN_file AP-title ::= CHOICE { -- ATN: See encoding guidance in 2.5.11 - -- "form2" is encoded as 0 and "form1" as 1 - ap-title-form2 [0] IMPLICIT AP-title-form2, -- Object Identifier form - ap-title-form1 [1] IMPLICIT AP-title-form1, -- X (Directory name form) - ... } + -- "form2" is encoded as 0 and "form1" as 1 + ap-title-form2 [0] IMPLICIT AP-title-form2, -- Object Identifier form + ap-title-form1 [1] IMPLICIT AP-title-form1, -- X (Directory name form) + ... } AE-qualifier ::= CHOICE {-- ATN: See encoding guidance in 2.5.11 - -- "form2" is encoded as 0 and "form1" as 1 - ae-qualifier-form2 [0] IMPLICIT AE-qualifier-form2, -- INTEGER form - ae-qualifier-form1 [1] IMPLICIT AE-qualifier-form1, -- X (RDN form) - ... } --- ATN commentary: AE-qualifier is set to "app-type" in Doc 9705 1st and --- 2nd editions. For forward compatibility, the value should not be + -- "form2" is encoded as 0 and "form1" as 1 + ae-qualifier-form2 [0] IMPLICIT AE-qualifier-form2, -- INTEGER form + ae-qualifier-form1 [1] IMPLICIT AE-qualifier-form1, -- X (RDN form) + ... } +-- ATN commentary: AE-qualifier is set to "app-type" in Doc 9705 1st and +-- 2nd editions. For forward compatibility, the value should not be -- analysed. --- When both AP-title and AE-qualifier data values are present in an AARQ or --- AARE APDU, both have the same form to allow the construction of an +-- When both AP-title and AE-qualifier data values are present in an AARQ or +-- AARE APDU, both have the same form to allow the construction of an -- AE-title as discussed in CCITT Rec. X.665 | ISO/IEC 9834-6. AP-title-form1 ::= Name -- ATN: Not used for ATN ULCS --- The value assigned to AP-title-form1 is The Directory Name of an +-- The value assigned to AP-title-form1 is The Directory Name of an -- application-process title. AE-qualifier-form1 ::= RelativeDistinguishedName -- ATN: Not used for ULCS --- The value assigned to AE-qualifier-form1 is the relative distinguished name --- of a particular application-entity of the application-process identified by +-- The value assigned to AE-qualifier-form1 is the relative distinguished name +-- of a particular application-entity of the application-process identified by -- AP-title-form1. AP-title-form2 ::= OBJECT IDENTIFIER @@ -314,28 +310,28 @@ AE-qualifier-form2 ::= INTEGER -- ATN commentary: The AE-title productions below are commented out, -- as they are not required for ATN ULCS. --- AE-title ::= CHOICE { --- ae-title-form1 AE-title-form1, +-- AE-title ::= CHOICE { +-- ae-title-form1 AE-title-form1, -- ae-title-form2 AE-title-form2, -- ... } -- --- As defined in CCITT Rec. X.650 | ISO 7498-3, an application-entity title is --- composed of an application-process title and an application-entity qualifier. --- The ACSE protocol provides for the transfer of an application-entity title --- value by the transfer of its component values. However, the following data --- type is provided for International Standards that reference a single +-- As defined in CCITT Rec. X.650 | ISO 7498-3, an application-entity title is +-- composed of an application-process title and an application-entity qualifier. +-- The ACSE protocol provides for the transfer of an application-entity title +-- value by the transfer of its component values. However, the following data +-- type is provided for International Standards that reference a single -- syntactic structure for AE titles. (Not used for ATN ULCS) -- --- AE-title-form1 ::= Name --- For access to The Directory (ITU-T Rec. X.500-Series | ISO/IEC 9594), an +-- AE-title-form1 ::= Name +-- For access to The Directory (ITU-T Rec. X.500-Series | ISO/IEC 9594), an -- AE title has AE-title-form1. --- This value can be constructed from AP-title-form1 and AE-qualifier-form1 --- values contained in an AARQ or AARE APDU. A discussion of forming an --- AE-title-form1 from AP-title-form1 and AE-qualifier-form1 may be found in +-- This value can be constructed from AP-title-form1 and AE-qualifier-form1 +-- values contained in an AARQ or AARE APDU. A discussion of forming an +-- AE-title-form1 from AP-title-form1 and AE-qualifier-form1 may be found in -- CCITT Rec. X.665 | ISO/IEC 9834-6. -- -- AE-title-form2 ::= OBJECT IDENTIFIER --- A discussion of forming an AE-title-form2 from AP-title-form2 and +-- A discussion of forming an AE-title-form2 from AP-title-form2 and -- AE-qualifier-form2 may be found in CCITT Rec. X.665 | ISO/IEC 9834-6. AE-invocation-identifier ::= INTEGER -- ATN: not used in ULCS @@ -344,31 +340,31 @@ AP-invocation-identifier ::= INTEGER -- ATN: not used in ULCS -- *************************************************************************** Associate-result ::= INTEGER -{ accepted (0), - rejected-permanent (1), - rejected-transient (2) } (0..2, ...) +{ accepted (0), + rejected-permanent (1), + rejected-transient (2) } (0..2, ...) Associate-source-diagnostic ::= CHOICE { acse-service-user [1] INTEGER - { null (0), - no-reason-given (1), - application-context-name-not-supported (2), - calling-AP-title-not-recognized (3), - calling-AP-invocation-identifier-not-recognized (4), - calling-AE-qualifier-not-recognized (5), - calling-AE-invocation-identifier-not-recognized (6), - called-AP-title-not-recognized (7), - called-AP-invocation-identifier-not-recognized (8), - called-AE-qualifier-not-recognized (9), - called-AE-invocation-identifier-not-recognized (10), - authentication-mechanism-name-not-recognized (11), - authentication-mechanism-name-required (12), - authentication-failure (13), - authentication-required (14) } (0..14 , ...), - acse-service-provider [2] INTEGER - { null (0), - no-reason-given (1), - no-common-acse-version (2) } (0..2 , ...) + { null (0), + no-reason-given (1), + application-context-name-not-supported (2), + calling-AP-title-not-recognized (3), + calling-AP-invocation-identifier-not-recognized (4), + calling-AE-qualifier-not-recognized (5), + calling-AE-invocation-identifier-not-recognized (6), + called-AP-title-not-recognized (7), + called-AP-invocation-identifier-not-recognized (8), + called-AE-qualifier-not-recognized (9), + called-AE-invocation-identifier-not-recognized (10), + authentication-mechanism-name-not-recognized (11), + authentication-mechanism-name-required (12), + authentication-failure (13), + authentication-required (14) } (0..14 , ...), + acse-service-provider [2] INTEGER + { null (0), + no-reason-given (1), + no-common-acse-version (2) } (0..2 , ...) } Association-information ::= SEQUENCE SIZE (1, ..., 0 | 2..MAX) OF EXTERNALt @@ -391,31 +387,31 @@ Release-response-reason ::= INTEGER {normal (0), not-finished (1), user-defined -- Values are encoded in 5 bits, not 3 as might be expected. Authentication-value ::= CHOICE -- ATN: use is deprecated in ed 1/ed 2 -{ charstring [0] IMPLICIT OCTET STRING, - bitstring [1] IMPLICIT BIT STRING, - external [2] IMPLICIT EXTERNAL, - other [3] IMPLICIT SEQUENCE { +{ charstring [0] IMPLICIT OCTET STRING, + bitstring [1] IMPLICIT BIT STRING, + external [2] IMPLICIT EXTERNAL, + other [3] IMPLICIT SEQUENCE { -- other-mechanism-name MECHANISM-NAME.&id ({ObjectSet}), - other-mechanism-name OBJECT IDENTIFIER, --- other-mechanism-value MECHANISM-NAME.&Type ({ObjectSet}{@.other-mechanism-name}) - other-mechanism-value ANY - } -- X + other-mechanism-name OBJECT IDENTIFIER, +-- other-mechanism-value MECHANISM-NAME.&Type ({ObjectSet}{@.other-mechanism-name}) + other-mechanism-value ANY + } -- X } --- The abstract syntax of (calling/responding) authentication-value is --- determined by the authentication mechanism used during association +-- The abstract syntax of (calling/responding) authentication-value is +-- determined by the authentication mechanism used during association -- establishment. The authentication mechanism is either explicitly --- denoted by the &id field (of type OBJECT IDENTIFIER) for a mechanism +-- denoted by the &id field (of type OBJECT IDENTIFIER) for a mechanism -- belonging to the class MECHANISM-NAME, or it is known implicitly by --- prior agreement between the communicating partners. If the "other" --- component is chosen, then the "mechanism-name" component is present --- in accordance with ITU-T Rec. X.680|ISO/IEC 8824. If the value --- "mechanism-name" occurs in the AARQ-apdu or the AARE-apdu, then that +-- prior agreement between the communicating partners. If the "other" +-- component is chosen, then the "mechanism-name" component is present +-- in accordance with ITU-T Rec. X.680|ISO/IEC 8824. If the value +-- "mechanism-name" occurs in the AARQ-apdu or the AARE-apdu, then that -- value is the same as the value for "other-mechanism-name" END -- of Connection-Oriented ACSE definitions -- ************************************************************************* --- The following definitions are adapted from the Directory standard +-- The following definitions are adapted from the Directory standard -- ISO/IEC 9594-2:1993 | ITU-T Rec. X.501 (1993 E). In case of any discrepancy, -- the ISO/IEC standard takes precedence. -- ************************************************************************* @@ -433,15 +429,15 @@ RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue AttributeTypeAndValue ::= SEQUENCE { --- ATN commentary: The following line has been inserted to allow the Name and --- RelativeDistinguishedName types, as used by ACSE, to be resolved by an --- ASN.1 compiler, without introducing the unnecessary complexity +-- ATN commentary: The following line has been inserted to allow the Name and +-- RelativeDistinguishedName types, as used by ACSE, to be resolved by an +-- ASN.1 compiler, without introducing the unnecessary complexity -- Of the ATTRIBUTE information object class, which is used in the -- Directory standards. null NULL} --- The "real" components of AttributeTypeAndValue follow. They have been --- commented out here, but could be restored if required, for example, for --- sharing data types with a Directory implementation. The syntax has been +-- The "real" components of AttributeTypeAndValue follow. They have been +-- commented out here, but could be restored if required, for example, for +-- sharing data types with a Directory implementation. The syntax has been -- verified by the OSS syntax checker. -- type ATTRIBUTE.&id ({SupportedAttributes}), -- value ATTRIBUTE.&Type ({SupportedAttributes} {@type}) @@ -450,15 +446,15 @@ AttributeTypeAndValue ::= SEQUENCE { --SupportedAttributes ATTRIBUTE ::= -- {objectClass | aliasedEntryName, ...} --- ATN Commentary: ATTRIBUTE is an information object class, specified in --- ISO/IEC 9594-2 | ITU-T Rec. X.501, using the notation defined in --- ISO/IEC 8824-2 | ITU-T Rec. X.681. However, for ULCS implementation, it --- is only necessary to note that the ACSE CHOICE types AP-title, +-- ATN Commentary: ATTRIBUTE is an information object class, specified in +-- ISO/IEC 9594-2 | ITU-T Rec. X.501, using the notation defined in +-- ISO/IEC 8824-2 | ITU-T Rec. X.681. However, for ULCS implementation, it +-- is only necessary to note that the ACSE CHOICE types AP-title, -- AE-qualifier and AE-title are all constrained to be the "form 2" variants, -- with types Object Identifier, Integer and Object Identifier, respectively. -- It is however necessary to know the syntax of the "form 1" variants (Name, --- RelativeDistinguishedName and Name, respectively) so that the CHOICE --- elements can be sorted into canonical order, based on their ASN.1 types, +-- RelativeDistinguishedName and Name, respectively) so that the CHOICE +-- elements can be sorted into canonical order, based on their ASN.1 types, -- for PER encoding (see 2.5.11). -- --ATTRIBUTE ::= CLASS { @@ -502,11 +498,11 @@ END -- of Directory Information Framework extracts -- Editor modelines - http://www.wireshark.org/tools/modelines.html -- -- Local variables: --- c-basic-offset: 2 --- tab-width: 2 --- indent-tabs-mode: t +-- c-basic-offset: 4 +-- tab-width: 8 +-- indent-tabs-mode: nil -- End: -- --- vi: set shiftwidth=2 tabstop=2 noexpandtab: --- :indentSize=2:tabSize=2:noTabs=false: +-- vi: set shiftwidth=4 tabstop=8 expandtab: +-- :indentSize=4:tabSize=8:noTabs=true: -- diff --git a/asn1/atn-ulcs/atn-ulcs.cnf b/asn1/atn-ulcs/atn-ulcs.cnf index fce5459851..e24abe7a7b 100644 --- a/asn1/atn-ulcs/atn-ulcs.cnf +++ b/asn1/atn-ulcs/atn-ulcs.cnf @@ -1,24 +1,20 @@ -# c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: - #.MODULE_IMPORT #.FIELD_RENAME -AARQ-apdu/protocol-version aarq-apdu_protocol-version -AARE-apdu/protocol-version aare-apdu_protocol-version -RLRE-apdu/reason rlre-apdu_response_reason -RLRQ-apdu/reason rlrq-apdu_request_reason -EXTERNALt/encoding/single-ASN1-type externalt_encoding_single-asn1-type -EXTERNALt/encoding/arbitrary externalt_encoding_arbitrary -EXTERNALt/encoding/octet-aligned externalt_encoding_octet-aligned -PDV-list/presentation-data-values/single-ASN1-type pdv-list_presentation-data-values_single-asn1-type +AARQ-apdu/protocol-version aarq-apdu_protocol-version +AARE-apdu/protocol-version aare-apdu_protocol-version +RLRE-apdu/reason rlre-apdu_response_reason +RLRQ-apdu/reason rlrq-apdu_request_reason +EXTERNALt/encoding/single-ASN1-type externalt_encoding_single-asn1-type +EXTERNALt/encoding/arbitrary externalt_encoding_arbitrary +EXTERNALt/encoding/octet-aligned externalt_encoding_octet-aligned +PDV-list/presentation-data-values/single-ASN1-type pdv-list_presentation-data-values_single-asn1-type PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_arbitrary #.END #.PDU_NEW - Fully-encoded-data - ACSE-apdu + Fully-encoded-data + ACSE-apdu #.END @@ -27,358 +23,358 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar #.END -#.FN_BODY Presentation-context-identifier +#.FN_BODY Presentation-context-identifier - offset = dissect_per_constrained_integer( - tvb, - offset, - actx, - tree, - hf_index, - 1U, - 127U, - &ulcs_context_value, - TRUE); + offset = dissect_per_constrained_integer( + tvb, + offset, + actx, + tree, + hf_index, + 1U, + 127U, + &ulcs_context_value, + TRUE); #.END -#.FN_BODY PDV-list/presentation-data-values/arbitrary - - packet_info * pinfo = actx->pinfo; - tvbuff_t *tvb_usr = NULL; - proto_tree *atn_ulcs_tree = NULL; - atn_conversation_t *atn_cv = NULL; - heur_dtbl_entry_t *hdtbl_entry; - - /* extract bitstring into new tvb buffer */ - offset = dissect_per_bit_string( - tvb, - offset, - actx, - tree, - hf_index, - NO_BOUND, - NO_BOUND, - FALSE, - &tvb_usr, - NULL); - - if (tvb_usr) { - /* call appropiate dissector for bitstring data */ - switch(ulcs_context_value){ - case 1: /* ACSE PDU*/ - atn_ulcs_tree = proto_tree_add_subtree( - root_tree, tvb, offset, 0, - ett_atn_acse, NULL, ATN_ACSE_PROTO ); - - dissect_ACSE_apdu_PDU( - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - atn_ulcs_tree, NULL); - 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, - &hdtbl_entry, - NULL); - break; - } - } - else{ - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - } - break; - default: - break; - } /* switch(ulcs_context_value) */ - } +#.FN_BODY PDV-list/presentation-data-values/arbitrary + + packet_info * pinfo = actx->pinfo; + tvbuff_t *tvb_usr = NULL; + proto_tree *atn_ulcs_tree = NULL; + atn_conversation_t *atn_cv = NULL; + heur_dtbl_entry_t *hdtbl_entry; + + /* extract bitstring into new tvb buffer */ + offset = dissect_per_bit_string( + tvb, + offset, + actx, + tree, + hf_index, + NO_BOUND, + NO_BOUND, + FALSE, + &tvb_usr, + NULL); + + if (tvb_usr) { + /* call appropiate dissector for bitstring data */ + switch(ulcs_context_value){ + case 1: /* ACSE PDU*/ + atn_ulcs_tree = proto_tree_add_subtree( + root_tree, tvb, offset, 0, + ett_atn_acse, NULL, ATN_ACSE_PROTO ); + + dissect_ACSE_apdu_PDU( + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + atn_ulcs_tree, NULL); + 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, + &hdtbl_entry, + NULL); + break; + } + } + else{ + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + } + break; + default: + break; + } /* switch(ulcs_context_value) */ + } #.END #.FN_BODY Authentication-value/other/other-mechanism-value - offset=call_ber_oid_callback( - object_identifier_id, - tvb, - offset, - actx->pinfo, - tree, NULL); + offset=call_ber_oid_callback( + object_identifier_id, + tvb, + offset, + actx->pinfo, + tree, NULL); #.END #.FN_BODY Mechanism-name - offset = dissect_per_object_identifier( - tvb, - offset, - actx, - tree, - hf_index, - NULL); + offset = dissect_per_object_identifier( + tvb, + offset, + actx, + tree, + hf_index, + NULL); #.END #.FN_BODY Authentication-value/other/other-mechanism-value - offset=call_ber_oid_callback( - object_identifier_id, - tvb, - offset, - actx->pinfo, - tree, NULL); + offset=call_ber_oid_callback( + object_identifier_id, + tvb, + offset, + actx->pinfo, + tree, NULL); #.END -#.FN_BODY AE-qualifier-form2 - 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; - } +#.FN_BODY AE-qualifier-form2 + 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; + } #.END -#.FN_BODY AARQ-apdu - 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 = wmem_new(wmem_file_scope(), 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 = wmem_new(wmem_file_scope(), 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: */ - %(DEFAULT_BODY)s - - - /* 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 *) wmem_tree_lookup32( - aarq_data_tree, - aircraft_24_bit_address); - - if(!aarq_data){ /* aarq data not found, create new record */ - - /* alloc aarq data */ - aarq_data = wmem_new(wmem_file_scope(), aarq_data_t); - aarq_data-> aarq_pending = FALSE; - - /* insert aarq data */ - wmem_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; - } +#.FN_BODY AARQ-apdu + 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 = wmem_new(wmem_file_scope(), 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 = wmem_new(wmem_file_scope(), 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: */ + %(DEFAULT_BODY)s + + + /* 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 *) wmem_tree_lookup32( + aarq_data_tree, + aircraft_24_bit_address); + + if(!aarq_data){ /* aarq data not found, create new record */ + + /* alloc aarq data */ + aarq_data = wmem_new(wmem_file_scope(), aarq_data_t); + aarq_data-> aarq_pending = FALSE; + + /* insert aarq data */ + wmem_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; + } #.END -#.FN_BODY AARE-apdu - 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 *) wmem_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, +#.FN_BODY AARE-apdu + 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 *) wmem_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. */ + if(atn_cv){ /* conversation found. */ - /* create new conversation for dstref */ - create_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src , - aarq_data->cv); + /* 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); - } - } + }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; + /* clear aarq data */ + memset(aarq_data,0,sizeof(aarq_data_t)); + aarq_data-> aarq_pending = FALSE; - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END @@ -390,157 +386,157 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar 0U, 2U, NULL, TRUE); #.END -#.FN_BODY Release-request-reason +#.FN_BODY Release-request-reason /* 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); #.END -#.FN_BODY Release-response-reason +#.FN_BODY Release-response-reason /* 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); + tvb, + offset, + actx, + tree, + hf_index, + 0U, + 30U, + NULL, + TRUE); #.END -#.FN_BODY Mechanism-name +#.FN_BODY Mechanism-name offset = dissect_per_object_identifier( - tvb, - offset, - actx, - tree, - hf_index, - NULL); + tvb, + offset, + actx, + tree, + hf_index, + NULL); #.END -#.FN_BODY EXTERNALt/data-value-descriptor - - offset = dissect_per_octet_string( - tvb, - offset, - actx, - tree, - hf_index, - -1, - -1, - FALSE, - &actx->external.data_value_descriptor); +#.FN_BODY EXTERNALt/data-value-descriptor + + 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; #.END -#.FN_BODY EXTERNALt/encoding/single-ASN1-type +#.FN_BODY EXTERNALt/encoding/single-ASN1-type - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END -#.FN_BODY EXTERNALt/encoding/octet-aligned +#.FN_BODY EXTERNALt/encoding/octet-aligned - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END -#.FN_BODY EXTERNALt/encoding/arbitrary - tvbuff_t *tvb_usr = NULL; - packet_info * pinfo = actx->pinfo; - atn_conversation_t *atn_cv = NULL; - heur_dtbl_entry_t *hdtbl_entry; - - /* 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, - NULL); - - if (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, - &hdtbl_entry, - NULL); - break; - } - }else { - - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - } - } - - offset += tvb_reported_length_remaining(tvb, offset); +#.FN_BODY EXTERNALt/encoding/arbitrary + tvbuff_t *tvb_usr = NULL; + packet_info * pinfo = actx->pinfo; + atn_conversation_t *atn_cv = NULL; + heur_dtbl_entry_t *hdtbl_entry; + + /* 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, + NULL); + + if (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, + &hdtbl_entry, + NULL); + break; + } + }else { + + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + } + } + + offset += tvb_reported_length_remaining(tvb, offset); #.END @@ -548,11 +544,11 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: -# c-basic-offset: 2 -# tab-width: 2 -# indent-tabs-mode: t +# c-basic-offset: 4 +# tab-width: 8 +# indent-tabs-mode: nil # End: # -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: +# vi: set shiftwidth=4 tabstop=8 expandtab: +# :indentSize=4:tabSize=8:noTabs=true: # diff --git a/asn1/atn-ulcs/packet-atn-ulcs-template.c b/asn1/atn-ulcs/packet-atn-ulcs-template.c index e5a9f3022d..6bf411ffab 100644 --- a/asn1/atn-ulcs/packet-atn-ulcs-template.c +++ b/asn1/atn-ulcs/packet-atn-ulcs-template.c @@ -1,8 +1,3 @@ -/* 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 * Copyright 2013 @@ -51,63 +46,63 @@ */ /* - developper comments: + developer 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. + 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. + 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. + 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. + 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. +- 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. + - 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. */ @@ -150,46 +145,46 @@ 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_); + 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_); + 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_); + tvbuff_t *tvb _U_, + int offset _U_, + asn1_ctx_t *actx _U_, + proto_tree *tree _U_, + int hf_index _U_); static int dissect_ACSE_apdu_PDU( - tvbuff_t *tvb _U_, - packet_info *pinfo _U_, - proto_tree *tree _U_, - void *data _U_); + tvbuff_t *tvb _U_, + packet_info *pinfo _U_, + proto_tree *tree _U_, + void *data _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_); + 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_); #include "packet-atn-ulcs-hf.c" @@ -211,34 +206,34 @@ static const value_string per_External_encoding_vals[] = { /* 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 - } + { 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 + } }; #endif /* 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 +#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; @@ -251,254 +246,254 @@ static gint ett_atn_ses = -1; const value_string atn_ses_param_ind[] = { - {0, "No Parameter Indication "}, - {1, "Parameter Indication "}, - {0, NULL } + {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 } + {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 } + {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 +#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 } + { 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 int hf_atn_pres_err = -1; static int hf_atn_pres_pdu_type = -1; -static gint ett_atn_pres = -1; +static gint ett_atn_pres = -1; #define ATN_SES_PRES_MASK 0xf803 -#define PRES_CPR_ER_MASK 0x70 +#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 } + { 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 } + { 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 } }; #if 0 /* 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_) +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; + 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 */ -static 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) +static 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; + 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; } #endif /* determine 24-bit aircraft address(ARS) */ /* from 20-byte ATN NSAP. */ guint32 get_aircraft_24_bit_address_from_nsap( - packet_info *pinfo) + packet_info *pinfo) { - const guint8* addr = NULL; - guint32 ars =0; - guint32 adr_prefix =0; - - /* check NSAP address type*/ - if( (pinfo->src.type != get_osi_address_type()) || - (pinfo->dst.type != get_osi_address_type())) { - 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 = (const 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 = (const 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; + const guint8* addr = NULL; + guint32 ars =0; + guint32 adr_prefix =0; + + /* check NSAP address type*/ + if( (pinfo->src.type != get_osi_address_type()) || + (pinfo->dst.type != get_osi_address_type())) { + 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 = (const 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 = (const 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; - const guint8* addr = NULL; - guint32 adr_prefix =0; + int t = no_msg; + const guint8* addr = NULL; + guint32 adr_prefix =0; - /* check NSAP address type*/ - if( (pinfo->src.type != get_osi_address_type()) || (pinfo->dst.type != get_osi_address_type())) { - return t; } + /* check NSAP address type*/ + if( (pinfo->src.type != get_osi_address_type()) || (pinfo->dst.type != get_osi_address_type())) { + return t; } - /* check NSAP address length; 20 octets address length required */ - if( (pinfo->src.len != 20) || (pinfo->dst.len != 20)) { - return t; } + /* check NSAP address length; 20 octets address length required */ + if( (pinfo->src.len != 20) || (pinfo->dst.len != 20)) { + return t; } - addr = (const guint8 *)pinfo->src.data; + addr = (const guint8 *)pinfo->src.data; - /* convert address to 32-bit integer */ - adr_prefix = ((addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | addr[3] ); + /* 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 */ - } + /* 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 = (const guint8 *)pinfo->dst.data; + addr = (const guint8 *)pinfo->dst.data; - /* convert address to 32-bit integer */ - adr_prefix = ((addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | addr[3] ); + /* 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 */ - } + /* 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; + return t; } /* conversation may be used by other dissectors */ wmem_tree_t *get_atn_conversation_tree(void){ - return atn_conversation_tree; + return atn_conversation_tree; } @@ -508,401 +503,401 @@ wmem_tree_t *get_atn_conversation_tree(void){ /* 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 ) + address *address1, + guint16 clnp_ref1, + address *address2 ) { - atn_conversation_t *cv = NULL; - guint32 key = 0; - guint32 tmp = 0; + 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, address1); + key = (tmp << 16) | clnp_ref1 ; - ADD_ADDRESS_TO_HASH( tmp, address2); - key = (tmp << 24) | key ; + ADD_ADDRESS_TO_HASH( tmp, address2); + key = (tmp << 24) | key ; - /* search for atn conversation */ - cv = (atn_conversation_t *) - wmem_tree_lookup32(get_atn_conversation_tree(),key); + /* search for atn conversation */ + cv = (atn_conversation_t *) + wmem_tree_lookup32(get_atn_conversation_tree(),key); - return cv; + 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) + address *address1, + guint16 clnp_ref1, + address *address2, + atn_conversation_t *conversation) { - atn_conversation_t *cv = NULL; - guint32 key = 0; - guint32 tmp = 0; + 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, address1); + key = (tmp << 16) | clnp_ref1 ; - ADD_ADDRESS_TO_HASH( tmp, address2); - key = (tmp << 24) | key ; + ADD_ADDRESS_TO_HASH( tmp, address2); + key = (tmp << 24) | key ; - /* search for aircraft entry */ - cv = (atn_conversation_t *) - wmem_tree_lookup32( - get_atn_conversation_tree(), - key); + /* search for aircraft entry */ + cv = (atn_conversation_t *) + wmem_tree_lookup32( + get_atn_conversation_tree(), + key); - /* tree node already present */ - if(cv) { - return NULL; } + /* tree node already present */ + if(cv) { + return NULL; } - /* insert conversation data in tree*/ - wmem_tree_insert32( - get_atn_conversation_tree(), - key, - (void*)conversation); + /* insert conversation data in tree*/ + wmem_tree_insert32( + get_atn_conversation_tree(), + key, + (void*)conversation); - return conversation; + return conversation; } static int dissect_atn_ulcs( - tvbuff_t *tvb, - packet_info *pinfo, - proto_tree *tree, - void *data _U_) + 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 , - ENC_NA); - - atn_ulcs_tree = proto_item_add_subtree( - ti, - ett_atn_ulcs); - - dissect_Fully_encoded_data_PDU( - tvb, - pinfo, - atn_ulcs_tree, NULL); - - 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 */ - atn_ulcs_tree = proto_tree_add_subtree( - tree, tvb, offset, 0, - ett_atn_ses, NULL, ATN_SES_PROTO ); - - /* 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 */ - atn_ulcs_tree = proto_tree_add_subtree( - tree, tvb, offset, 0, - ett_atn_pres, NULL, ATN_PRES_PROTO ); - - value_pres = tvb_get_guint8(tvb, offset); - - /* need session context to identify PPDU type */ - /* note: */ - proto_tree_add_uint_format(atn_ulcs_tree, hf_atn_pres_pdu_type, - tvb, - offset, - 1, - value_ses_pres, - "%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 */ - atn_ulcs_tree = proto_tree_add_subtree( - tree, tvb, offset, 0, - ett_atn_acse, NULL, ATN_ACSE_PROTO ); - - dissect_ACSE_apdu_PDU( - tvb_new_subset_remaining(tvb, offset), - pinfo, - atn_ulcs_tree, NULL); - - return offset + - tvb_reported_length_remaining(tvb, offset ); - } - return offset; + 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 , + ENC_NA); + + atn_ulcs_tree = proto_item_add_subtree( + ti, + ett_atn_ulcs); + + dissect_Fully_encoded_data_PDU( + tvb, + pinfo, + atn_ulcs_tree, NULL); + + 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 */ + atn_ulcs_tree = proto_tree_add_subtree( + tree, tvb, offset, 0, + ett_atn_ses, NULL, ATN_SES_PROTO ); + + /* 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 */ + atn_ulcs_tree = proto_tree_add_subtree( + tree, tvb, offset, 0, + ett_atn_pres, NULL, ATN_PRES_PROTO ); + + value_pres = tvb_get_guint8(tvb, offset); + + /* need session context to identify PPDU type */ + /* note: */ + proto_tree_add_uint_format(atn_ulcs_tree, hf_atn_pres_pdu_type, + tvb, + offset, + 1, + value_ses_pres, + "%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 */ + atn_ulcs_tree = proto_tree_add_subtree( + tree, tvb, offset, 0, + ett_atn_acse, NULL, ATN_ACSE_PROTO ); + + dissect_ACSE_apdu_PDU( + tvb_new_subset_remaining(tvb, offset), + pinfo, + atn_ulcs_tree, NULL); + + 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_) + 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_captured_length(tvb) < 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; + /* do we have enough data*/ + /* at least session + presentation data or pdv-list */ + if (tvb_captured_length(tvb) < 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[] = { - #include "packet-atn-ulcs-hfarr.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}}, - { &hf_atn_pres_pdu_type, - { "PDU type", "atn-ulcs.pres.pdu_type", - FT_UINT8, - BASE_HEX, - NULL, - ATN_SES_PRES_MASK, - NULL, - HFILL}}, - }; - - static gint *ett[] = { - #include "packet-atn-ulcs-ettarr.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 */ - atn_ulcs_heur_subdissector_list = register_heur_dissector_list("atn-ulcs"); - - /* init aare/aare data */ - aarq_data_tree = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); - - atn_conversation_tree = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); + static hf_register_info hf_atn_ulcs[] = { + #include "packet-atn-ulcs-hfarr.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}}, + { &hf_atn_pres_pdu_type, + { "PDU type", "atn-ulcs.pres.pdu_type", + FT_UINT8, + BASE_HEX, + NULL, + ATN_SES_PRES_MASK, + NULL, + HFILL}}, + }; + + static gint *ett[] = { + #include "packet-atn-ulcs-ettarr.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 */ + atn_ulcs_heur_subdissector_list = register_heur_dissector_list("atn-ulcs"); + + /* init aare/aare data */ + aarq_data_tree = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); + + atn_conversation_tree = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); } void proto_reg_handoff_atn_ulcs(void) { - /* add session dissector to cotp dissector list dissector list*/ - heur_dissector_add( - "cotp", - dissect_atn_ulcs_heur, - "ATN-ULCS over COTP", - "atn-ucls_cotp", - proto_atn_ulcs, HEURISTIC_ENABLE); + /* add session dissector to cotp dissector list dissector list*/ + heur_dissector_add( + "cotp", + dissect_atn_ulcs_heur, + "ATN-ULCS over COTP", + "atn-ucls_cotp", + proto_atn_ulcs, HEURISTIC_ENABLE); } /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: - * c-basic-offset: 2 - * tab-width: 2 - * indent-tabs-mode: t + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=2 tabstop=2 noexpandtab: - * :indentSize=2:tabSize=2:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ diff --git a/asn1/atn-ulcs/packet-atn-ulcs-template.h b/asn1/atn-ulcs/packet-atn-ulcs-template.h index 0dc08d9e37..27ed768f0f 100644 --- a/asn1/atn-ulcs/packet-atn-ulcs-template.h +++ b/asn1/atn-ulcs/packet-atn-ulcs-template.h @@ -1,8 +1,3 @@ -/* 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 * @@ -35,49 +30,49 @@ /* 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' + 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 + 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 + 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 */ + gint ae_qualifier; /* A/G application type */ } atn_conversation_t; atn_conversation_t * create_atn_conversation( - address*, - guint16, - address*, - atn_conversation_t*); + address*, + guint16, + address*, + atn_conversation_t*); atn_conversation_t * find_atn_conversation( - address*, - guint16, - address*); + 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 */ @@ -85,11 +80,11 @@ atn_conversation_t * find_atn_conversation( /* 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 */ + 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; wmem_tree_t *get_atn_conversation_tree(void); @@ -103,11 +98,11 @@ int check_heur_msg_type(packet_info *); * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: - * c-basic-offset: 2 - * tab-width: 2 - * indent-tabs-mode: t + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=2 tabstop=2 noexpandtab: - * :indentSize=2:tabSize=2:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ -- cgit v1.2.3