suricata
tmqh-packetpool.c File Reference
#include "suricata.h"
#include "packet-queue.h"
#include "decode.h"
#include "detect.h"
#include "detect-uricontent.h"
#include "threads.h"
#include "threadvars.h"
#include "flow.h"
#include "flow-util.h"
#include "host.h"
#include "stream.h"
#include "stream-tcp-reassemble.h"
#include "tm-queuehandlers.h"
#include "tm-threads.h"
#include "tm-modules.h"
#include "pkt-var.h"
#include "tmqh-packetpool.h"
#include "util-debug.h"
#include "util-error.h"
#include "util-profiling.h"
#include "util-device.h"
Include dependency graph for tmqh-packetpool.c:

Go to the source code of this file.

Macros

#define MAX_PENDING_RETURN_PACKETS   32
 

Functions

void TmqhPacketpoolRegister (void)
 TmqhPacketpoolRegister . More...
 
void PacketPoolWait (void)
 
void PacketPoolWaitForN (int n)
 Wait until we have the requested amount of packets in the pool. More...
 
PacketPacketPoolGetPacket (void)
 Get a new packet from the packet pool. More...
 
void PacketPoolReturnPacket (Packet *p)
 Return packet to Packet pool. More...
 
void PacketPoolInitEmpty (void)
 
void PacketPoolInit (void)
 
void PacketPoolDestroy (void)
 
PacketTmqhInputPacketpool (ThreadVars *tv)
 
void TmqhOutputPacketpool (ThreadVars *t, Packet *p)
 
void TmqhReleasePacketsToPacketPool (PacketQueue *pq)
 Release all the packets in the queue back to the packetpool. Mainly used by threads that have failed, and wants to return the packets back to the packetpool. More...
 
void PacketPoolPostRunmodes (void)
 Set the max_pending_return_packets value. More...
 

Detailed Description

Author
Victor Julien victo.nosp@m.r@in.nosp@m.linia.nosp@m.c.ne.nosp@m.t

Packetpool queue handlers. Packet pool is implemented as a stack.

Definition in file tmqh-packetpool.c.

Macro Definition Documentation

#define MAX_PENDING_RETURN_PACKETS   32

Definition at line 54 of file tmqh-packetpool.c.

Function Documentation

void PacketPoolDestroy ( void  )

Definition at line 402 of file tmqh-packetpool.c.

References BUG_ON, Packet_::next, PacketFree(), PacketPoolGetPacket(), PktPool_::pending_count, PktPool_::pending_head, PktPool_::pending_pool, PktPool_::pending_tail, PktPool_::return_stack, and SC_ATOMIC_DESTROY.

Referenced by PostRunDeinit(), RunUnittests(), and TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

Packet* PacketPoolGetPacket ( void  )

Get a new packet from the packet pool.

Only allocates from the thread's local stack, or mallocs new packets. If the local stack is empty, first move all the return stack packets to the local stack.

Return values
Packetpointer, or NULL on failure.

Definition at line 244 of file tmqh-packetpool.c.

References BUG_ON, PktPool_::head, Packet_::next, PACKET_REINIT, and Packet_::pool.

Referenced by PacketGetFromQueueOrAlloc(), PacketPoolDestroy(), StreamTcpPseudoPacketCreateStreamEndPacket(), TmModuleDecodeNetmapRegister(), and TmqhInputPacketpool().

Here is the caller graph for this function:

void PacketPoolInit ( void  )

Definition at line 365 of file tmqh-packetpool.c.

References BUG_ON, max_pending_packets, PacketGetFromAlloc(), PktPool_::return_stack, SC_ATOMIC_INIT, SC_ERR_FATAL, SCCondInit, SCLogDebug, SCLogError, SCMutexInit, SIZE_OF_PACKET, and unlikely.

Referenced by PostRunDeinit(), RunUnittests(), and TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

void PacketPoolInitEmpty ( void  )

Definition at line 346 of file tmqh-packetpool.c.

References BUG_ON, PktPool_::return_stack, SC_ATOMIC_INIT, SCCondInit, and SCMutexInit.

Referenced by TmThreadsSlotVarRun().

Here is the caller graph for this function:

void PacketPoolPostRunmodes ( void  )

Set the max_pending_return_packets value.

Set it to the max pending packets value, devided by the number of lister threads. Normally, in autofp these are the stream/detect/log worker threads.

The max_pending_return_packets value needs to stay below the packet pool size of the 'producers' (normally pkt capture threads but also flow timeout injection ) to avoid a deadlock where all the 'workers' keep packets in their return pools, while the capture thread can't continue because its pool is empty.

Definition at line 575 of file tmqh-packetpool.c.

References max_pending_packets, SCLogDebug, TM_FLAG_DETECT_TM, and TmThreadCountThreadsByTmmFlags().

Referenced by main(), and RunModeUnixSocketGetDefaultMode().

Here is the call graph for this function:

Here is the caller graph for this function:

void PacketPoolReturnPacket ( Packet p)

Return packet to Packet pool.

Definition at line 284 of file tmqh-packetpool.c.

References BUG_ON, PktPool_::head, Packet_::next, PACKET_RELEASE_REFS, PacketFree(), PktPool_::pending_count, PktPool_::pending_head, PktPool_::pending_pool, PktPool_::pending_tail, Packet_::pool, PktPool_::return_stack, SC_ATOMIC_GET, SC_ATOMIC_RESET, SCCondSignal, SCMutexLock, and SCMutexUnlock.

Referenced by PacketFreeOrRelease(), and PacketPoolWaitForN().

Here is the call graph for this function:

Here is the caller graph for this function:

void PacketPoolWaitForN ( int  n)

Wait until we have the requested amount of packets in the pool.

In some cases waiting for packets is undesirable. Especially when a wait would happen under a lock of some kind, other parts of the engine could have to wait.

This function only returns when at least N packets are in our pool.

Parameters
nnumber of packets needed

Definition at line 173 of file tmqh-packetpool.c.

References Packet_::flags, PktPool_::head, Packet_::next, PacketPoolReturnPacket(), PacketPoolWait(), PKT_ALLOC, Packet_::pool, Packet_::ReleasePacket, PktPool_::return_stack, SC_ATOMIC_ADD, SCCondWait, SCMutexLock, and SCMutexUnlock.

Referenced by FlowDisableFlowManagerThread(), and FlowForceReassemblyForFlow().

Here is the call graph for this function:

Here is the caller graph for this function:

Packet* TmqhInputPacketpool ( ThreadVars tv)

Definition at line 439 of file tmqh-packetpool.c.

References PacketPoolGetPacket().

Referenced by TmqhPacketpoolRegister().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmqhPacketpoolRegister ( void  )

TmqhPacketpoolRegister .

Definition at line 132 of file tmqh-packetpool.c.

References PktPool_::head, Tmqh_::InHandler, Tmqh_::name, Tmqh_::OutHandler, PktPool_::return_stack, TMQH_PACKETPOOL, tmqh_table, TmqhInputPacketpool(), and TmqhOutputPacketpool().

Referenced by TmqhSetup().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmqhReleasePacketsToPacketPool ( PacketQueue pq)

Release all the packets in the queue back to the packetpool. Mainly used by threads that have failed, and wants to return the packets back to the packetpool.

Parameters
pqPointer to the packetqueue from which the packets have to be returned back to the packetpool
Warning
this function assumes that the pq does not use locking

Definition at line 549 of file tmqh-packetpool.c.

References PacketDequeue(), and TmqhOutputPacketpool().

Referenced by TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function: