Skip to content

Commit 3fd7670

Browse files
authored
Merge pull request #2169 from hxy7yx/v2.9-2
[v2.9]feat(modbus tcp):configure optional message header verification
2 parents beb19a1 + b64f323 commit 3fd7670

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

plugins/modbus/modbus-tcp.json

+19
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,25 @@
6767
]
6868
}
6969
},
70+
"check_header": {
71+
"name": "Check Header",
72+
"name_zh": "校验报文头",
73+
"attribute": "required",
74+
"type": "map",
75+
"default": 0,
76+
"valid": {
77+
"map": [
78+
{
79+
"key": "False",
80+
"value": 0
81+
},
82+
{
83+
"key": "True",
84+
"value": 1
85+
}
86+
]
87+
}
88+
},
7089
"max_retries": {
7190
"name": "Maximum Retry Times",
7291
"name_zh": "最大重试次数",

plugins/modbus/modbus_req.h

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ struct neu_plugin {
4343
uint16_t interval;
4444
uint16_t retry_interval;
4545
uint16_t max_retries;
46+
uint16_t check_header;
4647
};
4748

4849
void modbus_conn_connected(void *data, int fd);

plugins/modbus/modbus_stack.c

+6
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ int modbus_stack_recv(modbus_stack_t *stack, uint8_t slave_id,
7777
if (ret <= 0) {
7878
return -1;
7979
}
80+
81+
neu_plugin_t *plugin = (neu_plugin_t *) stack->ctx;
82+
if (plugin->check_header && header.seq + 1 != stack->read_seq &&
83+
header.seq + 1 != stack->write_seq) {
84+
return -1;
85+
}
8086
}
8187

8288
ret = modbus_code_unwrap(buf, &code);

plugins/modbus/modbus_tcp.c

+9
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ static int driver_config(neu_plugin_t *plugin, const char *config)
161161
neu_json_elem_t max_retries = { .name = "max_retries", .t = NEU_JSON_INT };
162162
neu_json_elem_t retry_interval = { .name = "retry_interval",
163163
.t = NEU_JSON_INT };
164+
neu_json_elem_t check_header = { .name = "check_header",
165+
.t = NEU_JSON_INT };
164166

165167
ret = neu_parse_param((char *) config, &err_param, 5, &port, &host, &mode,
166168
&timeout, &interval);
@@ -189,10 +191,17 @@ static int driver_config(neu_plugin_t *plugin, const char *config)
189191
retry_interval.v.val_int = 0;
190192
}
191193

194+
ret = neu_parse_param((char *) config, &err_param, 1, &check_header);
195+
if (ret != 0) {
196+
free(err_param);
197+
check_header.v.val_int = 0;
198+
}
199+
192200
param.log = plugin->common.log;
193201
plugin->interval = interval.v.val_int;
194202
plugin->max_retries = max_retries.v.val_int;
195203
plugin->retry_interval = retry_interval.v.val_int;
204+
plugin->check_header = check_header.v.val_int;
196205

197206
if (mode.v.val_int == 1) {
198207
param.type = NEU_CONN_TCP_SERVER;

0 commit comments

Comments
 (0)