char *data; /** Per function and thread data */
int datalen; /** Length of per function and thread data */
+ uint16_t counter_ips_accepted;
+ uint16_t counter_ips_blocked;
+ uint16_t counter_ips_rejected;
+
} NFQThreadVars;
/* shared vars for all for nfq queues and threads */
static NFQGlobalVars nfq_g;
TmEcode VerdictNFQThreadInit(ThreadVars *tv, void *initdata, void **data)
{
+ NFQThreadVars *ntv = (NFQThreadVars *) initdata;
- *data = (void *)initdata;
+ ntv->counter_ips_accepted = StatsRegisterCounter("ips.accepted", tv);
+ ntv->counter_ips_blocked = StatsRegisterCounter("ips.blocked", tv);
+ ntv->counter_ips_rejected = StatsRegisterCounter("ips.rejected", tv);
+ *data = (void *)ntv;
return TM_ECODE_OK;
}
*/
TmEcode VerdictNFQ(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueue *postpq)
{
+ NFQThreadVars *ntv = (NFQThreadVars *)data;
+ /* update counters */
+ if (unlikely(PACKET_TEST_ACTION(p, (ACTION_REJECT|ACTION_REJECT_DST|ACTION_REJECT_BOTH)))) {
+ StatsIncr(tv, ntv->counter_ips_rejected);
+ } else if (unlikely(PACKET_TEST_ACTION(p, ACTION_DROP))) {
+ StatsIncr(tv, ntv->counter_ips_blocked);
+ } else {
+ StatsIncr(tv, ntv->counter_ips_accepted);
+ }
+
int ret;
/* if this is a tunnel packet we check if we are ready to verdict
* already. */