suricata
detect-lua-extensions.c
Go to the documentation of this file.
1/* Copyright (C) 2007-2022 Open Information Security Foundation
2 *
3 * You can copy, redistribute or modify this Program under the terms of
4 * the GNU General Public License version 2 as published by the Free
5 * Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * version 2 along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15 * 02110-1301, USA.
16 */
17
18/**
19 * \file
20 *
21 * \author Victor Julien <victor@inliniac.net>
22 *
23 * Functions to expose to the lua scripts.
24 */
25
26#include "suricata-common.h"
27
28#include "decode.h"
29#include "detect.h"
30
31#include "flow.h"
32
33#include "util-debug.h"
34
35#include "detect-lua.h"
36
37#include "rust.h"
38#include "app-layer-parser.h"
39
40#include "util-lua.h"
41#include "util-lua-common.h"
43
44/* Lua registry key for DetectLuaData. */
45const char luaext_key_ld[] = "suricata:luadata";
46
48 DetectEngineThreadCtx *det_ctx, Flow *f, Packet *p, const Signature *s, uint8_t flags)
49{
50 SCLogDebug("det_ctx %p, f %p", det_ctx, f);
51
52 LuaStateSetSignature(lua_state, s);
53 LuaStateSetFlow(lua_state, f);
54 LuaStateSetDetCtx(lua_state, det_ctx);
55
56 if (det_ctx->tx_id_set) {
57 if (f && f->alstate) {
58 void *txptr = AppLayerParserGetTx(f->proto, f->alproto, f->alstate, det_ctx->tx_id);
59 if (txptr) {
60 LuaStateSetTX(lua_state, txptr, det_ctx->tx_id);
61 }
62 }
63 }
64
65 if (p != NULL)
66 LuaStateSetPacket(lua_state, p);
67
68 LuaStateSetDirection(lua_state, (flags & STREAM_TOSERVER));
69}
void * AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id)
uint8_t flags
Definition decode-gre.h:0
const char luaext_key_ld[]
void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *ld, DetectEngineThreadCtx *det_ctx, Flow *f, Packet *p, const Signature *s, uint8_t flags)
Flow data structure.
Definition flow.h:356
uint8_t proto
Definition flow.h:378
AppProto alproto
application level protocol
Definition flow.h:450
void * alstate
Definition flow.h:479
Signature container.
Definition detect.h:668
struct lua_State lua_State
#define SCLogDebug(...)
Definition util-debug.h:275
void LuaStateSetFlow(lua_State *luastate, Flow *f)
set a flow pointer in the lua state
Definition util-lua.c:176
void LuaStateSetDirection(lua_State *luastate, int direction)
Definition util-lua.c:278
void LuaStateSetSignature(lua_State *luastate, const Signature *s)
Definition util-lua.c:215
void LuaStateSetPacket(lua_State *luastate, Packet *p)
Definition util-lua.c:126
void LuaStateSetDetCtx(lua_State *luastate, DetectEngineThreadCtx *det_ctx)
Definition util-lua.c:247
void LuaStateSetTX(lua_State *luastate, void *txptr, const uint64_t tx_id)
Definition util-lua.c:150