diff options
Diffstat (limited to 'plugins/epan/profinet/packet-pn.h')
-rw-r--r-- | plugins/epan/profinet/packet-pn.h | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/plugins/epan/profinet/packet-pn.h b/plugins/epan/profinet/packet-pn.h new file mode 100644 index 0000000000..77cd635348 --- /dev/null +++ b/plugins/epan/profinet/packet-pn.h @@ -0,0 +1,174 @@ +/* packet-pn.h + * Common functions for other PROFINET protocols like DCP, MRP, ... + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1999 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/* + * Cyclic PNIO RTC1 Data Dissection: + * + * Added new structures to packet-pn.h to transfer the gained data of + * packet-pn-dcp.c and packet-dcerpc-pn-io.c to packet-pn-rtc-one.c for + * detailled dissection of cyclic PNIO RTC1 dataframes. + * + */ + +#define FRAME_ID_DCP_HELLO 0xfefc +#define FRAME_ID_DCP_GETORSET 0xfefd +#define FRAME_ID_DCP_IDENT_REQ 0xfefe +#define FRAME_ID_DCP_IDENT_RES 0xfeff + + +/* ---- Structures for pnio_rtc1 ---- */ +extern int proto_pn_dcp; +extern int proto_pn_io_apdu_status; +extern gboolean pnio_ps_selection; /* given by pnio preferences */ + +/* Structure for general station information */ +typedef struct tagStationInfo { + /* general information */ + gchar *typeofstation; + gchar *nameofstation; + guint16 u16Vendor_id; + guint16 u16Device_id; + /* frame structure */ + guint16 ioDataObjectNr; + guint16 iocsNr; + /* GSDfile station information */ + gboolean gsdFound; + gboolean gsdPathLength; + gchar *gsdLocation; + /* IOCS object data */ + wmem_list_t *iocs_data_in; + wmem_list_t *iocs_data_out; + /* IOData object data */ + wmem_list_t *ioobject_data_in; + wmem_list_t *ioobject_data_out; + /* Different ModuleIdentnumber */ + wmem_list_t *diff_module; +} stationInfo; + +typedef struct tagApduStatusSwitch +{ + gboolean isRedundancyActive; + address dl_dst; + address dl_src; +}apduStatusSwitch; + +/* Structure for IOCS Frames */ +typedef struct tagIocsObject { + guint16 slotNr; + guint16 subSlotNr; + guint16 frameOffset; +} iocsObject; + +/* Structure for IO Data Objects */ +typedef struct tagIoDataObject { + guint16 slotNr; + guint16 subSlotNr; + guint32 moduleIdentNr; + guint32 subModuleIdentNr; + guint16 frameOffset; + guint16 length; + guint16 amountInGSDML; + guint32 fParameterIndexNr; + guint16 f_par_crc1; + guint16 f_src_adr; + guint16 f_dest_adr; + gboolean f_crc_seed; + guint8 f_crc_len; + address srcAddr; + address dstAddr; + gboolean profisafeSupported; + gboolean discardIOXS; + gchar *moduleNameStr; + tvbuff_t *tvb_slot; + tvbuff_t *tvb_subslot; + /* Status- or Controlbyte data*/ + guint8 last_sb_cb; + guint8 lastToggleBit; +} ioDataObject; + +/* Structure for Modules with different ModuleIdentnumber */ +typedef struct tagModuleDiffInfo { + guint16 slotNr; + guint32 modulID; +} moduleDiffInfo; + + +extern void init_pn(int proto); +extern void init_pn_io_rtc1(int proto); + +extern void init_pnio_rtc1_station(stationInfo *station_info); + +extern int dissect_pn_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, int hfindex, guint8 *pdata); + +extern int dissect_pn_uint16_ret_item(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, + proto_tree *tree, int hfindex, guint16 *pdata, proto_item ** new_item); +extern int dissect_pn_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, int hfindex, guint16 *pdata); + +extern int dissect_pn_int16(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, int hfindex, gint16 *pdata); + +extern int dissect_pn_oid(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, int hfindex, guint32 *pdata); + +extern int dissect_pn_mac(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, int hfindex, guint8 *pdata); + +extern int dissect_pn_ipv4(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, int hfindex, guint32 *pdata); + +extern int dissect_pn_uuid(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, int hfindex, e_guid_t *uuid); + +extern int dissect_pn_undecoded(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, guint32 length); + +extern int dissect_pn_user_data(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, + proto_tree *tree, guint32 length, const char *text); + +#define SUBST_DATA 1 +#define FRAG_DATA 2 + +extern int dissect_pn_user_data_bytes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, + proto_tree *tree, guint32 length, int iSelect); + +extern int dissect_pn_malformed(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, guint32 length); + +extern int dissect_pn_padding(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, int length); + +extern int dissect_pn_align4(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); + +extern int dissect_PNIO_C_SDU_RTC1(tvbuff_t *tvb, int offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep _U_); + +extern void pn_append_info(packet_info *pinfo, proto_item *dcp_item, const char *text); + +extern gboolean dissect_CSF_SDU_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data); + +#define MAX_LINE_LENGTH 1024 /* used for fgets() */ + +/* Read a string from an "xml" file, dropping xml comment blocks */ +#include <stdio.h> +extern char *pn_fgets(char *str, int n, FILE *stream); |