From a063532343ff5e5f7d4795471ef2b29eaae9e43d Mon Sep 17 00:00:00 2001 From: Anders Broman Date: Mon, 11 Jul 2005 22:23:15 +0000 Subject: From Jeremy j Ouellette: DIS dissection. svn path=/trunk/; revision=14899 --- epan/dissectors/packet-dis-fields.h | 166 ++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 epan/dissectors/packet-dis-fields.h (limited to 'epan/dissectors/packet-dis-fields.h') diff --git a/epan/dissectors/packet-dis-fields.h b/epan/dissectors/packet-dis-fields.h new file mode 100644 index 0000000000..71dfbd8c30 --- /dev/null +++ b/epan/dissectors/packet-dis-fields.h @@ -0,0 +1,166 @@ +/* packet-dis-fields.h + * Declarations for DIS field parsing. + * Copyright 2005, Scientific Research Corporation + * Initial implementation by Jeremy Ouellette + * + * Ethereal - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __PACKET_DIS_FIELDPARSERS_H__ +#define __PACKET_DIS_FIELDPARSERS_H__ + +#include + +/* enumeration of all field types used for DIS parsing. */ +typedef enum +{ + /* end marker to indicate the end of a parser sequence */ + DIS_FIELDTYPE_END = 0, + + /* basic numeric types */ + DIS_FIELDTYPE_INT8, + DIS_FIELDTYPE_INT16, + DIS_FIELDTYPE_INT32, + DIS_FIELDTYPE_INT64, + DIS_FIELDTYPE_UINT8, + DIS_FIELDTYPE_UINT16, + DIS_FIELDTYPE_UINT32, + DIS_FIELDTYPE_UINT64, + DIS_FIELDTYPE_FLOAT32, + DIS_FIELDTYPE_FLOAT64, + + /* padding */ + DIS_FIELDTYPE_PAD8, + DIS_FIELDTYPE_PAD16, + DIS_FIELDTYPE_PAD32, + + /* other atomic types, including enumerations */ + DIS_FIELDTYPE_APPEARANCE, + DIS_FIELDTYPE_ARTIC_PARAM_TYPE_DESIGNATOR, + DIS_FIELDTYPE_ARTIC_PARAM_TYPE, + DIS_FIELDTYPE_CAPABILITIES, + DIS_FIELDTYPE_CATEGORY, + DIS_FIELDTYPE_COUNTRY, + DIS_FIELDTYPE_DEAD_RECKONING_PARAMS, + DIS_FIELDTYPE_DEAD_RECKONING_ALGORITHM, + DIS_FIELDTYPE_DEAD_RECKONING_OTHER_PARAMS, + DIS_FIELDTYPE_DETONATION_RESULT, + DIS_FIELDTYPE_DOMAIN, + DIS_FIELDTYPE_ENTITY_KIND, + DIS_FIELDTYPE_ENTITY_MARKING, + DIS_FIELDTYPE_EXTRA, + DIS_FIELDTYPE_FORCE_ID, + DIS_FIELDTYPE_FUSE, + DIS_FIELDTYPE_ORIENTATION, + DIS_FIELDTYPE_PDU_TYPE, + DIS_FIELDTYPE_PROTOCOL_FAMILY, + DIS_FIELDTYPE_PROTOCOL_VERSION, + DIS_FIELDTYPE_SPECIFIC, + DIS_FIELDTYPE_SUBCATEGORY, + DIS_FIELDTYPE_TIMESTAMP, + DIS_FIELDTYPE_WARHEAD, + + /* composite types */ + DIS_FIELDTYPE_ARTICULATION_PARAMETERS, + DIS_FIELDTYPE_BURST_DESCRIPTOR, + DIS_FIELDTYPE_ENTITY_ID, + DIS_FIELDTYPE_ENTITY_TYPE, + DIS_FIELDTYPE_EVENT_ID, + DIS_FIELDTYPE_LINEAR_VELOCITY, + DIS_FIELDTYPE_LOCATION_WORLD, + DIS_FIELDTYPE_LOCATION_ENTITY +} DIS_FieldType; + +/* Struct which contains the data needed to parse a single DIS field. + */ +typedef struct DIS_ParserNode_T +{ + DIS_FieldType fieldType; + const char *fieldLabel; + int ettVar; + struct DIS_ParserNode_T *children; + guint32 *outputVar; +} DIS_ParserNode; + +/* Struct which associates a name with a particular bit combination. + */ +typedef struct +{ + guint32 value; + const char *label; +} DIS_BitMaskMapping; + +/* Struct which specifies all possible bit mappings associated with + * a particular bit mask. + */ +typedef struct +{ + guint32 maskBits; + guint32 shiftBits; + const char *label; + DIS_BitMaskMapping bitMappings[33]; +} DIS_BitMask; + +extern DIS_ParserNode DIS_FIELDS_PDU_HEADER[]; + +extern DIS_ParserNode DIS_FIELDS_ENTITY_ID[]; + +extern DIS_ParserNode DIS_FIELDS_ENTITY_TYPE[]; + +extern DIS_ParserNode DIS_FIELDS_EVENT_ID[]; + +extern DIS_ParserNode DIS_FIELDS_LINEAR_VELOCITY[]; + +extern DIS_ParserNode DIS_FIELDS_LOCATION_WORLD[]; + +extern DIS_ParserNode DIS_FIELDS_LOCATION_ENTITY[]; + +extern DIS_ParserNode DIS_FIELDS_BURST_DESCRIPTOR[]; + +extern DIS_ParserNode DIS_FIELDS_ARTICULATION_PARAMETER[]; + +extern DIS_ParserNode DIS_FIELDS_ORIENTATION[]; + +extern DIS_ParserNode DIS_FIELDS_NONE[]; + +extern DIS_BitMask DIS_APPEARANCE_LANDPLATFORM[]; + +extern DIS_BitMask DIS_APPEARANCE_LIFEFORM[]; + +gint parseField_Bytes(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_Bitmask(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_UInt(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_Int(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_Enum(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_Pad(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode, guint numBytes); + +gint parseField_Float(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode); + +gint parseField_Double(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNode parserNode); + +extern guint32 pduType; +extern guint32 entityKind; +extern guint32 entityDomain; + +#endif /* packet-dis-fieldparsers.h */ -- cgit v1.2.3