aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/atn-cpdlc/packet-atn-cpdlc-template.c
diff options
context:
space:
mode:
Diffstat (limited to 'asn1/atn-cpdlc/packet-atn-cpdlc-template.c')
-rw-r--r--asn1/atn-cpdlc/packet-atn-cpdlc-template.c510
1 files changed, 252 insertions, 258 deletions
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 <guettler@web.de>
* 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:
*/