|
|
@ -21,15 +21,56 @@
|
|
|
|
#include "source-nfq-prototypes.h"
|
|
|
|
#include "source-nfq-prototypes.h"
|
|
|
|
#include "action-globals.h"
|
|
|
|
#include "action-globals.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NFQ
|
|
|
|
|
|
|
|
/** Handle the case where no NFQ support is compiled in.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int NoNFQSupportExit(ThreadVars *, void *, void **);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TmModuleReceiveNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].name = "ReceiveNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TmModuleVerdictNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].name = "VerdictNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TmModuleDecodeNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].name = "DecodeNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int NoNFQSupportExit(ThreadVars *tv, void *initdata, void **data)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
printf("Error creating thread %s: you do not have support for nfqueue "
|
|
|
|
|
|
|
|
"enabled please recompile with --enable-nfqueue\n", tv->name);
|
|
|
|
|
|
|
|
exit(1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#else /* implied we do have NFQ support */
|
|
|
|
|
|
|
|
|
|
|
|
/* shared vars for all for nfq queues and threads */
|
|
|
|
/* shared vars for all for nfq queues and threads */
|
|
|
|
static NFQGlobalVars nfq_g;
|
|
|
|
static NFQGlobalVars nfq_g;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NFQ
|
|
|
|
|
|
|
|
static NFQThreadVars nfq_t[NFQ_MAX_QUEUE];
|
|
|
|
static NFQThreadVars nfq_t[NFQ_MAX_QUEUE];
|
|
|
|
static u_int16_t receive_queue_num = 0;
|
|
|
|
static u_int16_t receive_queue_num = 0;
|
|
|
|
static u_int16_t verdict_queue_num = 0;
|
|
|
|
static u_int16_t verdict_queue_num = 0;
|
|
|
|
static pthread_mutex_t nfq_init_lock;
|
|
|
|
static pthread_mutex_t nfq_init_lock;
|
|
|
|
#endif /* NFQ */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ReceiveNFQ(ThreadVars *, Packet *, void *, PacketQueue *);
|
|
|
|
int ReceiveNFQ(ThreadVars *, Packet *, void *, PacketQueue *);
|
|
|
|
int ReceiveNFQThreadInit(ThreadVars *, void *, void **);
|
|
|
|
int ReceiveNFQThreadInit(ThreadVars *, void *, void **);
|
|
|
@ -41,9 +82,7 @@ void VerdictNFQThreadExitStats(ThreadVars *, void *);
|
|
|
|
int VerdictNFQThreadDeinit(ThreadVars *, void *);
|
|
|
|
int VerdictNFQThreadDeinit(ThreadVars *, void *);
|
|
|
|
|
|
|
|
|
|
|
|
int DecodeNFQ(ThreadVars *, Packet *, void *, PacketQueue *);
|
|
|
|
int DecodeNFQ(ThreadVars *, Packet *, void *, PacketQueue *);
|
|
|
|
int NoNFQSupportExit(ThreadVars *, void *, void **);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NFQ
|
|
|
|
|
|
|
|
void TmModuleReceiveNFQRegister (void) {
|
|
|
|
void TmModuleReceiveNFQRegister (void) {
|
|
|
|
/* XXX create a general NFQ setup function */
|
|
|
|
/* XXX create a general NFQ setup function */
|
|
|
|
memset(&nfq_g, 0, sizeof(nfq_g));
|
|
|
|
memset(&nfq_g, 0, sizeof(nfq_g));
|
|
|
@ -76,44 +115,6 @@ void TmModuleDecodeNFQRegister (void) {
|
|
|
|
tmm_modules[TMM_DECODENFQ].RegisterTests = NULL;
|
|
|
|
tmm_modules[TMM_DECODENFQ].RegisterTests = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#else /* No NFQ support implied */
|
|
|
|
|
|
|
|
void TmModuleReceiveNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].name = "ReceiveNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_RECEIVENFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TmModuleVerdictNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].name = "VerdictNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_VERDICTNFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TmModuleDecodeNFQRegister (void) {
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].name = "DecodeNFQ";
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Init = NoNFQSupportExit;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Func = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].ExitPrintStats = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].Deinit = NULL;
|
|
|
|
|
|
|
|
tmm_modules[TMM_DECODENFQ].RegisterTests = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* NFQ */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int NoNFQSupportExit(ThreadVars *tv, void *initdata, void **data)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
printf("You do not have support for nfqueue enabled please recompile with --enable-nfqueue\n");
|
|
|
|
|
|
|
|
exit(1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NFQ
|
|
|
|
|
|
|
|
void NFQSetupPkt (Packet *p, void *data)
|
|
|
|
void NFQSetupPkt (Packet *p, void *data)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
struct nfq_data *tb = (struct nfq_data *)data;
|
|
|
|
struct nfq_data *tb = (struct nfq_data *)data;
|
|
|
@ -471,4 +472,6 @@ int DecodeNFQ(ThreadVars *t, Packet *p, void *data, PacketQueue *pq)
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* NFQ */
|
|
|
|
#endif /* NFQ */
|
|
|
|
|
|
|
|
|
|
|
|