suricata
ippair-queue.c
Go to the documentation of this file.
1
/* Copyright (C) 2007-2012 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
* IPPair queue handler functions
24
*/
25
26
#include "
suricata-common.h
"
27
#include "
threads.h
"
28
#include "
ippair-queue.h
"
29
#include "
util-error.h
"
30
#include "
util-debug.h
"
31
#include "
util-print.h
"
32
33
IPPairQueue
*
IPPairQueueInit
(
IPPairQueue
*q)
34
{
35
if
(q != NULL) {
36
memset(q, 0,
sizeof
(
IPPairQueue
));
37
HQLOCK_INIT
(q);
38
}
39
return
q;
40
}
41
42
IPPairQueue
*
IPPairQueueNew
(
void
)
43
{
44
IPPairQueue
*q = (
IPPairQueue
*)
SCMalloc
(
sizeof
(
IPPairQueue
));
45
if
(q == NULL) {
46
SCLogError
(
"Fatal error encountered in IPPairQueueNew. Exiting..."
);
47
exit(EXIT_SUCCESS);
48
}
49
q =
IPPairQueueInit
(q);
50
return
q;
51
}
52
53
/**
54
* \brief Destroy a ippair queue
55
*
56
* \param q the ippair queue to destroy
57
*/
58
void
IPPairQueueDestroy
(
IPPairQueue
*q)
59
{
60
HQLOCK_DESTROY
(q);
61
}
62
63
/**
64
* \brief add a ippair to a queue
65
*
66
* \param q queue
67
* \param h ippair
68
*/
69
void
IPPairEnqueue
(
IPPairQueue
*q,
IPPair
*h)
70
{
71
#ifdef DEBUG
72
BUG_ON
(q == NULL || h == NULL);
73
#endif
74
75
HQLOCK_LOCK
(q);
76
77
/* more ippairs in queue */
78
if
(q->
top
!= NULL) {
79
h->
lnext
= q->
top
;
80
q->
top
->
lprev
= h;
81
q->
top
= h;
82
/* only ippair */
83
}
else
{
84
q->
top
= h;
85
q->
bot
= h;
86
}
87
q->
len
++;
88
#ifdef DBG_PERF
89
if
(q->
len
> q->dbg_maxlen)
90
q->dbg_maxlen = q->
len
;
91
#endif
/* DBG_PERF */
92
HQLOCK_UNLOCK
(q);
93
}
94
95
/**
96
* \brief remove a ippair from the queue
97
*
98
* \param q queue
99
*
100
* \retval h ippair or NULL if empty list.
101
*/
102
IPPair
*
IPPairDequeue
(
IPPairQueue
*q)
103
{
104
HQLOCK_LOCK
(q);
105
106
IPPair
*h = q->
bot
;
107
if
(h == NULL) {
108
HQLOCK_UNLOCK
(q);
109
return
NULL;
110
}
111
112
/* more packets in queue */
113
if
(q->
bot
->
lprev
!= NULL) {
114
q->
bot
= q->
bot
->
lprev
;
115
q->
bot
->
lnext
= NULL;
116
/* just the one we remove, so now empty */
117
}
else
{
118
q->
top
= NULL;
119
q->
bot
= NULL;
120
}
121
122
#ifdef DEBUG
123
BUG_ON
(q->
len
== 0);
124
#endif
125
if
(q->
len
> 0)
126
q->
len
--;
127
128
h->
lnext
= NULL;
129
h->
lprev
= NULL;
130
131
HQLOCK_UNLOCK
(q);
132
return
h;
133
}
HQLOCK_LOCK
#define HQLOCK_LOCK(q)
Definition:
host-queue.h:67
IPPairQueue_::len
uint32_t len
Definition:
ippair-queue.h:45
HQLOCK_DESTROY
#define HQLOCK_DESTROY(q)
Definition:
host-queue.h:66
IPPairQueueInit
IPPairQueue * IPPairQueueInit(IPPairQueue *q)
Definition:
ippair-queue.c:33
IPPair_::lprev
struct IPPair_ * lprev
Definition:
ippair.h:74
threads.h
IPPairDequeue
IPPair * IPPairDequeue(IPPairQueue *q)
remove a ippair from the queue
Definition:
ippair-queue.c:102
IPPairQueueNew
IPPairQueue * IPPairQueueNew(void)
Definition:
ippair-queue.c:42
IPPair_::lnext
struct IPPair_ * lnext
Definition:
ippair.h:73
IPPairQueue_::top
IPPair * top
Definition:
ippair-queue.h:43
util-debug.h
util-error.h
util-print.h
IPPairEnqueue
void IPPairEnqueue(IPPairQueue *q, IPPair *h)
add a ippair to a queue
Definition:
ippair-queue.c:69
IPPairQueue_
Definition:
ippair-queue.h:42
BUG_ON
#define BUG_ON(x)
Definition:
suricata-common.h:300
HQLOCK_UNLOCK
#define HQLOCK_UNLOCK(q)
Definition:
host-queue.h:69
suricata-common.h
IPPair_
Definition:
ippair.h:58
HQLOCK_INIT
#define HQLOCK_INIT(q)
Definition:
host-queue.h:65
SCMalloc
#define SCMalloc(sz)
Definition:
util-mem.h:47
SCLogError
#define SCLogError(...)
Macro used to log ERROR messages.
Definition:
util-debug.h:261
ippair-queue.h
IPPairQueueDestroy
void IPPairQueueDestroy(IPPairQueue *q)
Destroy a ippair queue.
Definition:
ippair-queue.c:58
IPPairQueue_::bot
IPPair * bot
Definition:
ippair-queue.h:44
src
ippair-queue.c
Generated on Wed Nov 20 2024 23:30:34 for suricata by
1.8.18