From: Victor Julien Date: Sun, 7 Jun 2020 14:23:43 +0000 (+0200) Subject: modbus: support AppLayerTxData X-Git-Tag: suricata-6.0.0-beta1~180 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8cd55124a3bd450bdee77573d4b3cfb8a9df9b66;p=thirdparty%2Fsuricata.git modbus: support AppLayerTxData --- diff --git a/src/app-layer-modbus.c b/src/app-layer-modbus.c index af4b39533d..3aecf25ceb 100644 --- a/src/app-layer-modbus.c +++ b/src/app-layer-modbus.c @@ -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 { diff --git a/src/app-layer-modbus.h b/src/app-layer-modbus.h index 4341026cbf..467837bd66 100644 --- a/src/app-layer-modbus.h +++ b/src/app-layer-modbus.h @@ -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;