aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mbtcp.h
blob: e8c37445f1a1a856dc445ed0961dd1911caa56c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* packet-mbtcp.h
 *
 * Routines for Modbus/TCP dissection
 * By Riaan Swart <rswart@cs.sun.ac.za>
 * Copyright 2001, Institute for Applied Computer Science
 *                      University of Stellenbosch
 *
 * See http://www.modbus.org/ for information on Modbus/TCP.
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
#define PORT_MBTCP        502    /* Modbus/TCP located on port 502, with IANA registration */
#define PORT_MBRTU        0    /* Modbus RTU over TCP does not have a standard port, default to zero */

/* Modbus protocol function codes */
#define READ_COILS                  1
#define READ_DISCRETE_INPUTS        2
#define READ_HOLDING_REGS           3
#define READ_INPUT_REGS             4
#define WRITE_SINGLE_COIL           5
#define WRITE_SINGLE_REG            6
#define READ_EXCEPT_STAT            7
#define DIAGNOSTICS                 8
#define GET_COMM_EVENT_CTRS         11
#define GET_COMM_EVENT_LOG          12
#define WRITE_MULT_COILS            15
#define WRITE_MULT_REGS             16
#define REPORT_SLAVE_ID             17
#define READ_FILE_RECORD            20
#define WRITE_FILE_RECORD           21
#define MASK_WRITE_REG              22
#define READ_WRITE_REG              23
#define READ_FIFO_QUEUE             24
#define ENCAP_INTERFACE_TRANSP      43
#define UNITY_SCHNEIDER             90

/* Modbus protocol exception codes */
#define ILLEGAL_FUNCTION            0x01
#define ILLEGAL_ADDRESS             0x02
#define ILLEGAL_VALUE               0x03
#define SLAVE_FAILURE               0x04
#define ACKNOWLEDGE                 0x05
#define SLAVE_BUSY                  0x06
#define MEMORY_ERR                  0x08
#define GATEWAY_UNAVAILABLE         0x0a
#define GATEWAY_TRGT_FAIL           0x0b

/* Modbus diagnostic subfunction codes */
#define RETURN_QUERY_DATA                 0x00
#define RESTART_COMMUNICATION_OPTION      0x01
#define RETURN_DIAGNOSTIC_REGISTER        0x02
#define CHANGE_ASCII_INPUT_DELIMITER      0x03
#define FORCE_LISTEN_ONLY_MODE            0x04
#define CLEAR_COUNTERS_AND_DIAG_REG       0x0A
#define RETURN_BUS_MESSAGE_COUNT          0x0B
#define RETURN_BUS_COMM_ERROR_COUNT       0x0C
#define RETURN_BUS_EXCEPTION_ERROR_COUNT  0x0D
#define RETURN_SLAVE_MESSAGE_COUNT        0x0E
#define RETURN_SLAVE_NO_RESPONSE_COUNT    0x0F
#define RETURN_SLAVE_NAK_COUNT            0x10
#define RETURN_SLAVE_BUSY_COUNT           0x11
#define RETURN_BUS_CHAR_OVERRUN_COUNT     0x12
#define CLEAR_OVERRUN_COUNTER_AND_FLAG    0x14



/* Encapsulation Interface codes */
#define CANOPEN_REQ_RESP   0x0D
#define READ_DEVICE_ID     0x0E

/* Event byte codes */
#define REMOTE_DEVICE_RECV_EVENT_MASK     0x80
#define REMOTE_DEVICE_SEND_EVENT_MASK     0xc0
#define REMOTE_DEVICE_SEND_EVENT_VALUE    0x40

/* return codes of function classifying packets as query/response */
#define QUERY_PACKET            0
#define RESPONSE_PACKET         1
#define CANNOT_CLASSIFY         2

#define MODBUS_PROTOCOL_ID      0

/* Preferences for Modbus/TCP Dissector */
#define MODBUS_PREF_REGISTER_FORMAT_UINT16          0
#define MODBUS_PREF_REGISTER_FORMAT_UINT32          1
#define MODBUS_PREF_REGISTER_FORMAT_IEEE_FLOAT      2
#define MODBUS_PREF_REGISTER_FORMAT_MODICON_FLOAT   3
#define MODBUS_PREF_REGISTER_FORMAT_INT16           4
#define MODBUS_PREF_REGISTER_FORMAT_INT32           5

typedef struct {
    guint32 fnum;
    guint8  function_code;
    guint16 base_address;
    guint16 num_reg;
} modbus_request_info_t;

/* List contains request data  */
typedef struct {
    wmem_list_t *modbus_request_frame_data;
    gint        register_format;
} modbus_conversation;

/*
 * Editor modelines
 *
 * Local Variables:
 * c-basic-offset: 4
 * tab-width: 8
 * indent-tabs-mode: nil
 * End:
 *
 * ex: set shiftwidth=4 tabstop=8 expandtab:
 * :indentSize=4:tabSize=8:noTabs=true:
 */