forked from osmocom/wireshark
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
This commit is contained in:
parent
aed95072b4
commit
3a64f93a00
1
AUTHORS
1
AUTHORS
|
@ -3693,6 +3693,7 @@ Tim Hentenaar <tim.hentenaar[AT]gmail.com>
|
|||
Krishnamurthy Mayya <krishnamurthymayya[AT]gmail.com>
|
||||
Nikitha Malgi <nikitha01[AT]gmail.com>
|
||||
Adam Butcher <adam[AT]jessamine.co.uk>
|
||||
Hendrik Uhlmann <Hendrik.Uhlmann[AT]rheinmetall.com>
|
||||
|
||||
Dan Lasley <dlasley[AT]promus.com> gave permission for his
|
||||
dumpit() hex-dump routine to be used.
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue