aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mbtcp.h
blob: f80fcad4ea485c87bcdc7b2f172e3f3f71350f3b (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
/* 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
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */
#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:
 */