]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
modbus: add tx detect flags
authorJason Ish <jason.ish@oisf.net>
Tue, 26 Nov 2019 22:01:09 +0000 (16:01 -0600)
committerJason Ish <jason.ish@oisf.net>
Wed, 27 Nov 2019 19:42:52 +0000 (13:42 -0600)
src/app-layer-modbus.c
src/app-layer-modbus.h

index c34ab898f494c89f3282024aa7ca33013813817e..9a70f4a5a340c77037ad295400c037555a36af15 100644 (file)
@@ -274,6 +274,26 @@ static LoggerId ModbusGetTxLogged(void *alstate, void *vtx)
     return tx->logged;
 }
 
+static void ModbusSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags)
+{
+    ModbusTransaction *tx = (ModbusTransaction *)vtx;
+    if (dir & STREAM_TOSERVER) {
+        tx->detect_flags_ts = flags;
+    } else {
+        tx->detect_flags_ts = flags;
+    }
+}
+
+static uint64_t ModbusGetTxDetectFlags(void *vtx, uint8_t dir)
+{
+    ModbusTransaction *tx = (ModbusTransaction *)vtx;
+    if (dir & STREAM_TOSERVER) {
+        return tx->detect_flags_ts;
+    } else {
+        return tx->detect_flags_tc;
+    }
+}
+
 static uint64_t ModbusGetTxCnt(void *alstate)
 {
     return ((uint64_t) ((ModbusState *) alstate)->transaction_max);
@@ -1547,6 +1567,8 @@ void RegisterModbusParsers(void)
         AppLayerParserRegisterGetEventInfoById(IPPROTO_TCP, ALPROTO_MODBUS, ModbusStateGetEventInfoById);
 
         AppLayerParserRegisterParserAcceptableDataDirection(IPPROTO_TCP, ALPROTO_MODBUS, STREAM_TOSERVER);
+        AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_MODBUS,
+                ModbusGetTxDetectFlags, ModbusSetTxDetectFlags);
 
         AppLayerParserSetStreamDepth(IPPROTO_TCP, ALPROTO_MODBUS, stream_depth);
     } else {
index 61b66e2a3fd972348f56c3ed42720abd3f8f4358..4341026cbf3c6c073ea8b0eaff1ead6d4b30053c 100644 (file)
@@ -114,6 +114,8 @@ typedef struct ModbusTransaction_ {
 
     AppLayerDecoderEvents *decoder_events;  /**< per tx events */
     DetectEngineState *de_state;
+    uint64_t detect_flags_ts;
+    uint64_t detect_flags_tc;
 
     TAILQ_ENTRY(ModbusTransaction_) next;
 } ModbusTransaction;