]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
app-layer-proto: speed up
authorVictor Julien <victor@inliniac.net>
Fri, 24 Jan 2014 10:40:06 +0000 (11:40 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 27 Jan 2014 11:46:26 +0000 (12:46 +0100)
AppLayer Proto detection code uses a mix of pattern search and
"probing parsers". The pattern search validates potential matches
using a single pattern search algo. The code was using SpmSearch
for this, but this made it inefficient as it builds a BoyerMoore
context for each search. This lead to significant memory pressure,
especially on high speed/bandwidth boxes.

This patch switches the search calls to BoyerMoore and BoyerMoore-
Nocase directly. This can be done as the ctx' were available already.

src/app-layer-detect-proto.c

index f5b57193aa566b2ea391c3d2f8425698e9ad03fb..ce5c8c2528f667c76a4cfdc918f5c1f926863889 100644 (file)
@@ -190,9 +190,9 @@ static AppProto AppLayerProtoDetectPMMatchSignature(const AppLayerProtoDetectPMS
                s->cd->offset, s->cd->depth);
 
     if (s->cd->flags & DETECT_CONTENT_NOCASE)
-        found = SpmNocaseSearch(sbuf, sbuflen, s->cd->content, s->cd->content_len);
+        found = BoyerMooreNocase(s->cd->content, s->cd->content_len, sbuf, sbuflen, s->cd->bm_ctx->bmGs, s->cd->bm_ctx->bmBc);
     else
-        found = SpmSearch(sbuf, sbuflen, s->cd->content, s->cd->content_len);
+        found = BoyerMoore(s->cd->content, s->cd->content_len, sbuf, sbuflen, s->cd->bm_ctx->bmGs, s->cd->bm_ctx->bmBc);
     if (found != NULL)
         proto = s->alproto;