]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
modbus: support AppLayerTxData
authorVictor Julien <victor@inliniac.net>
Sun, 7 Jun 2020 14:23:43 +0000 (16:23 +0200)
committerVictor Julien <victor@inliniac.net>
Sat, 11 Jul 2020 06:37:40 +0000 (08:37 +0200)
src/app-layer-modbus.c
src/app-layer-modbus.h

index af4b39533dc7ce739ef90b6d1d71089e3adfed07..3aecf25ceba4ec0db338fef94b8dacdac6119330 100644 (file)
@@ -262,36 +262,10 @@ static void *ModbusGetTx(void *alstate, uint64_t tx_id)
     return NULL;
 }
 
-static void ModbusSetTxLogged(void *alstate, void *vtx, LoggerId logged)
+static AppLayerTxData *ModbusGetTxData(void *vtx)
 {
     ModbusTransaction *tx = (ModbusTransaction *)vtx;
-    tx->logged = logged;
-}
-
-static LoggerId ModbusGetTxLogged(void *alstate, void *vtx)
-{
-    ModbusTransaction *tx = (ModbusTransaction *)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_tc = 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;
-    }
+    return &tx->tx_data;
 }
 
 static uint64_t ModbusGetTxCnt(void *alstate)
@@ -1550,9 +1524,8 @@ void RegisterModbusParsers(void)
                                                ModbusGetTxDetectState, ModbusSetTxDetectState);
 
         AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTx);
+        AppLayerParserRegisterTxDataFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxData);
         AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxCnt);
-        AppLayerParserRegisterLoggerFuncs(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxLogged,
-                                          ModbusSetTxLogged);
         AppLayerParserRegisterTxFreeFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusStateTxFree);
 
         AppLayerParserRegisterGetStateProgressFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetAlstateProgress);
@@ -1563,8 +1536,6 @@ 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 4341026cbf3c6c073ea8b0eaff1ead6d4b30053c..467837bd66bc1495a7241d15e343473d71210094 100644 (file)
@@ -37,6 +37,7 @@
 #include "decode.h"
 #include "detect-engine-state.h"
 #include "queue.h"
+#include "rust.h"
 
 /* Modbus Application Data Unit (ADU)
  * and Protocol Data Unit (PDU) messages */
@@ -86,7 +87,6 @@ typedef struct ModbusTransaction_ {
     struct ModbusState_ *modbus;
 
     uint64_t    tx_num;         /**< internal: id */
-    uint32_t    logged;         /**< flags indicating which loggers have logged */
     uint16_t    transactionId;
     uint16_t    length;
     uint8_t     unit_id;
@@ -114,8 +114,7 @@ typedef struct ModbusTransaction_ {
 
     AppLayerDecoderEvents *decoder_events;  /**< per tx events */
     DetectEngineState *de_state;
-    uint64_t detect_flags_ts;
-    uint64_t detect_flags_tc;
+    AppLayerTxData tx_data;
 
     TAILQ_ENTRY(ModbusTransaction_) next;
 } ModbusTransaction;