suricata
source-windivert.h
Go to the documentation of this file.
1/* Copyright (C) 2018 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 *
20 * \file
21 *
22 * \author Jacob Masen-Smith <jacob@evengx.com>
23 *
24 */
25
26#ifndef SURICATA_SOURCE_WINDIVERT_H
27#define SURICATA_SOURCE_WINDIVERT_H
28
29#ifdef WINDIVERT
30
31#include "windivert.h"
32
33#define WINDIVERT_FILTER_MAXLEN 128 /* from windivert_device.h */
34
35typedef void *WinDivertHandle;
36
37/**
38 * \brief WinDivertQueueVars is the queue configuration and other miscellaneous
39 * information about the specific queue/filter.
40 *
41 * see https://reqrypt.org/windivert-doc.html#divert_open for more info
42 */
43typedef struct WinDivertQueueVars_
44{
45 int queue_num;
46
47 /* see https://reqrypt.org/windivert-doc.html#filter_language */
48 char filter_str[WINDIVERT_FILTER_MAXLEN + 1];
49 WINDIVERT_LAYER layer;
50 int16_t priority;
51 uint64_t flags;
52
53 WinDivertHandle filter_handle;
54 /* only needed for setup/teardown; Recv/Send are internally synchronized */
55 SCMutex filter_init_mutex;
56
57 /* counters */
58 uint32_t pkts;
59 uint64_t bytes;
60 uint32_t errs;
61 uint32_t accepted;
62 uint32_t dropped;
63 uint32_t replaced;
64 SCMutex counters_mutex;
65} WinDivertQueueVars;
66
67typedef struct WinDivertPacketVars_
68{
69 int thread_num;
70
71 WINDIVERT_ADDRESS addr;
72 bool verdicted;
73} WinDivertPacketVars;
74
75int WinDivertRegisterQueue(bool forward, char *filter_str);
76void *WinDivertGetThread(int thread);
77void *WinDivertGetQueue(int queue);
78
79void SourceWinDivertRegisterTests(void);
80
81#endif /* WINDIVERT */
82#endif /* SURICATA_SOURCE_WINDIVERT_H */
uint8_t flags
Definition decode-gre.h:0
#define SCMutex