mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-04-28 01:36:05 +00:00
support 32-bit intfilter
This commit is contained in:
parent
67c5468317
commit
e400912b2a
2 changed files with 28 additions and 10 deletions
21
configure.ac
21
configure.ac
|
@ -128,14 +128,29 @@ then
|
|||
CFLAGS="$CFLAGS -msse2"
|
||||
fi
|
||||
|
||||
|
||||
AC_ARG_ENABLE([intfilter],
|
||||
[AS_HELP_STRING([--enable-intfilter],
|
||||
[use 64bit integers for filtering. faster but limits filter length @<:@default=no@:>@])],
|
||||
[use 64-bit integers for filtering. faster but limits filter length to 12 @<:@default=no@:>@])],
|
||||
[], [enable_intfilter=no]
|
||||
)
|
||||
if test "x$enable_intfilter" = "xyes"
|
||||
AC_ARG_ENABLE([intfilter32],
|
||||
[AS_HELP_STRING([--enable-intfilter32],
|
||||
[use 32-bit integers for filtering. even faster on 32-bit machines but limits filter length to 6 @<:@default=no@:>@])],
|
||||
[], [enable_intfilter32=no]
|
||||
)
|
||||
if test "x$enable_intfilter32" = "xyes"
|
||||
then
|
||||
MYDEFS="$MYDEFS -DINTFILTER"
|
||||
if test "x$enable_intfilter" = "xyes"
|
||||
then
|
||||
AC_MSG_WARN([both intfilter and intfilter32 specified; using intfilter32])
|
||||
fi
|
||||
MYDEFS="$MYDEFS -DINTFILTER -DIFT=u32"
|
||||
else
|
||||
if test "x$enable_intfilter" = "xyes"
|
||||
then
|
||||
MYDEFS="$MYDEFS -DINTFILTER"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([statistics],
|
||||
|
|
17
main.c
17
main.c
|
@ -74,8 +74,11 @@ struct binfilter {
|
|||
} ;
|
||||
|
||||
#ifdef INTFILTER
|
||||
#ifndef IFT
|
||||
#define IFT u64
|
||||
#endif
|
||||
struct intfilter {
|
||||
u64 f,m;
|
||||
IFT f,m;
|
||||
} ;
|
||||
VEC_STRUCT(ifiltervec,struct intfilter) ifilters;
|
||||
#else
|
||||
|
@ -146,8 +149,8 @@ static void filters_add(const char *filter)
|
|||
size_t ret, ret2;
|
||||
#ifdef INTFILTER
|
||||
union intconv {
|
||||
u64 i;
|
||||
u8 b[8];
|
||||
IFT i;
|
||||
u8 b[sizeof(IFT)];
|
||||
} fc,mc;
|
||||
#endif
|
||||
|
||||
|
@ -161,7 +164,7 @@ static void filters_add(const char *filter)
|
|||
if (!ret)
|
||||
return;
|
||||
#ifdef INTFILTER
|
||||
if (ret > 8)
|
||||
if (ret > sizeof(IFT))
|
||||
#else
|
||||
if (ret > PUBLIC_LEN)
|
||||
#endif
|
||||
|
@ -177,7 +180,7 @@ static void filters_add(const char *filter)
|
|||
for (size_t i = 0;i < bf.len;++i)
|
||||
mc.b[i] = 0xFF;
|
||||
mc.b[bf.len] = bf.mask;
|
||||
memcpy(fc.b,bf.f,8);
|
||||
memcpy(fc.b,bf.f,sizeof(fc.b));
|
||||
fc.i &= mc.i;
|
||||
struct intfilter ifltr = {.f = fc.i,.m = mc.i};
|
||||
VEC_FOR(ifilters,i) {
|
||||
|
@ -227,7 +230,7 @@ static size_t filters_count()
|
|||
#ifdef INTFILTER
|
||||
|
||||
#define FILTERFOR(it) for (it = 0;it < VEC_LENGTH(ifilters);++it)
|
||||
#define MATCHFILTER(it,pk) ((*(u64 *)(pk) & VEC_BUF(ifilters,it).m) == VEC_BUF(ifilters,it).f)
|
||||
#define MATCHFILTER(it,pk) ((*(IFT *)(pk) & VEC_BUF(ifilters,it).m) == VEC_BUF(ifilters,it).f)
|
||||
|
||||
#else
|
||||
|
||||
|
@ -273,7 +276,7 @@ static void printfilters()
|
|||
#ifdef INTFILTER
|
||||
size_t len = 0;
|
||||
u8 *imraw = (u8 *)&VEC_BUF(ifilters,i).m;
|
||||
while (len < 8 && imraw[len] != 0x00) ++len;
|
||||
while (len < sizeof(IFT) && imraw[len] != 0x00) ++len;
|
||||
u8 mask = imraw[len-1];
|
||||
u8 *ifraw = (u8 *)&VEC_BUF(ifilters,i).f;
|
||||
#else
|
||||
|
|
Loading…
Add table
Reference in a new issue