summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/atn-cm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/asn1/atn-cm
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/asn1/atn-cm')
-rw-r--r--epan/dissectors/asn1/atn-cm/CMakeLists.txt40
-rw-r--r--epan/dissectors/asn1/atn-cm/atn-cm.asn194
-rw-r--r--epan/dissectors/asn1/atn-cm/atn-cm.cnf20
-rw-r--r--epan/dissectors/asn1/atn-cm/packet-atn-cm-template.c229
4 files changed, 483 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/atn-cm/CMakeLists.txt b/epan/dissectors/asn1/atn-cm/CMakeLists.txt
new file mode 100644
index 00000000..0d2f4acf
--- /dev/null
+++ b/epan/dissectors/asn1/atn-cm/CMakeLists.txt
@@ -0,0 +1,40 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+set( PROTOCOL_NAME atn-cm )
+
+set( PROTO_OPT )
+
+set( EXPORT_FILES
+)
+
+set( EXT_ASN_FILE_LIST
+)
+
+set( ASN_FILE_LIST
+ ${PROTOCOL_NAME}.asn
+)
+
+set( EXTRA_DIST
+ ${ASN_FILE_LIST}
+ packet-${PROTOCOL_NAME}-template.c
+ ${PROTOCOL_NAME}.cnf
+)
+
+set( SRC_FILES
+ ${EXTRA_DIST}
+ ${EXT_ASN_FILE_LIST}
+)
+
+set( A2W_FLAGS -u )
+
+set( EXTRA_CNF
+)
+
+ASN2WRS()
diff --git a/epan/dissectors/asn1/atn-cm/atn-cm.asn b/epan/dissectors/asn1/atn-cm/atn-cm.asn
new file mode 100644
index 00000000..3ec503f1
--- /dev/null
+++ b/epan/dissectors/asn1/atn-cm/atn-cm.asn
@@ -0,0 +1,194 @@
+-- ICAO doc 9705 Edition 2 Contact Management (CM)
+CMMessageSetVersion1 DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+-- ----------------------------------------------------------------------------------
+-- CM Message Structure
+-- ----------------------------------------------------------------------------------
+-- Aircraft-generated messages
+
+CMAircraftMessage ::= CHOICE
+{
+ 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,
+ ...
+}
+
+-- ----------------------------------------------------------------------------------
+-- CM Message Components
+-- ----------------------------------------------------------------------------------
+
+AircraftFlightIdentification ::= IA5String(SIZE(2..8))
+Airport ::=IA5String (SIZE(4))
+
+APAddress ::= CHOICE
+{
+ longTsap [0] LongTsap,
+ shortTsap [1] ShortTsap
+}
+
+AEQualifier ::= INTEGER (0..255)
+-- ATN AE-Qualifier Numeric Values are described in 4
+
+AEQualifierVersion ::= SEQUENCE
+{
+ aeQualifier AEQualifier,
+ apVersion VersionNumber
+}
+
+AEQualifierVersionAddress ::= SEQUENCE
+{
+ 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),
+ ...
+}
+
+CMContactRequest ::= SEQUENCE
+{
+ facilityDesignation FacilityDesignation,
+ address LongTsap
+}
+
+CMContactResponse ::= Response
+
+
+CMForwardRequest ::= CMLogonRequest
+
+CMForwardResponse ::= ENUMERATED
+{
+ success (0),
+ incompatible-version (1),
+ service-not-supported (2)
+}
+
+CMLogonRequest ::= SEQUENCE
+{
+ 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
+}
+
+CMLogonResponse ::= SEQUENCE
+{
+ 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
+}
+
+ -- 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
+}
+
+Day ::= INTEGER (1..31)
+ --unit = Day, Range (1..31), resolution = 1
+
+FacilityDesignation ::= IA5String (SIZE(4..8))
+
+LongTsap ::= SEQUENCE
+{
+ rDP OCTET STRING (SIZE(5)),
+ shortTsap ShortTsap
+}
+
+Month ::= INTEGER (1..12)
+ --unit = Month, Range (1..12), resolution = 1
+
+Response ::= ENUMERATED
+{
+ 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))
+}
+
+Time ::= SEQUENCE
+{
+ hours Timehours,
+ minutes Timeminutes
+}
+
+Timehours ::= INTEGER (0..23)
+-- units = hour, range (0..23), resolution = 1 hour
+
+Timeminutes ::= INTEGER (0..59)
+-- units = minute, range (0..59), resolution = 1 minute
+
+VersionNumber ::= INTEGER (1..255)
+ -- VersionNumber 0 is reserved for the Dialogue Service
+
+Year ::= INTEGER (1996..2095)
+ --unit = Year, Range (1996..2095), resolution = 1
+
+END
+
+--
+-- Editor modelines - https://www.wireshark.org/tools/modelines.html
+--
+-- Local variables:
+-- c-basic-offset: 4
+-- tab-width: 8
+-- indent-tabs-mode: nil
+-- End:
+--
+-- vi: set shiftwidth=4 tabstop=8 expandtab:
+-- :indentSize=4:tabSize=8:noTabs=true:
+--
+
diff --git a/epan/dissectors/asn1/atn-cm/atn-cm.cnf b/epan/dissectors/asn1/atn-cm/atn-cm.cnf
new file mode 100644
index 00000000..81283bf5
--- /dev/null
+++ b/epan/dissectors/asn1/atn-cm/atn-cm.cnf
@@ -0,0 +1,20 @@
+#.MODULE_IMPORT
+
+#.EXPORTS
+
+#.PDU
+ CMAircraftMessage
+ CMGroundMessage
+#.END
+
+#
+# Editor modelines - https://www.wireshark.org/tools/modelines.html
+#
+# Local variables:
+# c-basic-offset: 4
+# tab-width: 8
+# indent-tabs-mode: nil
+# End:
+#
+# vi: set shiftwidth=4 tabstop=8 expandtab:
+# :indentSize=4:tabSize=8:noTabs=true:
diff --git a/epan/dissectors/asn1/atn-cm/packet-atn-cm-template.c b/epan/dissectors/asn1/atn-cm/packet-atn-cm-template.c
new file mode 100644
index 00000000..e4628178
--- /dev/null
+++ b/epan/dissectors/asn1/atn-cm/packet-atn-cm-template.c
@@ -0,0 +1,229 @@
+/* packet-atn-cm.c
+ * By Mathias Guettler <guettler@web.de>
+ * Copyright 2013
+ *
+ * Routines for ATN context management protocol packet disassembly.
+ * ATN context management allows an aircraft
+ * to log on to a ground facility.
+
+ * details see:
+ * http://en.wikipedia.org/wiki/CPDLC
+ * http://members.optusnet.com.au/~cjr/introduction.htm
+
+ * standards:
+ * http://legacy.icao.int/anb/panels/acp/repository.cfm
+
+ * note:
+ * We are dealing with ATN/CPDLC aka ICAO Doc 9705 Ed2 here
+ * (CPDLC may also be transmitted via ACARS/AOA aka "FANS-1/A ").
+
+
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/exceptions.h>
+#include <epan/conversation.h>
+#include "packet-ber.h"
+#include "packet-per.h"
+#include "packet-atn-ulcs.h"
+
+#define ATN_CM_PROTO "ICAO Doc9705 CM"
+
+void proto_register_atn_cm(void);
+void proto_reg_handoff_atn_cm(void);
+
+#include "packet-atn-cm-hf.c"
+
+#include "packet-atn-cm-ett.c"
+static gint ett_atn_cm = -1;
+
+#include "packet-atn-cm-fn.c"
+static int proto_atn_cm = -1;
+
+static int
+dissect_atn_cm(
+ tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data _U_)
+{
+ int type;
+ 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_)
+{
+ atn_conversation_t *volatile 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 successfully */
+ /* (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"
+ };
+ 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));
+
+ 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);
+}
+
+/*
+ * Editor modelines - https://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */