diff options
author | Evan Huus <eapache@gmail.com> | 2013-01-16 17:27:03 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-01-16 17:27:03 +0000 |
commit | 3a64f93a00a9acbca22802044c5f7cc96bd8a844 (patch) | |
tree | 631d07b5fc2a6efc09f701e2d989ade4a49d6230 /epan | |
parent | aed95072b416b3f6ac1086d8b1347617a616398d (diff) |
From Hendrik Uhlmann via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8185
Support for Underwater Acoustic PDUs in packet-dis.c
svn path=/trunk/; revision=47119
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-dis-fields.c | 61 | ||||
-rw-r--r-- | epan/dissectors/packet-dis-fields.h | 23 | ||||
-rw-r--r-- | epan/dissectors/packet-dis-pdus.c | 195 | ||||
-rw-r--r-- | epan/dissectors/packet-dis-pdus.h | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-dis.c | 31 |
5 files changed, 308 insertions, 3 deletions
diff --git a/epan/dissectors/packet-dis-fields.c b/epan/dissectors/packet-dis-fields.c index 41bdaf96df..60b9b53094 100644 --- a/epan/dissectors/packet-dis-fields.c +++ b/epan/dissectors/packet-dis-fields.c @@ -48,6 +48,10 @@ guint32 numFixed; guint32 numVariable; guint32 numBeams; guint32 numTrackJamTargets; +guint32 numShafts; +guint32 numApas; +guint32 numUAEmitter; +guint32 numUABeams; guint32 variableDatumLength; guint32 variableParameterType; guint32 variableRecordLength; @@ -236,6 +240,29 @@ DIS_ParserNode DIS_FIELDS_EMITTER_SYSTEM[] = { DIS_FIELDTYPE_END, NULL,0,0,0,0 } }; +DIS_ParserNode DIS_FIELDS_VR_UA_SHAFT[] = +{ + { DIS_FIELDTYPE_INT16, "Current Shaft RPM",0,0,0,0 }, + { DIS_FIELDTYPE_INT16, "Ordered Shaft RPM",0,0,0,0 }, + { DIS_FIELDTYPE_INT32, "Shaft RPM Rate of Change",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + +DIS_ParserNode DIS_FIELDS_VR_APA[] = +{ + { DIS_FIELDTYPE_INT16, "Parameter Index",0,0,0,0 }, //FIXME enum + { DIS_FIELDTYPE_INT16, "Value", 0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + +DIS_ParserNode DIS_FIELDS_UA_EMITTER_SYSTEM[] = +{ + { DIS_FIELDTYPE_UINT16, "Acoustic Emitter Name",0,0,0,0 }, //FIXME enum + { DIS_FIELDTYPE_UINT8, "Function",0,0,0,0 }, //FIXME enum + { DIS_FIELDTYPE_UINT8, "Acoustic ID Number",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + DIS_ParserNode DIS_FIELDS_FUNDAMENTAL_PARAMETER_DATA[] = { { DIS_FIELDTYPE_FLOAT32, "Frequency",0,0,0,0 }, @@ -368,6 +395,37 @@ DIS_ParserNode DIS_FIELDS_VR_ELECTROMAGNETIC_EMISSION_SYSTEM[] = { DIS_FIELDTYPE_END, NULL,0,0,0,0 } }; +DIS_ParserNode DIS_FIELDS_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA[] = +{ + { DIS_FIELDTYPE_UINT16, "Active Emission Parameter Index",0,0,0,0 }, //FIXME enum!!! + { DIS_FIELDTYPE_UINT16, "Scan Pattern",0,0,0,0 }, //FIXME enum!!! + { DIS_FIELDTYPE_FLOAT32, "Beam Center Azimuth (Horizontal Bearing)",0,0,0,0 }, + { DIS_FIELDTYPE_FLOAT32, "Azimuthal Beamwidth (Horizontal Beamwidth)",0,0,0,0 }, + { DIS_FIELDTYPE_FLOAT32, "Beam Center D/E",0,0,0,0 }, + { DIS_FIELDTYPE_FLOAT32, "D/E Beamwidth (Vertical Beamwidth)",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + +DIS_ParserNode DIS_FIELDS_VR_UA_BEAM[] = +{ + { DIS_FIELDTYPE_UINT8, "Beam Data Length",0,0,0,0 }, + { DIS_FIELDTYPE_UINT8, "Beam ID Number",0,0,0,0 }, + { DIS_FIELDTYPE_PAD16, "Padding",0,0,0,0 }, + { DIS_FIELDTYPE_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA, + "Fundamental Data Parameters",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + +DIS_ParserNode DIS_FIELDS_VR_UA_EMITTER_SYSTEM[] = +{ + { DIS_FIELDTYPE_UINT8, "Emitter System Data Length",0,0,0,0 }, + { DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEM_BEAMS, "Number of Beams (m)",0,0,0,0 }, + { DIS_FIELDTYPE_PAD16, "Padding",0,0,0,0 }, + { DIS_FIELDTYPE_UA_EMITTER_SYSTEM, "Acoustic Emitter System",0,0,0,0 }, + { DIS_FIELDTYPE_VECTOR_32, "Location (with respect to entity)",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + /* Bit fields */ DIS_ParserNode DIS_FIELDS_NONE[] = @@ -439,6 +497,9 @@ void initializeFieldParsers(void) initializeParser(DIS_FIELDS_VR_DATA_QUERY); initializeParser(DIS_FIELDS_VR_ELECTROMAGNETIC_EMISSION_SYSTEM_BEAM); initializeParser(DIS_FIELDS_VR_ELECTROMAGNETIC_EMISSION_SYSTEM); + initializeParser(DIS_FIELDS_VR_UA_SHAFT); + initializeParser(DIS_FIELDS_VR_UA_EMITTER_SYSTEM); + initializeParser(DIS_FIELDS_VR_UA_BEAM); initializeParser(DIS_FIELDS_MOD_PARAMS_CCTT_SINCGARS); initializeParser(DIS_FIELDS_MOD_PARAMS_JTIDS_MIDS); diff --git a/epan/dissectors/packet-dis-fields.h b/epan/dissectors/packet-dis-fields.h index a1198242a9..bcf78d2095 100644 --- a/epan/dissectors/packet-dis-fields.h +++ b/epan/dissectors/packet-dis-fields.h @@ -93,6 +93,9 @@ extern int hf_dis_mod_param_transmitter_second_mode; extern int hf_dis_mod_param_sync_state; extern int hf_dis_mod_param_network_sync_id; extern int hf_dis_antenna_pattern_parameter_dump; +extern int hf_dis_num_shafts; +extern int hf_dis_num_apas; +extern int hf_dis_num_ua_emitter_systems; extern int ett_dis_ens; extern int ett_dis_crypto_key; @@ -212,6 +215,10 @@ typedef enum DIS_FIELDTYPE_JTIDS_SYNC_STATE, DIS_FIELDTYPE_NETWORK_SYNC_ID, DIS_FIELDTYPE_NUM_ELECTROMAGNETIC_EMISSION_SYSTEMS, + DIS_FIELDTYPE_NUM_OF_SHAFTS, + DIS_FIELDTYPE_NUM_OF_APAS, + DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEMS, + DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEM_BEAMS, /* composite types */ DIS_FIELDTYPE_BURST_DESCRIPTOR, @@ -242,6 +249,12 @@ typedef enum DIS_FIELDTYPE_EMITTER_SYSTEM, DIS_FIELDTYPE_FUNDAMENTAL_PARAMETER_DATA, DIS_FIELDTYPE_TRACK_JAM, + DIS_FIELDTYPE_SHAFTS, + DIS_FIELDTYPE_APA, + DIS_FIELDTYPE_UA_EMITTER_SYSTEMS, + DIS_FIELDTYPE_UA_BEAMS, + DIS_FIELDTYPE_UA_EMITTER_SYSTEM, + DIS_FIELDTYPE_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA, /* arrays */ DIS_FIELDTYPE_FIXED_DATUMS, @@ -306,6 +319,8 @@ extern DIS_ParserNode DIS_FIELDS_MOD_PARAMS_JTIDS_MIDS[]; extern DIS_ParserNode DIS_FIELDS_EMITTER_SYSTEM[]; extern DIS_ParserNode DIS_FIELDS_FUNDAMENTAL_PARAMETER_DATA[]; extern DIS_ParserNode DIS_FIELDS_TRACK_JAM[]; +extern DIS_ParserNode DIS_FIELDS_UA_EMITTER_SYSTEM[]; +extern DIS_ParserNode DIS_FIELDS_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA[]; /* Array records */ extern DIS_ParserNode DIS_FIELDS_FIXED_DATUM[]; @@ -315,6 +330,10 @@ extern DIS_ParserNode DIS_FIELDS_VP_TYPE[]; extern DIS_ParserNode DIS_FIELDS_VR_TYPE[]; extern DIS_ParserNode DIS_FIELDS_VR_ELECTROMAGNETIC_EMISSION_SYSTEM_BEAM[]; extern DIS_ParserNode DIS_FIELDS_VR_ELECTROMAGNETIC_EMISSION_SYSTEM[]; +extern DIS_ParserNode DIS_FIELDS_VR_UA_SHAFT[]; +extern DIS_ParserNode DIS_FIELDS_VR_APA[]; +extern DIS_ParserNode DIS_FIELDS_VR_UA_EMITTER_SYSTEM[]; +extern DIS_ParserNode DIS_FIELDS_VR_UA_BEAM[]; /* Bit fields */ extern DIS_ParserNode DIS_FIELDS_NONE[]; @@ -361,6 +380,10 @@ extern guint32 numFixed; extern guint32 numVariable; extern guint32 numBeams; extern guint32 numTrackJamTargets; +extern guint32 numShafts; +extern guint32 numApas; +extern guint32 numUAEmitter; +extern guint32 numUABeams; extern guint32 variableDatumLength; extern guint32 variableRecordLength; extern guint32 majorModulation; diff --git a/epan/dissectors/packet-dis-pdus.c b/epan/dissectors/packet-dis-pdus.c index da7dded72d..f2e66342c4 100644 --- a/epan/dissectors/packet-dis-pdus.c +++ b/epan/dissectors/packet-dis-pdus.c @@ -30,10 +30,13 @@ #include "packet-dis-fields.h" #include "packet-dis-enums.h" -#define DIS_PDU_MAX_VARIABLE_PARAMETERS 16 -#define DIS_PDU_MAX_VARIABLE_RECORDS 16 +#define DIS_PDU_MAX_VARIABLE_PARAMETERS 16 +#define DIS_PDU_MAX_VARIABLE_RECORDS 16 #define DIS_PDU_MAX_ELECTROMAGNETIC_EMISSION_SYSTEMS 16 - +#define DIS_PDU_MAX_SHAFTS 16 +#define DIS_PDU_MAX_APAS 16 +#define DIS_PDU_MAX_UA_EMITTER_SYSTEMS 16 +#define DIS_PDU_MAX_UA_BEAMS 32 gint ettVariableParameters[DIS_PDU_MAX_VARIABLE_PARAMETERS]; gint ettVariableRecords[DIS_PDU_MAX_VARIABLE_RECORDS]; @@ -75,6 +78,27 @@ DIS_ParserNode DIS_PARSER_ELECTROMAGNETIC_EMISSION_PDU[] = }; +/* DIS Underwater Acoustic PDUs + */ +DIS_ParserNode DIS_PARSER_UNDERWATER_ACOUSTIC_PDU[] = +{ + { DIS_FIELDTYPE_ENTITY_ID, "Emitting Entity ID",0,0,0,0 }, + { DIS_FIELDTYPE_EVENT_ID, "Event ID",0,0,0,0 }, + { DIS_FIELDTYPE_UINT8, "State Update Indicator",0,0,0,0 }, + { DIS_FIELDTYPE_PAD8, "Padding",0,0,0,0 }, + { DIS_FIELDTYPE_UINT16, "Passive Parameter Index", 0,0,0,0 }, /* !! enum !! */ + { DIS_FIELDTYPE_UINT8, "Propulsion Plant Configuration",0,0,0,0 }, /* !! enum !! */ + { DIS_FIELDTYPE_NUM_OF_SHAFTS, "Number of Shafts",0,0,0,&numShafts }, + { DIS_FIELDTYPE_NUM_OF_APAS, "Number of Additional Passive Activities (APA)",0,0,0,&numApas }, + { DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEMS, "Number of UA Emitter Systems",0,0,0,&numUAEmitter }, + { DIS_FIELDTYPE_SHAFTS, "Shafts",0,0,0,0 }, + { DIS_FIELDTYPE_APA, "APAs",0,0,0,0 }, + { DIS_FIELDTYPE_UA_EMITTER_SYSTEMS, "Underwater Acoustic Emission System",0,0,0,0 }, + { DIS_FIELDTYPE_UA_BEAMS, "Beams",0,0,0,0 }, + { DIS_FIELDTYPE_END, NULL,0,0,0,0 } +}; + + /* DIS Radio Communications protocol (RCP) family PDUs */ DIS_ParserNode DIS_PARSER_TRANSMITTER_PDU[] = @@ -440,6 +464,7 @@ void initializeParsers(void) /* DIS Distributed Emission Regeneration PDUs */ initializeParser(DIS_PARSER_ELECTROMAGNETIC_EMISSION_PDU); + initializeParser(DIS_PARSER_UNDERWATER_ACOUSTIC_PDU); /* DIS Radio Communications protocol (RCP) family PDUs */ initializeParser(DIS_PARSER_TRANSMITTER_PDU); @@ -643,6 +668,36 @@ void initializeParser(DIS_ParserNode parserNodes[]) DIS_FIELDS_TRACK_JAM, &parserNodes[parserIndex].ettVar); break; + case DIS_FIELDTYPE_SHAFTS: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_VR_UA_SHAFT, + &parserNodes[parserIndex].ettVar); + break; + case DIS_FIELDTYPE_APA: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_VR_APA, + &parserNodes[parserIndex].ettVar); + break; + case DIS_FIELDTYPE_UA_EMITTER_SYSTEMS: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_VR_UA_EMITTER_SYSTEM, + &parserNodes[parserIndex].ettVar); + break; + case DIS_FIELDTYPE_UA_EMITTER_SYSTEM: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_UA_EMITTER_SYSTEM, + &parserNodes[parserIndex].ettVar); + break; + case DIS_FIELDTYPE_UA_BEAMS: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_VR_UA_BEAM, + &parserNodes[parserIndex].ettVar); + break; + case DIS_FIELDTYPE_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA: + parserNodes[parserIndex].children = createSubtree( + DIS_FIELDS_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA, + &parserNodes[parserIndex].ettVar); + break; /* Array records */ case DIS_FIELDTYPE_FIXED_DATUMS: parserNodes[parserIndex].children = createSubtree( @@ -1153,6 +1208,8 @@ gint parseFields(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode pa case DIS_FIELDTYPE_MODULATION_TYPE: case DIS_FIELDTYPE_EMITTER_SYSTEM: case DIS_FIELDTYPE_FUNDAMENTAL_PARAMETER_DATA: + case DIS_FIELDTYPE_UA_EMITTER_SYSTEM: + case DIS_FIELDTYPE_UA_BEAM_FUNDAMENTAL_PARAMETER_DATA: newField = proto_tree_add_text(tree, tvb, offset, -1, "%s", parserNodes[fieldIndex].fieldLabel); if (parserNodes[fieldIndex].children != 0) @@ -1417,6 +1474,138 @@ gint parseFields(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode pa } } break; + case DIS_FIELDTYPE_NUM_OF_SHAFTS: + { + uintVal = tvb_get_guint8(tvb, offset); + proto_tree_add_item(tree, hf_dis_num_shafts, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + *(parserNodes[fieldIndex].outputVar) = (guint32)uintVal; + } + break; + case DIS_FIELDTYPE_SHAFTS: + { + guint i; + + if (numShafts > DIS_PDU_MAX_SHAFTS) + { + numShafts = DIS_PDU_MAX_SHAFTS; + } + + for (i = 0; i < numShafts; ++i) + { + newField = proto_tree_add_text(tree, tvb, offset, -1, "%s [%d of %d]", + parserNodes[fieldIndex].fieldLabel, i+1, numShafts); + if (parserNodes[fieldIndex].children != 0) + { + proto_item *newSubtree = + proto_item_add_subtree(newField, + parserNodes[fieldIndex].ettVar); + offset = parseFields(tvb, newSubtree, offset, + parserNodes[fieldIndex].children); + } + proto_item_set_end(newField, tvb, offset); + } + } + break; + case DIS_FIELDTYPE_NUM_OF_APAS: + { + uintVal = tvb_get_guint8(tvb, offset); + proto_tree_add_item(tree, hf_dis_num_apas, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + *(parserNodes[fieldIndex].outputVar) = (guint32)uintVal; + } + break; + case DIS_FIELDTYPE_APA: + { + guint i; + + if (numApas > DIS_PDU_MAX_APAS) + { + numApas = DIS_PDU_MAX_APAS; + } + + for (i = 0; i < numApas; ++i) + { + newField = proto_tree_add_text(tree, tvb, offset, -1, "%s [%d of %d]", + parserNodes[fieldIndex].fieldLabel, i+1, numApas); + if (parserNodes[fieldIndex].children != 0) + { + proto_item *newSubtree = + proto_item_add_subtree(newField, + parserNodes[fieldIndex].ettVar); + offset = parseFields(tvb, newSubtree, offset, + parserNodes[fieldIndex].children); + } + proto_item_set_end(newField, tvb, offset); + } + } + break; + case DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEMS: + { + uintVal = tvb_get_guint8(tvb, offset); + proto_tree_add_item(tree, hf_dis_num_ua_emitter_systems, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + *(parserNodes[fieldIndex].outputVar) = (guint32)uintVal; + } + break; + case DIS_FIELDTYPE_NUM_OF_UA_EMITTER_SYSTEM_BEAMS: + { + uintVal = tvb_get_guint8(tvb, offset); + offset = parseField_UInt(tvb, tree, offset, parserNodes[fieldIndex], 1); + numUABeams += uintVal; + } + break; + case DIS_FIELDTYPE_UA_EMITTER_SYSTEMS: + { + guint i; + + if (numUAEmitter > DIS_PDU_MAX_UA_EMITTER_SYSTEMS) + { + numUAEmitter = DIS_PDU_MAX_UA_EMITTER_SYSTEMS; + } + + for (i = 0; i < numUAEmitter; ++i) + { + newField = proto_tree_add_text(tree, tvb, offset, -1, "%s [%d of %d]", + parserNodes[fieldIndex].fieldLabel, i+1, numUAEmitter); + if (parserNodes[fieldIndex].children != 0) + { + proto_item *newSubtree = + proto_item_add_subtree(newField, + parserNodes[fieldIndex].ettVar); + offset = parseFields(tvb, newSubtree, offset, + parserNodes[fieldIndex].children); + } + proto_item_set_end(newField, tvb, offset); + } + } + break; + case DIS_FIELDTYPE_UA_BEAMS: + { + guint i; + + if (numUABeams > DIS_PDU_MAX_UA_BEAMS) + { + numUABeams = DIS_PDU_MAX_UA_BEAMS; + } + + for (i = 0; i < numUABeams; ++i) + { + newField = proto_tree_add_text(tree, tvb, offset, -1, "%s [%d of %d]", + parserNodes[fieldIndex].fieldLabel, i+1, numUABeams); + if (parserNodes[fieldIndex].children != 0) + { + proto_item *newSubtree = + proto_item_add_subtree(newField, + parserNodes[fieldIndex].ettVar); + offset = parseFields(tvb, newSubtree, offset, + parserNodes[fieldIndex].children); + } + proto_item_set_end(newField, tvb, offset); + } + numUABeams = 0; // reset beam count for this pdu + } + break; default: break; } diff --git a/epan/dissectors/packet-dis-pdus.h b/epan/dissectors/packet-dis-pdus.h index 01a235d8d0..e964371734 100644 --- a/epan/dissectors/packet-dis-pdus.h +++ b/epan/dissectors/packet-dis-pdus.h @@ -39,6 +39,7 @@ extern DIS_ParserNode DIS_PARSER_DETONATION_PDU[]; /* DIS Distributed Emission Regeneration PDUs */ extern DIS_ParserNode DIS_PARSER_ELECTROMAGNETIC_EMISSION_PDU[]; +extern DIS_ParserNode DIS_PARSER_UNDERWATER_ACOUSTIC_PDU[]; /* DIS Radio Communications protocol (RCP) family PDUs */ extern DIS_ParserNode DIS_PARSER_TRANSMITTER_PDU[]; diff --git a/epan/dissectors/packet-dis.c b/epan/dissectors/packet-dis.c index a63db6ece3..bb8ee47758 100644 --- a/epan/dissectors/packet-dis.c +++ b/epan/dissectors/packet-dis.c @@ -118,6 +118,9 @@ int hf_dis_mod_param_transmitter_second_mode = -1; int hf_dis_mod_param_sync_state = -1; int hf_dis_mod_param_network_sync_id = -1; int hf_dis_antenna_pattern_parameter_dump = -1; +int hf_dis_num_shafts = -1; +int hf_dis_num_apas = -1; +int hf_dis_num_ua_emitter_systems = -1; /* Initialize the subtree pointers */ static gint ett_dis = -1; @@ -292,6 +295,10 @@ static gint dissect_dis(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi pduParser = DIS_PARSER_ELECTROMAGNETIC_EMISSION_PDU; break; + case DIS_PDUTYPE_UNDERWATER_ACOUSTIC: + pduParser = DIS_PARSER_UNDERWATER_ACOUSTIC_PDU; + break; + /* DIS Radio Communications protocol (RCP) family PDUs */ case DIS_PDUTYPE_TRANSMITTER: pduParser = DIS_PARSER_TRANSMITTER_PDU; @@ -416,6 +423,15 @@ static gint dissect_dis(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi ); break; + case DIS_PDUTYPE_UNDERWATER_ACOUSTIC: + col_add_fstr( pinfo->cinfo, COL_INFO, + "PDUType: %s, Shafts=%d, APA=%d, Acoustic Emitter=%d", + pduString, + numShafts, + numApas, + numUAEmitter + ); + break; case DIS_PDUTYPE_SIGNAL: col_add_fstr( pinfo->cinfo, COL_INFO, "PDUType: %s, RadioID=%u, Encoding Type=%s, Number of Samples=%u", @@ -774,6 +790,21 @@ void proto_register_dis(void) FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} }, + { &hf_dis_num_shafts, + { "Number of Shafts", "dis.ua.number_of_shafts", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_dis_num_apas, + { "Number of APAs", "dis.ua.number_of_apas", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_dis_num_ua_emitter_systems, + { "Number of UA Emitter Systems", "dis.ua.number_of_ua_emitter_systems", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, }; /* Setup protocol subtree array */ |