![Michael Mann](/assets/img/avatar_default.png)
I coincidentally found a few files with errors, so I thought it might be time to run it on the whole directory again. Change-Id: Ia32e54b3b1b94e5a418ed758ea79807c8bc7e798 Reviewed-on: https://code.wireshark.org/review/978 Reviewed-by: Michael Mann <mmann78@netscape.net>
2017 lines
72 KiB
C
2017 lines
72 KiB
C
/* packet-wreth.c
|
|
* Functions for the WSE Remote Ethernet Dissector
|
|
*
|
|
* Dissector - WSE RemoteEthernet
|
|
* By Clement Marrast <clement.marrast@molex.com>
|
|
* Copyright 2012 Clement Marrast
|
|
*
|
|
* 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, see <http://www.gnu.org/licenses/>
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <epan/packet.h>
|
|
|
|
#define WRETH_PORT 0xAAAA
|
|
|
|
void proto_register_wreth(void);
|
|
void proto_reg_handoff_wreth(void);
|
|
|
|
static void dissect_wreth(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
|
|
static gint WrethIdentPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethConnectPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethDisconnectPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethBlinkyPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethGetValuePacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethSetValuePacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethBoostPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethAckPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethNackPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethMailPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree);
|
|
static gint WrethMailDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree, guint8 fragmented);
|
|
static gint WrethCodefMasterInfoDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethMailboxTree);
|
|
static gint WrethCodefEquipmentInfoDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethMailboxTree);
|
|
|
|
/* Remote ethernet sub packet type */
|
|
#define WSE_RETH_SUBTYPE 0x0200
|
|
|
|
/* Remote ethernet function code */
|
|
#define WRETH_IDENT 1
|
|
#define WRETH_CONNECT 2
|
|
#define WRETH_ACK 3
|
|
#define WRETH_NACK 4
|
|
#define WRETH_DISCONNECT 5
|
|
#define WRETH_MAIL 6
|
|
#define WRETH_BLINKY 7
|
|
#define WRETH_GET_VALUE 8
|
|
#define WRETH_SET_VALUE 9
|
|
#define WRETH_BOOST 10
|
|
|
|
/* Remote ethernet error code */
|
|
#define WRETH_BAD_FUNCTION_CODE 1
|
|
#define WRETH_ALREADY_CONNECTED 2
|
|
#define WRETH_INVALID_PROTOCOL_VERSION 3
|
|
#define WRETH_NOT_CONNECTED 4
|
|
#define WRETH_INVALID_MAC_ADDRESS 5
|
|
#define WRETH_INVALID_FRAME_SIZE 6
|
|
#define WRETH_NO_MEMORY_AVAILABLE 7
|
|
#define WRETH_BAD_PARAMETER 8
|
|
#define WRETH_TASK_REGISTERED 9
|
|
|
|
/* Initialize the protocol and registered fields */
|
|
static gint wreth_proto = -1;
|
|
|
|
/* static gint wreth_mail_proto = -1; */
|
|
static int hf_Wreth_Subtype = -1;
|
|
static int hf_Wreth_Size = -1;
|
|
static int hf_Wreth_FunctionCode = -1;
|
|
static int hf_Wreth_FrameId = -1;
|
|
static int hf_Wreth_ErrorCode = -1;
|
|
static int hf_Wreth_Fragmented = -1;
|
|
static int hf_Wreth_Retry = -1;
|
|
static int hf_Wreth_IdentificationBiosVersion = -1;
|
|
static int hf_Wreth_IdentificationBoardNumber = -1;
|
|
static int hf_Wreth_IdentificationProtocolVersion = -1;
|
|
static int hf_Wreth_IdentificationBoardId = -1;
|
|
static int hf_Wreth_IdentificationState = -1;
|
|
static int hf_Wreth_IdentificationMacAddr = -1;
|
|
static int hf_Wreth_ConnectProtocolVersion = -1;
|
|
static int hf_Wreth_ConnectTimeout = -1;
|
|
static int hf_Wreth_BlinkyPeriod = -1;
|
|
static int hf_Wreth_GetValueVal = -1;
|
|
static int hf_Wreth_SetValueVal = -1;
|
|
static int hf_Wreth_BoostValue = -1;
|
|
static int hf_Wreth_MailDestTic = -1;
|
|
static int hf_Wreth_MailReserved = -1;
|
|
static int hf_Wreth_Mail_Codef = -1;
|
|
static int hf_Wreth_Mail_Status = -1;
|
|
static int hf_Wreth_Mail_TicUser_Root = -1;
|
|
static int hf_Wreth_Mail_PidUser = -1;
|
|
static int hf_Wreth_Mail_Mode = -1;
|
|
static int hf_Wreth_Mail_Time = -1;
|
|
static int hf_Wreth_Mail_Stop = -1;
|
|
static int hf_Wreth_Mail_Nfonc = -1;
|
|
static int hf_Wreth_Mail_Ncard = -1;
|
|
static int hf_Wreth_Mail_Nchan = -1;
|
|
static int hf_Wreth_Mail_Nes = -1;
|
|
static int hf_Wreth_Mail_Nb = -1;
|
|
static int hf_Wreth_Mail_TypVar = -1;
|
|
static int hf_Wreth_Mail_Adr = -1;
|
|
static int hf_Wreth_Mail_TicUser_DispCyc = -1;
|
|
static int hf_Wreth_Mail_Nb_Max_Size_Mail = -1;
|
|
static int hf_Wreth_Mail_User_ThreadID = -1;
|
|
static int hf_Wreth_Mail_DispCyc_Version = -1;
|
|
static int hf_Wreth_Mail_DifUserParam = -1;
|
|
static int hf_Wreth_Mail_Filler = -1;
|
|
/* static int hf_Wreth_Mail_Data = -1; */
|
|
static int hf_Wreth_Mail_Mastinf_Version = -1;
|
|
static int hf_Wreth_Mail_Mastinf_Release = -1;
|
|
static int hf_Wreth_Mail_Mastinf_Protocol = -1;
|
|
static int hf_Wreth_Mail_Mastinf_CyclicFlux = -1;
|
|
static int hf_Wreth_Mail_Mastinf_szProtocolName = -1;
|
|
static int hf_Wreth_Mail_Mastinf_MaxTypeEquipment = -1;
|
|
static int hf_Wreth_Mail_Mastinf_MinEquipmentNumber = -1;
|
|
static int hf_Wreth_Mail_Mastinf_MaxEquipmentNumber = -1;
|
|
static int hf_Wreth_Mail_Equinf_Version = -1;
|
|
static int hf_Wreth_Mail_Equinf_Release = -1;
|
|
static int hf_Wreth_Mail_Equinf_Network = -1;
|
|
static int hf_Wreth_Mail_Equinf_Protocol = -1;
|
|
static int hf_Wreth_Mail_Equinf_Messaging = -1;
|
|
static int hf_Wreth_Mail_Equinf_Equipment = -1;
|
|
static int hf_Wreth_Mail_Equinf_Flux = -1;
|
|
static int hf_Wreth_Mail_Equinf_IncWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_IncDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_IncFWord = -1;
|
|
static int hf_Wreth_Mail_Mastinf_DllItemName = -1;
|
|
static int hf_Wreth_Mail_Mastinf_szEquipmentName = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteIBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadIBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteQBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadQBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakQBit = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteIByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadIByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakIByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteQByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadQByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakQByte = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteIWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadIWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakIWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteQWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadQWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakQWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxWriteFWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_MaxReadFWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakFWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_ReadFactorWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_ReadFactorIWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_ReadFactorQWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_ReadFactorDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_ReadFactorFWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_WriteFactorWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_WriteFactorIWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_WriteFactorQWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_WriteFactorDWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_WriteFactorFWord = -1;
|
|
static int hf_Wreth_Mail_Equinf_DataFormat = -1;
|
|
static int hf_Wreth_Mail_Equinf_BreakIBit = -1;
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_wreth = -1;
|
|
|
|
/* Note: vals are stored as unsigned 32 bit quantities */
|
|
static const value_string tabStatus[] = {
|
|
{ 0, "stat_ok" },
|
|
{ 1, "stat_err_fonc" },
|
|
{ 2, "stat_err_addr" },
|
|
{ 3, "stat_bad_frame" },
|
|
{ 4, "stat_lock_data" },
|
|
{ 10, "STAT_QUEUE_OVERFLOW" },
|
|
|
|
{ 32, "stat_par" },
|
|
{ 33, "statjb_timeout" },
|
|
{ 34, "statjb_crc" },
|
|
{ 35, "stat_cyc_inc" },
|
|
{ 36, "stat_escl_inconnu" },
|
|
|
|
{ 40, "STAT_DIF_MAX_THREAD" },
|
|
{ 41, "stat_dif_full" },
|
|
{ 42, "stat_dif_empty" },
|
|
{ 43, "STAT_NES_UNKNOWN" },
|
|
{ 45, "stat_no_soft" },
|
|
{ 46, "stat_conf" },
|
|
{ 47, "stat_no_board" },
|
|
{ 48, "stat_timeout_cts" },
|
|
{ 49, "stat_timeout_wait" },
|
|
{ 50, "stat_fill" },
|
|
{ 51, "stat_sys" },
|
|
{ 52, "stat_bug" },
|
|
{ 53, "stat_sync" },
|
|
{ 54, "stat_nopolling" },
|
|
{ 55, "stat_badintpol" },
|
|
{ 56, "stat_answer" },
|
|
{ 57, "stat_no_statment" },
|
|
{ 58, "stat_net_no_ready" },
|
|
{ 59, "stat_key" },
|
|
|
|
{ 60, "stat_no_retmail" },
|
|
{ 61, "stat_no_dsr_gt4000" },
|
|
{ 62, "stat_no_cts_gt4000" },
|
|
{ 63, "stat_timeout_gt4000" },
|
|
{ 64, "stat_bcc_gt4000" },
|
|
{ 65, "STAT_NOT_CONNECT" },
|
|
{ 66, "STAT_RESSOURCE" },
|
|
{ 67, "STAT_ERR_PDU" },
|
|
{ 68, "STAT_OBJECT_NON_EXISTENT" },
|
|
{ 69, "STAT_TYPE_CONFLICT" },
|
|
{ 70, "STAT_ABORT_USER" },
|
|
{ 71, "STAT_ABORT_FMS" },
|
|
{ 72, "STAT_ABORT_LLI" },
|
|
{ 73, "STAT_ABORT_LAYER2" },
|
|
{ 74, "STAT_MAX_PDU_SIZE" },
|
|
{ 75, "STAT_FEATURE_NOT_SUPPORTED" },
|
|
{ 76, "STAT_VERSION_INCOMPATIBLE" },
|
|
{ 77, "STAT_USER_INITIATE_DENIED" },
|
|
{ 78, "STAT_PASSWORD_ERROR" },
|
|
{ 79, "STAT_PROFILE_INCOMPATIBLE" },
|
|
{ 80, "STAT_ABORT_LLI_CONTEXT" },
|
|
{ 81, "STAT_ABORT_LLI_ABT_RC2" },
|
|
{ 82, "STAT_ABORT_LLI_ABT_RC3" },
|
|
{ 83, "STAT_ERR_CLASS_VFD_STATE" },
|
|
{ 84, "STAT_ERR_CLASS_APPLICATION_REF" },
|
|
{ 85, "STAT_ERR_CLASS_DEFINITION" },
|
|
{ 86, "STAT_ERR_CLASS_RESSOURCE" },
|
|
{ 87, "STAT_ERR_CLASS_SERVICE" },
|
|
{ 88, "STAT_ERR_CLASS_ACCESS" },
|
|
{ 89, "STAT_ERR_CLASS_OD" },
|
|
{ 90, "STAT_ERR_CLASS_OTHER" },
|
|
{ 91, "STAT_REJECT_PDU" },
|
|
{ 92, "STAT_ERR_HARDWARE" },
|
|
{ 93, "STAT_DRIVER_ACCESS" },
|
|
{ 94, "STAT_DRIVER_BAD_VERSION" },
|
|
{ 95, "STAT_FILL_BIG_MAIL" },
|
|
{ 96, "STAT_NO_TASK_VERSION" },
|
|
{ 97, "STAT_DLL_LOCKED" },
|
|
{ 98, "STAT_BOARD_LOCKED" },
|
|
{ 99, "STAT_MODEIO_LOCKED" },
|
|
|
|
/*---- RESERVED STATUS FOR USER KIT4000 ----*/
|
|
{ 100, "STAT_KIT_START" },
|
|
/* ..... */
|
|
{ 127, "STAT_KIT_END" },
|
|
/*------------------------------------------*/
|
|
{ 128, "STAT_ERR_NO_REMOTE_CONNECTION" },
|
|
{ 129, "STAT_CONFIG_OK" },
|
|
{ 130, "STAT_CONFIG_NOK" },
|
|
|
|
{ 131, "STAT_DNS_PENDING" },
|
|
{ 132, "STAT_DNS_ERROR" },
|
|
{ 133, "STAT_OVERTIME" },
|
|
|
|
{ 134, "STAT_FRAG_WRITE" },
|
|
{ 135, "STAT_FRAG_READ" },
|
|
|
|
{ 136, "STAT_API_ACCESS" },
|
|
{ 137, "STAT_QUEUE_EMPTY" },
|
|
{ 138, "STAT_QUEUE_FULL" },
|
|
|
|
{ 254, "STAT_DEV_INIT" },
|
|
{ 255, "STAT_NA" },
|
|
{ -11, "index not updated" },
|
|
{ -10, "stat_handshake" },
|
|
{ -9, "stat_event_data" },
|
|
{ -8, "stat_timeout_ic_read" },
|
|
{ -7, "stat_timeout_read" },
|
|
{ -6, "stat_cyc_stopped" },
|
|
{ -5, "stat_dif_not_ready" },
|
|
{ -4, "stat_unchanged" },
|
|
{ -3, "stat_nes_broadcast" },
|
|
{ -2, "Unknown Status" },
|
|
{ -1, "stat_writedif_ok" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext tabStatus_ext = VALUE_STRING_EXT_INIT(tabStatus);
|
|
|
|
static const value_string tabCodef[] = {
|
|
/* Code for monitor */
|
|
{ 0x0000, "TIC_INVALID_ROOT" },
|
|
{ 0x0002, "tic_monitor" },
|
|
|
|
/*Loader*/
|
|
{ 0x0003, "COD_LOAD_TASK" },
|
|
{ 0x0004, "COD_LOAD_TASK" },
|
|
|
|
{ 0x00ff, "TIC_TASK_NON_INIT" }, /* 255 */
|
|
|
|
/* Code for monitor */
|
|
{ 0x0106, "COD_MON_INFO" },
|
|
{ 0x0109, "COD_GETTIC" },
|
|
{ 0x0119, "COD_MON_SETTIME" },
|
|
{ 0x0126, "COD_MON_SIZEMAIL" },
|
|
{ 0x0127, "COD_MON_SETSYNCHRO" },
|
|
{ 0x0128, "COD_MON_GETSYNCHRO" },
|
|
|
|
{ 0x012A, "COD_MON_FLAG_DEBUG" },
|
|
{ 0x012B, "COD_MON_SETSCADA_PT" },
|
|
{ 0x012C, "COD_MON_GETSCADA_PT" },
|
|
|
|
{ 0x0134, "COD_MON_SETGENVAR" },
|
|
{ 0x0135, "COD_MON_GETGENVAR" },
|
|
{ 0x0200, "COD_MON_READFLASHGT" },
|
|
{ 0x0206, "COD_MON_SETCOMSPEED" },
|
|
{ 0x020c, "COD_MON_TESTCARDTYPE" },
|
|
|
|
/*Loader*/
|
|
{ 0x0400, "COD_LOAD_TASK" },
|
|
{ 0x0600, "COD_RELOAD_TASK" },
|
|
|
|
/* Code for master function */
|
|
{ 0x1000, "cod_initmasterline" },
|
|
{ 0x1001, "cod_loadmasterconf" },
|
|
{ 0x1002, "cod_masterinfo" },
|
|
{ 0x1003, "cod_readpackbit" },
|
|
{ 0x1004, "cod_readpackibit" },
|
|
{ 0x1005, "cod_readword" },
|
|
{ 0x1006, "cod_readiword" },
|
|
{ 0x1007, "cod_readdword" },
|
|
{ 0x1008, "cod_readfword" },
|
|
{ 0x1009, "cod_writepackbit" },
|
|
{ 0x100A, "cod_writeword" },
|
|
{ 0x100B, "cod_writedword" },
|
|
{ 0x100C, "cod_writefword" },
|
|
{ 0x100D, "cod_readquickbit" },
|
|
{ 0x100E, "cod_readdiag" },
|
|
{ 0x100F, "cod_readeven" },
|
|
{ 0x1010, "cod_readtrace" },
|
|
{ 0x1011, "cod_statjbus" },
|
|
{ 0x1012, "cod_creatjnet" },
|
|
{ 0x1013, "cod_rijnet" },
|
|
{ 0x1014, "cod_rcjnet" },
|
|
{ 0x1015, "cod_writemes" },
|
|
{ 0x1016, "cod_readmes" },
|
|
{ 0x1017, "cod_manual" },
|
|
{ 0x1018, "cod_automatic" },
|
|
{ 0x1019, "cod_connect" },
|
|
{ 0x101A, "cod_unconnect" },
|
|
{ 0x101B, "cod_iocounter" },
|
|
{ 0x101C, "cod_resetiocounter" },
|
|
{ 0x101D, "codute_identequipment" },
|
|
{ 0x101E, "codute_readbit_SY" },
|
|
{ 0x101F, "codute_readbit_IO" },
|
|
{ 0x1020, "codute_readword_CW" },
|
|
{ 0x1021, "codute_readword_SW" },
|
|
{ 0x1022, "codute_readword_COM" },
|
|
{ 0x1023, "codute_readtempo" },
|
|
{ 0x1024, "codute_readmonost_Mi" },
|
|
{ 0x1025, "codute_readcounter_Ci" },
|
|
{ 0x1026, "codute_readreg_Ri" },
|
|
{ 0x1027, "codute_readsteps_Xi" },
|
|
{ 0x1028, "codute_readdword_DW" },
|
|
{ 0x1029, "codute_readdword_CDW" },
|
|
{ 0x102A, "codute_readone_step" },
|
|
{ 0x102B, "codute_writebit_SY" },
|
|
{ 0x102C, "codute_writebit_IO" },
|
|
{ 0x102D, "codute_writeword_SW" },
|
|
{ 0x102E, "codute_writeword_COM" },
|
|
{ 0x102F, "codute_writetimer_Ti" },
|
|
{ 0x1030, "codute_writemonost_Mi" },
|
|
{ 0x1031, "codute_writecounter_Ci" },
|
|
{ 0x1032, "codute_writereg_Ri" },
|
|
{ 0x1033, "codute_writedword_DW" },
|
|
{ 0x1034, "codute_readbit_B" },
|
|
{ 0x1035, "codute_readword_W" },
|
|
{ 0x1036, "codute_readobjets" },
|
|
{ 0x1037, "codute_readstruc_obj" },
|
|
{ 0x1038, "codute_writebit_B" },
|
|
{ 0x1039, "codute_writeword_W" },
|
|
{ 0x103A, "codute_writestruc_obj" },
|
|
{ 0x103B, "codute_no_requestdata" },
|
|
{ 0x103C, "codute_prot_ver" },
|
|
{ 0x103D, "codute_status" },
|
|
{ 0x103E, "codute_mirror" },
|
|
{ 0x103F, "codute_readerror_count" },
|
|
{ 0x1040, "codute_readstation_status" },
|
|
{ 0x1041, "codute_razerror_counter" },
|
|
{ 0x1042, "codute_write_xgs" },
|
|
{ 0x1043, "codute_stop" },
|
|
{ 0x1044, "codute_run" },
|
|
{ 0x1045, "codute_selftest" },
|
|
{ 0x1046, "codute_init" },
|
|
{ 0x1047, "codute_reserv" },
|
|
{ 0x1048, "codute_unreserv" },
|
|
{ 0x1049, "codute_entreserv" },
|
|
{ 0x104A, "codute_initloader" },
|
|
{ 0x104B, "codute_upload_seg" },
|
|
{ 0x104C, "codute_end_upload_seg" },
|
|
{ 0x104D, "codute_init_download" },
|
|
{ 0x104E, "codute_download_seg" },
|
|
{ 0x104F, "codute_end_download" },
|
|
{ 0x1050, "codute_writereq_file" },
|
|
{ 0x1051, "codute_readanswer_file" },
|
|
{ 0x1052, "codute_exereq_file" },
|
|
{ 0x1053, "codute_razreq_file" },
|
|
{ 0x1054, "codute_stopdrum_DiS" },
|
|
{ 0x1055, "codute_incdrum_DiS" },
|
|
{ 0x1056, "codute_godrum_DiS" },
|
|
{ 0x1057, "codute_readeven_DiS" },
|
|
{ 0x1058, "codute_readone_DiS" },
|
|
{ 0x1059, "codute_write_objet" },
|
|
{ 0x105A, "cod_readpackqbit" },
|
|
{ 0x105B, "cod_writepackqbit" },
|
|
{ 0x105C, "cod_send_rec_txt" },
|
|
{ 0x105D, "cod_iowhite" },
|
|
{ 0x105E, "cod_readpackbyte" },
|
|
{ 0x105F, "cod_readbyte" },
|
|
{ 0x1060, "cod_writepackbyte" },
|
|
{ 0x1061, "cod_writebyte" },
|
|
{ 0x1062, "cod_readwordbcd" },
|
|
{ 0x1063, "cod_writewordbcd" },
|
|
{ 0x1064, "cod_writereadmes" },
|
|
{ 0x1065, "cod_readqword" },
|
|
{ 0x1066, "cod_writeqword" },
|
|
{ 0x1067, "cod_writereaddifmes" },
|
|
{ 0x1068, "cod_readpackibyte" },
|
|
{ 0x1069, "cod_readibyte" },
|
|
{ 0x106A, "cod_readpackqbyte" },
|
|
{ 0x106B, "cod_readqbyte" },
|
|
{ 0x106C, "cod_writepackqbyte" },
|
|
{ 0x106D, "cod_writeqbyte" },
|
|
{ 0x106E, "cod_readident" },
|
|
{ 0x106F, "cod_readpackiqbit" },
|
|
{ 0x1070, "cod_writepackiqbit" },
|
|
{ 0x1071, "cod_layer2profibus" },
|
|
{ 0x1072, "cod_readtimer" },
|
|
{ 0x1073, "cod_writetimer" },
|
|
{ 0x1074, "cod_readcounter" },
|
|
{ 0x1075, "cod_writecounter" },
|
|
{ 0x1076, "0x1076COD_FMSGETOD" },
|
|
{ 0x1077, "cod_endloadmasterconf" },
|
|
{ 0x1078, "COD_FMSSTATUS" },
|
|
{ 0x1079, "COD_EQUIPMENTINFO" },
|
|
{ 0x107A, "COD_WRITEREADPACKBIT" },
|
|
{ 0x107B, "COD_WRITEREADPACKQBIT" },
|
|
{ 0x107C, "COD_WRITEREADPACKBYTE" },
|
|
{ 0x107D, "COD_WRITEREADBYTE" },
|
|
{ 0x107E, "COD_WRITEREADPACKQBYTE" },
|
|
{ 0x107F, "COD_WRITEREADQBYTE" },
|
|
{ 0x1080, "COD_WRITEREADWORD" },
|
|
{ 0x1081, "COD_WRITEREADQWORD" },
|
|
{ 0x1082, "COD_WRITEREADDWORD" },
|
|
{ 0x1083, "COD_WRITEREADFWORD" },
|
|
{ 0x1084, "COD_WRITEREADWORDBCD" },
|
|
{ 0x1085, "COD_CLOSECONNECTION" },
|
|
{ 0x1086, "COD_GET_SUPPORTED_FUNCTION" },
|
|
{ 0x1087, "COD_READOBJECT" },
|
|
{ 0x1088, "COD_WRITEFIELDOBJECT" },
|
|
{ 0x1089, "COD_EQUINFO_OBJ" },
|
|
{ 0x1090, "COD_WRITEREADMSG" },
|
|
{ 0x1091, "COD_START_SCANNER" },
|
|
|
|
/* Code slave function */
|
|
{ 0x2000, "cod_initslave" },
|
|
{ 0x2001, "cod_loadslaveconf" },
|
|
{ 0x2002, "cod_endloadslaveconf" },
|
|
|
|
/* Codes Database*/
|
|
{ 0x3000, "cod_getpackbit" },
|
|
{ 0x3001, "cod_getbit" },
|
|
{ 0x3002, "cod_getword" },
|
|
{ 0x3003, "cod_getdword" },
|
|
{ 0x3004, "cod_getfword" },
|
|
{ 0x3005, "cod_setpackbit" },
|
|
{ 0x3006, "cod_setbit" },
|
|
{ 0x3007, "cod_setword" },
|
|
{ 0x3008, "cod_setdword" },
|
|
{ 0x3009, "cod_setfword" },
|
|
{ 0x300A, "cod_getdispbit" },
|
|
{ 0x300B, "cod_getdispword" },
|
|
{ 0x300C, "cod_getdispdword" },
|
|
{ 0x300D, "cod_getdispfword" },
|
|
{ 0x300E, "cod_setdispbit" },
|
|
{ 0x300F, "cod_setdispword" },
|
|
{ 0x3010, "cod_setdispdword" },
|
|
{ 0x3011, "cod_setdispfword" },
|
|
{ 0x3012, "cod_incdispword" },
|
|
{ 0x3013, "cod_incdispdword" },
|
|
{ 0x3014, "cod_decdispword" },
|
|
{ 0x3015, "cod_decdispdword" },
|
|
{ 0x3016, "cod_getevent" },
|
|
{ 0x3017, "cod_confdb" },
|
|
{ 0x3018, "cod_puteventvar" },
|
|
{ 0x3019, "cod_getpackbyte" },
|
|
{ 0x301A, "cod_setpackbyte" },
|
|
{ 0x301B, "cod_fillbit" },
|
|
{ 0x301C, "cod_fillbyte" },
|
|
{ 0x301D, "cod_fillword" },
|
|
{ 0x301E, "cod_filldword" },
|
|
{ 0x301F, "cod_fillfword" },
|
|
{ 0x3020, "COD_APPGETBIT" },
|
|
{ 0x3021, "COD_DBEXECUTED" },
|
|
{ 0x3022, "COD_GETRIGHTS" },
|
|
{ 0x3023, "COD_WFCYC_COS" },
|
|
{ 0x3024, "COD_END_FCYC" },
|
|
{ 0x3025, "COD_FCYC_END" },
|
|
{ 0x3026, "COD_TAB_FCYC" },
|
|
{ 0x3027, "COD_GETFCYCCOS" },
|
|
{ 0x3028, "COD_SETIOAREAADDR" },
|
|
{ 0x3029, "COD_GETIOAREAADDR" },
|
|
{ 0x3030, "COD_SETACTFNTADDR" },
|
|
{ 0x3031, "COD_GETACTFNTADDR" },
|
|
{ 0x3032, "COD_GETACTFNTBITWORD" },
|
|
|
|
/* Code disp_cyc functions */
|
|
{ 0x4000, "cod_cycinfo" },
|
|
{ 0x4001, "cod_createcyc" },
|
|
{ 0x4002, "cod_startcyc" },
|
|
{ 0x4003, "cod_stopcyc" },
|
|
{ 0x4004, "cod_transcyc" },
|
|
{ 0x4005, "cod_actcyc" },
|
|
{ 0x4006, "cod_initcyc" },
|
|
{ 0x4007, "cod_cycparam" },
|
|
{ 0x4008, "cod_stopallcyc" },
|
|
{ 0x4009, "cod_stopallcycread" },
|
|
{ 0x400A, "cod_stopallcycwrite" },
|
|
{ 0x400B, "cod_cyctimebase" },
|
|
{ 0x400C, "COD_CYCEXECUTED" },
|
|
{ 0x400E, "COD_NEWCREATECYC" },
|
|
{ 0x400F, "COD_DISPCYC_DEBUG" },
|
|
{ 0x4010, "COD_NEWCREATECYC_ID" },
|
|
{ 0x4011, "COD_DESTROYCYC_ID" },
|
|
{ 0x4012, "COD_CREATECYC_OBJ" },
|
|
{ 0x4013, "COD_TRANSCYC_VERIF" },
|
|
{ 0x4014, "COD_CREATECYC_WRMSG" },
|
|
{ 0x4015, "COD_NEWCREATECYC_WRMSG" },
|
|
{ 0x4016, "COD_NEWCREATECYC_WRMSG_ID" },
|
|
{ 0x4017, "COD_CYCEXECUTED_AND_COS" },
|
|
{ 0x4018, "COD_STARTCYCONE" },
|
|
{ 0x4019, "COD_GETCRESCENDO_USB" },
|
|
{ 0x4020, "COD_GETCYCPARAM2" },
|
|
{ 0x4021, "COD_FCYCWRITENONCOS" },
|
|
{ 0x4022, "COD_RESETCPTACTIVATION" },
|
|
|
|
/* Code Root function */
|
|
{ 0x5000, "cod_rootinfo" },
|
|
{ 0x5001, "cod_initjbus" },
|
|
{ 0x5002, "cod_exitjbus" },
|
|
{ 0x5003, "cod_transdif" },
|
|
{ 0x5004, "cod_testtransdif" },
|
|
{ 0x5005, "cod_watchdog" },
|
|
{ 0x5006, "cod_accesskey" },
|
|
{ 0x5007, "cod_getmodem" },
|
|
{ 0x5008, "cod_setmodem" },
|
|
{ 0x5009, "COD_GETSTATIONNAME" },
|
|
{ 0x500A, "COD_GETSTATIONINFO" },
|
|
{ 0x500B, "COD_GETWATCHDOG" },
|
|
{ 0x500C, "COD_DIAG_ROOT" },
|
|
|
|
/* Code bt100 function */
|
|
{ 0x6000, "COD_CREATEBT" },
|
|
{ 0x6001, "COD_TIMEBASEBT" },
|
|
{ 0x6002, "COD_CREATEBASETIME" },
|
|
|
|
/* Code ADMINFL-0 : files */
|
|
{ 0x7000, "COD_OPENFILE" },
|
|
{ 0x7001, "COD_CLOSEFILE" },
|
|
{ 0x7002, "COD_READFILE" },
|
|
{ 0x7003, "COD_WRITEFILE" },
|
|
{ 0x7004, "COD_DELETEFILE" },
|
|
{ 0x7005, "COD_SEEKFILE" },
|
|
{ 0x7006, "COD_TEELFILE" },
|
|
{ 0x7007, "COD_EOFFILE" },
|
|
{ 0x7008, "COD_GETPTRFILE" },
|
|
{ 0x7009, "COD_DIRFILE" },
|
|
|
|
/* Code MSG USER */
|
|
{ 0x7500, "COD_USER_FIRST" },
|
|
|
|
{ 0x7501, "COD_USER_EXCHANGE" },
|
|
{ 0x7502, "COD_USER_STATUSEXCHANGE" },
|
|
{ 0x7503, "COD_USER_SENDFRAME" },
|
|
{ 0x7504, "COD_USER_STATUSSENDFRAME" },
|
|
|
|
{ 0x7600, "COD_USER_EQUIPPARAMSREAD" },
|
|
{ 0x7601, "COD_USER_EQUIPINFOUPDATE" },
|
|
{ 0x7602, "COD_USER_ANALYZESTDREQUEST" },
|
|
{ 0x7603, "COD_USER_ANALYZEOBJREQUEST" },
|
|
{ 0x7604, "COD_USER_PREPROCESSREQUEST" },
|
|
{ 0x7605, "COD_USER_PREPROCESSANSWER" },
|
|
{ 0x7606, "COD_USER_EXEFUNCREQUEST" },
|
|
{ 0x7607, "COD_USER_EXEFUNCANSWER" },
|
|
{ 0x7608, "COD_USER_ABORTFRAME" },
|
|
|
|
{ 0x7700, "COD_USER_GETFUNCTION" },
|
|
{ 0x7701, "COD_USER_EXEFUNCREQ" },
|
|
{ 0x7702, "COD_USER_EXEFUNCACK" },
|
|
|
|
{ 0x7999, "COD_USER_LAST" },
|
|
|
|
/* ??? */
|
|
{ 0x8000, "COD_INDWRITEMASK" },
|
|
|
|
/* Code ADMINMSG-0 : message */
|
|
{ 0x9000, "COD_READMSG" },
|
|
{ 0x9001, "COD_CLEARMSG" },
|
|
{ 0x9002, "COD_DIRMSG" },
|
|
{ 0x9003, "COD_ENABLEMSG" },
|
|
{ 0x9004, "COD_DISABLEMSG" },
|
|
{ 0x9005, "COD_CREATEMSG" },
|
|
{ 0x9006, "COD_GETDESCRMSG" },
|
|
{ 0x9007, "COD_DIRALLMSG" },
|
|
{ 0x9008, "COD_INFOMSG" },
|
|
{ 0x9009, "COD_GETFLAGSMSG" },
|
|
{ 0x900A, "COD_SETFLAGSMSG" },
|
|
{ 0x9100, "COD_MSG_ENABLED" },
|
|
|
|
/* First LLI MAIL Codef */
|
|
{ 0x9500, "COD_LLI_WHITE" },
|
|
|
|
/* system commands */
|
|
{ 0x9510, "COD_MANAGE_INIT" },
|
|
{ 0x9511, "COD_MANAGE_SAP" },
|
|
{ 0x9512, "COD_LLI_DIAG" },
|
|
{ 0x9513, "COD_LLI_MANAGE" },
|
|
{ 0x9514, "COD_ADD_INSTANCE" },
|
|
{ 0x9515, "COD_REM_INSTANCE" },
|
|
{ 0x9516, "COD_GET_MESSAGING" },
|
|
{ 0x9517, "COD_LLI_CMD" },
|
|
|
|
/* protocol commands */
|
|
{ 0x9600, "COD_LLI_EXCHANGE" },
|
|
{ 0x9602, "COD_LLI_INIT" },
|
|
{ 0x9603, "COD_LLI_START" },
|
|
{ 0x9604, "COD_LLI_STOP" },
|
|
{ 0x9605, "COD_LLI_READ_INPUT" },
|
|
{ 0x9606, "COD_LLI_READ_OUTPUT" },
|
|
{ 0x9607, "COD_LLI_ABORT" },
|
|
{ 0x9608, "COD_LLI_TRACE_ON" },
|
|
{ 0x9609, "COD_LLI_TRACE_OFF" },
|
|
{ 0x960A, "COD_LLI_WRITE_OUTPUT" },
|
|
{ 0x960B, "COD_LLI_READ_ASYNC" },
|
|
{ 0x960C, "COD_LLI_WRITE_ASYNC" },
|
|
{ 0x960D, "COD_LLI_DP_SERVICE" },
|
|
{ 0x960E, "COD_LLI_FDL_SERVICE" },
|
|
{ 0x960F, "COD_LLI_SCAN_L2" },
|
|
{ 0x9610, "COD_LLI_SCAN_MESSAGING" },
|
|
{ 0x9611, "COD_LLI_MPISLAVE_SERVICE" },
|
|
{ 0x9612, "COD_LLI_FDL_MESSAGING" },
|
|
|
|
/* Last LLI MAIL Codef */
|
|
{ 0x96FF, "COD_LLI_LAST" },
|
|
|
|
{ 0xA001, "COD_REFRESH_INPUT" },
|
|
{ 0xA002, "COD_REFRESH_OUTPUT" },
|
|
|
|
/* Codef SOCKET */
|
|
{ 0xB001, "COD_SOCKET_CREATE" },
|
|
{ 0xB002, "COD_SOCKET_BIND" },
|
|
{ 0xB003, "COD_SOCKET_CONNECT" },
|
|
{ 0xB004, "COD_SOCKET_LISTEN" },
|
|
{ 0xB005, "COD_SOCKET_ACCEPT" },
|
|
{ 0xB006, "COD_SOCKET_SENDTO" },
|
|
{ 0xB007, "COD_SOCKET_RECVFROM" },
|
|
{ 0xB008, "COD_SOCKET_SEND" },
|
|
{ 0xB009, "COD_SOCKET_RECV" },
|
|
{ 0xB010, "COD_SOCKET_CLOSE" },
|
|
{ 0xB011, "COD_SOCKET_HOST_INFO" },
|
|
{ 0xB012, "COD_SOCKET_PEER_INFO" },
|
|
{ 0xB013, "COD_SOCKET_RECV_GET_DATA" },
|
|
{ 0xB014, "COD_SOCKET_GET_STAT" },
|
|
{ 0xB015, "COD_SOCKET_RESET_STAT" },
|
|
/*New type for the version 2*/
|
|
{ 0xB016, "COD_SOCKET_SETSOCKOPT" },
|
|
{ 0xB017, "COD_SOCKET_SELECT" },
|
|
{ 0xB018, "COD_SOCKET_SHUTDOWN_ALL" },
|
|
{ 0xB019, "COD_SOCKET_DIAG_SUMMARY" },
|
|
{ 0xB01A, "COD_SOCKET_DIAG_DETAILS" },
|
|
{ 0xB01B, "COD_SOCKET_DIAG_SO" },
|
|
{ 0xB01C, "COD_SOCKET_EVENT" },
|
|
|
|
/* Codef ARP */
|
|
{ 0xC000, "COD_ARP_QUERY" },
|
|
{ 0xC001, "COD_ARP_FLUSH" },
|
|
|
|
{ 0xFFEF, "index not updated" }, /* -11 */
|
|
|
|
{ 0xFFFE, "Unknown Status" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext tabCodef_ext = VALUE_STRING_EXT_INIT(tabCodef);
|
|
|
|
static const value_string FunctionCodes[] = {
|
|
{ WRETH_IDENT, "Identification" },
|
|
{ WRETH_CONNECT, "Connection" },
|
|
{ WRETH_ACK, "Acknowledge" },
|
|
{ WRETH_NACK, "Non acknowledge" },
|
|
{ WRETH_DISCONNECT, "Disconnection" },
|
|
{ WRETH_MAIL, "Mail" },
|
|
{ WRETH_BLINKY, "Blinky" },
|
|
{ WRETH_GET_VALUE, "Get value" },
|
|
{ WRETH_SET_VALUE, "Set value" },
|
|
{ WRETH_BOOST, "Boost" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext FunctionCodes_ext = VALUE_STRING_EXT_INIT(FunctionCodes);
|
|
|
|
static const value_string ErrorCode_vals[] = {
|
|
{ 0, "No error" },
|
|
{ WRETH_BAD_FUNCTION_CODE, "Bad function code" },
|
|
{ WRETH_ALREADY_CONNECTED, "Already connected" },
|
|
{ WRETH_INVALID_PROTOCOL_VERSION, "Invalid protocol version" },
|
|
{ WRETH_NOT_CONNECTED, "Not connected" },
|
|
{ WRETH_INVALID_MAC_ADDRESS, "Invalid MAC address" },
|
|
{ WRETH_INVALID_FRAME_SIZE, "Invalid frame size" },
|
|
{ WRETH_NO_MEMORY_AVAILABLE, "No memory available" },
|
|
{ WRETH_BAD_PARAMETER, "Bad parameter" },
|
|
{ WRETH_TASK_REGISTERED, "Task registered" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext ErrorCode_vals_ext = VALUE_STRING_EXT_INIT(ErrorCode_vals);
|
|
|
|
static void dissect_wreth(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|
{
|
|
|
|
guint16 packet_type,functionCode;
|
|
guint8 fragmented;
|
|
proto_item *mi, *ti;
|
|
proto_tree *pWrethTree ;
|
|
guint8 Offset = 0 ;
|
|
|
|
|
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Wreth");
|
|
/* Clear out stuff in the info column */
|
|
col_clear(pinfo->cinfo,COL_INFO);
|
|
|
|
/*Read the packet type, if not good, exit*/
|
|
packet_type = tvb_get_ntohs(tvb,0);
|
|
if(packet_type != WSE_RETH_SUBTYPE) return;
|
|
|
|
mi = proto_tree_add_protocol_format(tree, wreth_proto, tvb, Offset, -1, "WSE remote ethernet");
|
|
pWrethTree = proto_item_add_subtree(mi, ett_wreth);
|
|
|
|
functionCode = tvb_get_letohs(tvb,4);
|
|
fragmented = tvb_get_guint8(tvb,10);
|
|
|
|
if(fragmented > 2)
|
|
{
|
|
col_set_str(pinfo->cinfo, COL_INFO, "Invalid fragmented byte");
|
|
return;
|
|
}
|
|
|
|
if (tree)
|
|
{
|
|
/*Subtype*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_Subtype, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Size*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_Size, tvb, Offset + 2, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Function code*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_FunctionCode, tvb, Offset + 4, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*FrameID*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_FrameId, tvb, Offset + 6, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Error Code*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_ErrorCode, tvb, Offset + 8, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
}
|
|
|
|
/*Fragmented*/
|
|
if(fragmented == 2)
|
|
{
|
|
ti = proto_tree_add_item(pWrethTree, hf_Wreth_Fragmented, tvb, Offset + 10, 1, ENC_LITTLE_ENDIAN);
|
|
proto_item_append_text(ti, ": second fragment");
|
|
|
|
/*Retry*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_Retry, tvb, Offset + 11, 1, ENC_LITTLE_ENDIAN);
|
|
|
|
WrethMailDissection(tvb, Offset + 12, pinfo, pWrethTree, fragmented);
|
|
return;
|
|
}
|
|
|
|
ti = proto_tree_add_item(pWrethTree, hf_Wreth_Fragmented, tvb, Offset + 10, 1, ENC_LITTLE_ENDIAN);
|
|
if(fragmented == 1)
|
|
{
|
|
proto_item_append_text(ti, ": first fragment");
|
|
}else
|
|
proto_item_append_text(ti, ": no");
|
|
|
|
/*Retry*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_Retry, tvb, Offset + 11, 1, ENC_LITTLE_ENDIAN);
|
|
|
|
/* Add items to protocol tree specific to Wreth */
|
|
switch(functionCode)
|
|
{
|
|
case WRETH_IDENT:
|
|
WrethIdentPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_CONNECT:
|
|
WrethConnectPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_ACK:
|
|
WrethAckPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_NACK:
|
|
WrethNackPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_DISCONNECT:
|
|
WrethDisconnectPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_MAIL:
|
|
WrethMailPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_BLINKY:
|
|
WrethBlinkyPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_GET_VALUE:
|
|
WrethGetValuePacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_SET_VALUE:
|
|
WrethSetValuePacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
case WRETH_BOOST:
|
|
WrethBoostPacket(tvb, Offset + 12, pinfo, pWrethTree);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
static const value_string IdentState[] = {
|
|
{ 0, "Ready" },
|
|
{ 1, "Busy"},
|
|
{ 0, NULL }
|
|
};
|
|
|
|
gint WrethIdentPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb, 2);
|
|
|
|
if((Size != 0)&&(Size != 19))
|
|
{
|
|
/* Invalid identification frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid identification frame");
|
|
return 0;
|
|
}
|
|
|
|
if(Size == 0)
|
|
{
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Identification question");
|
|
return 0;
|
|
}
|
|
|
|
/*BiosVersion*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationBiosVersion, tvb, Offset, 6, ENC_ASCII|ENC_NA);
|
|
|
|
/*Board Number*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationBoardNumber, tvb, Offset + 6, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Protocol*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationProtocolVersion, tvb, Offset + 8, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Board Id*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationBoardId, tvb, Offset + 10, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
/*State*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationState, tvb, Offset + 12, 1, ENC_LITTLE_ENDIAN);
|
|
|
|
/*Client MAC address*/
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationMacAddr, tvb, Offset + 13, 6, ENC_NA);
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Identification response");
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethConnectPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree _U_)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 4)
|
|
{
|
|
/* Invalid connection frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid connection frame");
|
|
return 0;
|
|
}
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Connection");
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_ConnectProtocolVersion, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_ConnectTimeout, tvb, Offset + 2, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethDisconnectPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree _U_)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 0)
|
|
{
|
|
/* Invalid disconnection frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid disconnection frame");
|
|
return 0;
|
|
}
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Disconnection");
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethBlinkyPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 2)
|
|
{
|
|
/* Invalid blinky frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid blinky frame");
|
|
return 0;
|
|
}
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Blinky");
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_BlinkyPeriod, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethGetValuePacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
switch(Size)
|
|
{
|
|
case 0:
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Get value question");
|
|
break;
|
|
case 1:
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_GetValueVal, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Get value response");
|
|
break;
|
|
default:
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid get value frame");
|
|
break;
|
|
}
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethSetValuePacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 0)
|
|
{
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid set value frame");
|
|
}
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_SetValueVal, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Set value question");
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
static const value_string BoostValue[] = {
|
|
{ 0, "disabled" },
|
|
{ 1, "enabled"},
|
|
{ 0, NULL }
|
|
};
|
|
|
|
gint WrethBoostPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 2)
|
|
{
|
|
/* Invalid boost frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid boost frame");
|
|
return 0;
|
|
}
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Boost");
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_BoostValue, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethAckPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree _U_)
|
|
{
|
|
guint16 Size;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
|
|
if(Size != 0)
|
|
{
|
|
/* Invalid ack frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid acknowledge frame");
|
|
return 0;
|
|
}
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Acknowledge");
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethNackPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
guint16 Size;
|
|
guint16 ErrorCode;
|
|
|
|
Size = tvb_get_letohs(tvb,2);
|
|
ErrorCode = tvb_get_letohs(tvb,8);
|
|
|
|
if((Size != 0)&&(Size != 6))
|
|
{
|
|
/* Invalid ack frame */
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Invalid non acknowledge frame");
|
|
return 0;
|
|
}
|
|
|
|
|
|
col_add_str(pInfo->cinfo, COL_INFO, val_to_str_ext(ErrorCode, &ErrorCode_vals_ext, "Unknown 0x%04x"));
|
|
|
|
if(Size == 6)
|
|
{
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_IdentificationMacAddr, tvb, Offset, 6, ENC_NA);
|
|
}
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethMailPacket(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree)
|
|
{
|
|
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_MailDestTic, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(pWrethTree, hf_Wreth_MailReserved, tvb, Offset + 2, 4, ENC_LITTLE_ENDIAN);
|
|
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Mail");
|
|
|
|
/*Frame not fragmented => last argument = 0*/
|
|
WrethMailDissection(tvb, Offset+6, pInfo, pWrethTree,0);
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethMailDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo, proto_tree * pWrethTree, guint8 fragmented)
|
|
{
|
|
proto_item *mi;
|
|
proto_tree *pWrethMailboxTree;
|
|
gint Nb = 0;
|
|
guint16 Codef = 0;
|
|
|
|
mi = proto_tree_add_protocol_format(pWrethTree, wreth_proto, tvb, Offset, -1, "MailBox");
|
|
pWrethMailboxTree = proto_item_add_subtree(mi, ett_wreth);
|
|
|
|
/*If it's not the last fragment, display the header of the MailBox*/
|
|
if (2 != fragmented)
|
|
{
|
|
guint16 Card, Chan;
|
|
gint Status;
|
|
|
|
/*Codef*/
|
|
Codef = tvb_get_letohs(tvb,Offset);
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Codef, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Status*/
|
|
Status = (gint16)tvb_get_letohs(tvb,Offset); /* cast fetched value to signed so sign is extended */
|
|
/* so that lookup of 32-bit unsigned in tabCodef */
|
|
/* value_string array will work properly. */
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Status, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*TicUser Root*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_TicUser_Root, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail PidUser*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_PidUser, tvb, Offset, 4, ENC_LITTLE_ENDIAN);
|
|
Offset += 4;
|
|
/*Mail Mode*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Mode, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Time*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Time, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Stop*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Stop, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Nfonc*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Nfonc, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Ncard*/
|
|
Card = tvb_get_letohs(tvb,Offset);
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Ncard, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Nchan*/
|
|
Chan = tvb_get_letohs(tvb,Offset);
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Nchan, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Nes*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Nes, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Nb*/
|
|
Nb = (gint)tvb_get_letohs(tvb,Offset);
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Nb, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail TypVar*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_TypVar, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Adr*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Adr, tvb, Offset, 4, ENC_LITTLE_ENDIAN);
|
|
Offset += 4;
|
|
/*Mail TicUser*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_TicUser_DispCyc, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail Nb Max Size Mail*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Nb_Max_Size_Mail, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail User ThreadID*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_User_ThreadID, tvb, Offset, 4, ENC_LITTLE_ENDIAN);
|
|
Offset += 4;
|
|
/*Mail DispCyc Version*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_DispCyc_Version, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Mail DifUserParam*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_DifUserParam, tvb, Offset, 4, ENC_LITTLE_ENDIAN);
|
|
Offset += 4;
|
|
/*Mail Filler*/
|
|
proto_tree_add_item(pWrethMailboxTree, hf_Wreth_Mail_Filler, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
|
|
col_add_fstr(pInfo->cinfo, COL_INFO, "Mail : Codef = Ox%X (%s), Status = %02d (%s), Card = %d, Chan = %d" ,
|
|
Codef,
|
|
val_to_str_ext(Codef, &tabCodef_ext, "Unknown 0x%04x%"),
|
|
Status,
|
|
val_to_str_ext(Status, &tabStatus_ext, "Unknown %d"),
|
|
Card,
|
|
Chan);
|
|
}
|
|
else
|
|
{
|
|
col_set_str(pInfo->cinfo, COL_INFO, "Mail : Data Second Fragment ");
|
|
}
|
|
|
|
if (0 != Nb)
|
|
{
|
|
/*Specific Decode for some Codef*/
|
|
switch(Codef)
|
|
{
|
|
case 0x1002: /*Master Info*/
|
|
WrethCodefMasterInfoDissection(tvb, Offset, pInfo, pWrethMailboxTree);
|
|
break;
|
|
case 0x1079: /*Equipment Info*/
|
|
WrethCodefEquipmentInfoDissection(tvb, Offset, pInfo, pWrethMailboxTree);
|
|
break;
|
|
default:
|
|
proto_tree_add_protocol_format(pWrethMailboxTree, wreth_proto, tvb, Offset, -1, "Data");
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethCodefMasterInfoDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo _U_, proto_tree * pWrethMailboxTree)
|
|
{
|
|
proto_item *mi;
|
|
proto_tree *pWrethMailboxDataTree;
|
|
|
|
mi = proto_tree_add_protocol_format(pWrethMailboxTree, wreth_proto, tvb, Offset, -1, "Data");
|
|
pWrethMailboxDataTree = proto_item_add_subtree(mi, ett_wreth);
|
|
|
|
/*bVersion*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_Version, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bRelease*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_Release, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bProtocol*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_Protocol, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bCyclicFlux*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_CyclicFlux, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*szProtocolName*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_szProtocolName, tvb, Offset, 16, ENC_ASCII|ENC_NA);
|
|
Offset += 16;
|
|
/*bMaxTypeEquipment*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_MaxTypeEquipment, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*wMinEquipmentNumber*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_MinEquipmentNumber, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxEquipmentNumber*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_MaxEquipmentNumber, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
|
|
return Offset;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gint WrethCodefEquipmentInfoDissection(tvbuff_t *tvb, guint8 Offset, packet_info * pInfo _U_, proto_tree * pWrethMailboxTree)
|
|
{
|
|
proto_item *mi;
|
|
proto_tree *pWrethMailboxDataTree;
|
|
|
|
mi = proto_tree_add_protocol_format(pWrethMailboxTree, wreth_proto, tvb, Offset, -1, "Data");
|
|
pWrethMailboxDataTree = proto_item_add_subtree(mi, ett_wreth);
|
|
|
|
/*bVersion*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Version, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*Free*/
|
|
Offset += 1;
|
|
/*bRelease*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Release, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bNetwork*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Network, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bProtocol*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Protocol, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*bMessaging*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Messaging, tvb, Offset, 1, ENC_LITTLE_ENDIAN);
|
|
Offset += 1;
|
|
/*wEquipment*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Equipment, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wFlux*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_Flux, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Free*/
|
|
Offset += 10;
|
|
/*IncWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_IncWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*IncDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_IncDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*IncFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_IncFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*Free*/
|
|
Offset += 4;
|
|
/*DllItemName*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_DllItemName, tvb, Offset, 14, ENC_ASCII|ENC_NA);
|
|
Offset += 14;
|
|
/*szEquipmentName*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Mastinf_szEquipmentName, tvb, Offset, 16, ENC_ASCII|ENC_NA);
|
|
Offset += 16;
|
|
/*Free*/
|
|
Offset += 2;
|
|
/*wMaxWriteBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteIBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteIBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadIBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadIBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakIBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakIBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteQBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteQBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadQBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadQBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakQBit*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakQBit, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteIByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteIByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadIByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadIByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakIByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakIByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteQByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteQByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadQByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadQByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakQByte*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakQByte, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteIWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteIWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadIWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadIWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakIWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakIWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteQWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteQWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadQWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadQWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakQWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakQWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxWriteFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxWriteFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wMaxReadFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_MaxReadFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wBreakFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_BreakFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wReadFactorWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_ReadFactorWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wReadFactorIWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_ReadFactorIWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wReadFactorQWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_ReadFactorQWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wReadFactorDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_ReadFactorDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wReadFactorFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_ReadFactorFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wWriteFactorWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_WriteFactorWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wWriteFactorIWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_WriteFactorIWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wWriteFactorQWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_WriteFactorQWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wWriteFactorDWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_WriteFactorDWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wWriteFactorFWord*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_WriteFactorFWord, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
/*wDataFormat*/
|
|
proto_tree_add_item(pWrethMailboxDataTree, hf_Wreth_Mail_Equinf_DataFormat, tvb, Offset, 2, ENC_LITTLE_ENDIAN);
|
|
Offset += 2;
|
|
|
|
return Offset;
|
|
}
|
|
|
|
void proto_register_wreth(void)
|
|
{
|
|
static hf_register_info hf[] =
|
|
{
|
|
/* Wreth header fields */
|
|
{ &hf_Wreth_Subtype,
|
|
{ "Subtype", "wreth.Subtype",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Size,
|
|
{ "Size", "wreth.Size",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"", HFILL }
|
|
},
|
|
{ &hf_Wreth_FunctionCode,
|
|
{ "Function code","wreth.FunctionCode",
|
|
FT_UINT16, BASE_DEC | BASE_EXT_STRING, &FunctionCodes_ext, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_FrameId,
|
|
{ "FrameId", "wreth.FrameId",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_ErrorCode,
|
|
{ "Error code", "wreth.ErrorCode",
|
|
FT_UINT16, BASE_DEC | BASE_EXT_STRING, &ErrorCode_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Fragmented,
|
|
{ "Fragmented", "wreth.Fragmented",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Retry,
|
|
{ "Retry", "wreth.Retry",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationBiosVersion,
|
|
{ "Bios version", "wreth.IdentBiosVersion",
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationBoardNumber,
|
|
{ "Board number", "wreth.IdentBoardNumber",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationProtocolVersion,
|
|
{ "Protocol version", "wreth.IdentProtocolVersion",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationBoardId,
|
|
{ "Board Id", "wreth.IdentBoardId",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationState,
|
|
{ "State", "wreth.IdentState",
|
|
FT_UINT8, BASE_DEC, VALS(IdentState), 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_IdentificationMacAddr,
|
|
{ "Client MAC address :", "wreth.IdentClientMacAddr",
|
|
FT_ETHER, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_ConnectProtocolVersion,
|
|
{ "Protocol version", "wreth.ConnectProtocolVersion",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_ConnectTimeout,
|
|
{ "Connect timeout", "wreth.ConnectTimeout",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_BlinkyPeriod,
|
|
{ "Period", "wreth.BlinkyPeriod",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_GetValueVal,
|
|
{ "Value", "wreth.GetValue",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_SetValueVal,
|
|
{ "Value", "wreth.SetValue",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_BoostValue,
|
|
{ "Boost", "wreth.BoostStatus",
|
|
FT_UINT16, BASE_DEC, VALS(BoostValue), 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_MailDestTic,
|
|
{ "Dest tic", "wreth.MailDestTic",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_MailReserved,
|
|
{ "Reserved", "wreth.MailReserved",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Codef,
|
|
{ "Codef", "wreth.Mail.Codef",
|
|
FT_UINT16, BASE_HEX | BASE_EXT_STRING, &tabCodef_ext, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Status,
|
|
{ "Status", "wreth.Mail.Status",
|
|
FT_INT16, BASE_DEC | BASE_EXT_STRING, &tabStatus_ext, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_TicUser_Root,
|
|
{ "TicUser Root", "wreth.Mail.TicUserRoot",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_PidUser,
|
|
{ "PidUser", "wreth.Mail.PidUser",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mode,
|
|
{ "Mode", "wreth.Mail.Mode",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Time,
|
|
{ "Time", "wreth.Mail.Time",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Stop,
|
|
{ "Stop", "wreth.Mail.Stop",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Nfonc,
|
|
{ "Nfonc", "wreth.Mail.Nfonc",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Ncard,
|
|
{ "Ncard", "wreth.Mail.Ncard",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Nchan,
|
|
{ "Nchan", "wreth.Mail.Nchan",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Nes,
|
|
{ "Nes", "wreth.Mail.Nes",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Nb,
|
|
{ "Nb", "wreth.Mail.Nb",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_TypVar,
|
|
{ "TypVar", "wreth.Mail.TypVar",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Adr,
|
|
{ "Adr", "wreth.Mail.Adr",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_TicUser_DispCyc,
|
|
{ "TicUser DispCyc", "wreth.Mail.TicUser.DispCyc",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Nb_Max_Size_Mail,
|
|
{ "Nb Max Size Mail", "wreth.Mail.TicUser.Nb.Max.Size.Mail",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_User_ThreadID,
|
|
{ "User ThreadID", "wreth.Mail.User.ThreadID",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_DispCyc_Version,
|
|
{ "DispCyc Version", "wreth.Mail.DispCyc.Version",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_DifUserParam,
|
|
{ "DifUserParam", "wreth.Mail.DifUserParam",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Filler,
|
|
{ "Filler", "wreth.Mail.Filler",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
#if 0
|
|
{ &hf_Wreth_Mail_Data,
|
|
{ "Data", "wreth.Mail.Data",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
#endif
|
|
{ &hf_Wreth_Mail_Mastinf_Version,
|
|
{ "Version", "wreth.Mail.Mastinf.Version",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_Release,
|
|
{ "Release", "wreth.Mail.Mastinf.Release",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_Protocol,
|
|
{ "Protocol", "wreth.Mail.Mastinf.Protocol",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_CyclicFlux,
|
|
{ "CyclicFlux", "wreth.Mail.Mastinf.CyclicFlux",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_szProtocolName,
|
|
{ "ProtocolName", "wreth.Mail.Mastinf.ProtocolName",
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_MaxTypeEquipment,
|
|
{ "MaxTypeEquipment", "wreth.Mail.Mastinf.MaxTypeEquipment",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_MinEquipmentNumber,
|
|
{ "MinEquipmentNumber", "wreth.Mail.Mastinf.MinEquipmentNumber",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_MaxEquipmentNumber,
|
|
{ "MaxEquipmentNumber", "wreth.Mail.Mastinf.MaxEquipmentNumber",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Version,
|
|
{ "Version", "wreth.Mail.Equinf.Version",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Release,
|
|
{ "Release", "wreth.Mail.Equinf.Release",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Network,
|
|
{ "Network", "wreth.Mail.Equinf.Network",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Protocol,
|
|
{ "Protocol", "wreth.Mail.Equinf.Protocol",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Messaging,
|
|
{ "Messaging", "wreth.Mail.Equinf.Messaging",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Equipment,
|
|
{ "Equipment", "wreth.Mail.Equinf.Equipment",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_Flux,
|
|
{ "Flux", "wreth.Mail.Equinf.Flux",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_IncWord,
|
|
{ "IncWord", "wreth.Mail.Equinf.IncWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_IncDWord,
|
|
{ "IncDWord", "wreth.Mail.Equinf.IncDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_IncFWord,
|
|
{ "IncFWord", "wreth.Mail.Equinf.IncFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_DllItemName,
|
|
{ "DllItemName", "wreth.Mail.Equinf.DllItemName",
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Mastinf_szEquipmentName,
|
|
{ "EquipmentName", "wreth.Mail.Equinf.EquipmentName",
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteBit,
|
|
{ "MaxWriteBit", "wreth.Mail.Equinf.MaxWriteBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadBit,
|
|
{ "MaxReadBit", "wreth.Mail.Equinf.MaxReadBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakBit,
|
|
{ "BreakBit", "wreth.Mail.Equinf.BreakBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteIBit,
|
|
{ "MaxWriteIBit", "wreth.Mail.Equinf.MaxWriteIBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadIBit,
|
|
{ "MaxReadIBit", "wreth.Mail.Equinf.MaxReadIBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteQBit,
|
|
{ "MaxWriteQBit", "wreth.Mail.Equinf.MaxWriteQBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadQBit,
|
|
{ "MaxReadQBit", "wreth.Mail.Equinf.MaxReadQBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakQBit,
|
|
{ "BreakQBit", "wreth.Mail.Equinf.BreakQBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteByte,
|
|
{ "MaxWriteByte", "wreth.Mail.Equinf.MaxWriteByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadByte,
|
|
{ "MaxReadByte", "wreth.Mail.Equinf.MaxReadByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakByte,
|
|
{ "BreakByte", "wreth.Mail.Equinf.BreakByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteIByte,
|
|
{ "MaxWriteIByte", "wreth.Mail.Equinf.MaxWriteIByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadIByte,
|
|
{ "MaxReadIByte", "wreth.Mail.Equinf.MaxReadIByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakIByte,
|
|
{ "BreakIByte", "wreth.Mail.Equinf.BreakIByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteQByte,
|
|
{ "MaxWriteQByte", "wreth.Mail.Equinf.MaxWriteQByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadQByte,
|
|
{ "MaxReadQByte", "wreth.Mail.Equinf.MaxReadQByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
,
|
|
{ &hf_Wreth_Mail_Equinf_BreakQByte ,
|
|
{ "BreakQByte", "wreth.Mail.Equinf.BreakQByte",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteWord ,
|
|
{ "MaxWriteWord", "wreth.Mail.Equinf.MaxWriteWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadWord ,
|
|
{ "MaxReadWord", "wreth.Mail.Equinf.MaxReadWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakWord ,
|
|
{ "BreakWord", "wreth.Mail.Equinf.BreakWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteIWord ,
|
|
{ "MaxWriteIWord", "wreth.Mail.Equinf.MaxWriteIWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadIWord ,
|
|
{ "MaxReadIWord", "wreth.Mail.Equinf.MaxReadIWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakIWord ,
|
|
{ "BreakIWord", "wreth.Mail.Equinf.BreakIWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadQWord ,
|
|
{ "MaxReadQWord", "wreth.Mail.Equinf.MaxReadQWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteQWord ,
|
|
{ "MaxWriteQWord", "wreth.Mail.Equinf.MaxWriteQWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakQWord ,
|
|
{ "BreakQWord", "wreth.Mail.Equinf.BreakQWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteDWord ,
|
|
{ "MaxWriteDWord", "wreth.Mail.Equinf.MaxWriteDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadDWord ,
|
|
{ "MaxReadDWord", "wreth.Mail.Equinf.MaxReadDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakDWord ,
|
|
{ "BreakDWord", "wreth.Mail.Equinf.BreakDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxWriteFWord ,
|
|
{ "MaxWriteFWord", "wreth.Mail.Equinf.MaxWriteFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_MaxReadFWord ,
|
|
{ "MaxReadFWord", "wreth.Mail.Equinf.MaxReadFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakFWord ,
|
|
{ "BreakFWord", "wreth.Mail.Equinf.BreakFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_ReadFactorWord ,
|
|
{ "ReadFactorWord", "wreth.Mail.Equinf.ReadFactorWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_ReadFactorIWord ,
|
|
{ "ReadFactorIWord", "wreth.Mail.Equinf.ReadFactorIWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_ReadFactorQWord ,
|
|
{ "ReadFactorQWord", "wreth.Mail.Equinf.ReadFactorQWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_ReadFactorDWord ,
|
|
{ "ReadFactorDWord", "wreth.Mail.Equinf.ReadFactorDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_ReadFactorFWord ,
|
|
{ "ReadFactorFWord", "wreth.Mail.Equinf.ReadFactorFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_WriteFactorWord ,
|
|
{ "WriteFactorWord", "wreth.Mail.Equinf.WriteFactorWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_WriteFactorIWord ,
|
|
{ "WriteFactorIWord", "wreth.Mail.Equinf.WriteFactorIWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_WriteFactorQWord ,
|
|
{ "WriteFactorQWord", "wreth.Mail.Equinf.WriteFactorQWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_WriteFactorDWord ,
|
|
{ "WriteFactorDWord", "wreth.Mail.Equinf.WriteFactorDWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_WriteFactorFWord ,
|
|
{ "WriteFactorFWord", "wreth.Mail.Equinf.WriteFactorFWord",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_DataFormat ,
|
|
{ "DataFormat", "wreth.Mail.Equinf.DataFormat",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
},
|
|
{ &hf_Wreth_Mail_Equinf_BreakIBit ,
|
|
{ "BreakIBit", "wreth.Mail.Equinf.BreakIBit",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
};
|
|
|
|
static gint *ett[] = {
|
|
&ett_wreth
|
|
};
|
|
|
|
wreth_proto = proto_register_protocol (
|
|
"WSE remote ethernet", /* name */
|
|
"WRETH", /* short name */
|
|
"wreth" /* abbrev */
|
|
);
|
|
proto_register_field_array(wreth_proto, hf, array_length(hf));
|
|
proto_register_subtree_array(ett, array_length(ett));
|
|
}
|
|
|
|
void proto_reg_handoff_wreth(void)
|
|
{
|
|
dissector_handle_t wreth_handle;
|
|
|
|
wreth_handle = create_dissector_handle(dissect_wreth, wreth_proto);
|
|
dissector_add_uint("ethertype", WRETH_PORT, wreth_handle);
|
|
}
|
|
|
|
/*
|
|
* Editor modelines - http://www.wireshark.org/tools/modelines.html
|
|
*
|
|
* Local variables:
|
|
* c-basic-offset: 4
|
|
* tab-width: 8
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*
|
|
* vi: set shiftwidth=4 tabstop=8 expandtab:
|
|
* :indentSize=4:tabSize=8:noTabs=true:
|
|
*/
|