*/
void IPOnlyInit(DetectEngineCtx *de_ctx, DetectEngineIPOnlyCtx *io_ctx)
{
- io_ctx->sig_init_size = DetectEngineGetMaxSigId(de_ctx) / 8 + 1;
-
- if ( (io_ctx->sig_init_array = SCMalloc(io_ctx->sig_init_size)) == NULL) {
- FatalError(SC_ERR_FATAL,
- "Fatal error encountered in IPOnlyInit. Exiting...");
- }
-
- memset(io_ctx->sig_init_array, 0, io_ctx->sig_init_size);
-
io_ctx->tree_ipv4src = SCRadixCreateRadixTree(SigNumArrayFree,
SigNumArrayPrint);
io_ctx->tree_ipv4dst = SCRadixCreateRadixTree(SigNumArrayFree,
if (io_ctx->tree_ipv6dst != NULL)
SCRadixReleaseRadixTree(io_ctx->tree_ipv6dst);
io_ctx->tree_ipv6dst = NULL;
-
- if (io_ctx->sig_init_array)
- SCFree(io_ctx->sig_init_array);
- io_ctx->sig_init_array = NULL;
}
/**
if (s->num > io_ctx->max_idx)
io_ctx->max_idx = s->num;
- /* enable the sig in the bitarray */
- io_ctx->sig_init_array[(s->num/8)] |= 1 << (s->num % 8);
-
/** no longer ref to this, it's in the table now */
s->CidrSrc = NULL;
s->CidrDst = NULL;
/** \brief IP only rules matching ctx. */
typedef struct DetectEngineIPOnlyCtx_ {
- /* lookup hashes */
- HashListTable *ht16_src, *ht16_dst;
- HashListTable *ht24_src, *ht24_dst;
-
/* Lookup trees */
SCRadixTree *tree_ipv4src, *tree_ipv4dst;
SCRadixTree *tree_ipv6src, *tree_ipv6dst;
/* Used to build the radix trees */
IPOnlyCIDRItem *ip_src, *ip_dst;
-
- /* counters */
- uint32_t a_src_uniq16, a_src_total16;
- uint32_t a_dst_uniq16, a_dst_total16;
- uint32_t a_src_uniq24, a_src_total24;
- uint32_t a_dst_uniq24, a_dst_total24;
-
uint32_t max_idx;
-
- uint8_t *sig_init_array; /* bit array of sig nums */
- uint32_t sig_init_size; /* size in bytes of the array */
-
- /* number of sigs in this head */
- uint32_t sig_cnt;
- uint32_t *match_array;
} DetectEngineIPOnlyCtx;
typedef struct DetectEngineLookupFlow_ {