#include "defrag-hash.h"
#include "defrag-stack.h"
#include "defrag-config.h"
+#include "defrag-timeout.h"
#include "util-random.h"
#include "util-byte.h"
#include "util-misc.h"
dt = hb->head;
do {
- if (!dt->remove && DefragTrackerCompare(dt, p)) {
+ if (DefragTrackerTimedOut(dt, p->ts)) {
+ dt->remove = 1;
+ } else if (!dt->remove && DefragTrackerCompare(dt, p)) {
/* found our tracker, lock & return */
SCMutexLock(&dt->lock);
(void)DefragTrackerIncrUsecnt(dt);
DRLOCK_UNLOCK(hb);
return dt;
+ }
- } else if (dt->hnext == NULL) {
+ if (dt->hnext == NULL) {
DefragTracker *prev = dt;
dt = DefragTrackerGetNew(tv, dtv, p);
if (dt == NULL) {
* \retval 0 not timed out just yet
* \retval 1 fully timed out, lets kill it
*/
-static int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts)
+int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts)
{
/** never prune a trackers that is used by a packet
* we are currently processing in one of the threads */
#ifndef SURICATA_DEFRAG_TIMEOUT_H
#define SURICATA_DEFRAG_TIMEOUT_H
+#include "defrag.h"
+
+int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts);
uint32_t DefragTimeoutHash(SCTime_t ts);
#endif