mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-12-05 21:27:13 -06:00
support 32-bit intfilter
This commit is contained in:
17
configure.ac
17
configure.ac
@@ -128,15 +128,30 @@ then
|
|||||||
CFLAGS="$CFLAGS -msse2"
|
CFLAGS="$CFLAGS -msse2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([intfilter],
|
AC_ARG_ENABLE([intfilter],
|
||||||
[AS_HELP_STRING([--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]
|
[], [enable_intfilter=no]
|
||||||
)
|
)
|
||||||
|
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
|
||||||
|
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"
|
if test "x$enable_intfilter" = "xyes"
|
||||||
then
|
then
|
||||||
MYDEFS="$MYDEFS -DINTFILTER"
|
MYDEFS="$MYDEFS -DINTFILTER"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE([statistics],
|
AC_ARG_ENABLE([statistics],
|
||||||
[AS_HELP_STRING([--enable-statistics],
|
[AS_HELP_STRING([--enable-statistics],
|
||||||
|
|||||||
17
main.c
17
main.c
@@ -74,8 +74,11 @@ struct binfilter {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
|
#ifndef IFT
|
||||||
|
#define IFT u64
|
||||||
|
#endif
|
||||||
struct intfilter {
|
struct intfilter {
|
||||||
u64 f,m;
|
IFT f,m;
|
||||||
} ;
|
} ;
|
||||||
VEC_STRUCT(ifiltervec,struct intfilter) ifilters;
|
VEC_STRUCT(ifiltervec,struct intfilter) ifilters;
|
||||||
#else
|
#else
|
||||||
@@ -146,8 +149,8 @@ static void filters_add(const char *filter)
|
|||||||
size_t ret, ret2;
|
size_t ret, ret2;
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
union intconv {
|
union intconv {
|
||||||
u64 i;
|
IFT i;
|
||||||
u8 b[8];
|
u8 b[sizeof(IFT)];
|
||||||
} fc,mc;
|
} fc,mc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -161,7 +164,7 @@ static void filters_add(const char *filter)
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
return;
|
return;
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
if (ret > 8)
|
if (ret > sizeof(IFT))
|
||||||
#else
|
#else
|
||||||
if (ret > PUBLIC_LEN)
|
if (ret > PUBLIC_LEN)
|
||||||
#endif
|
#endif
|
||||||
@@ -177,7 +180,7 @@ static void filters_add(const char *filter)
|
|||||||
for (size_t i = 0;i < bf.len;++i)
|
for (size_t i = 0;i < bf.len;++i)
|
||||||
mc.b[i] = 0xFF;
|
mc.b[i] = 0xFF;
|
||||||
mc.b[bf.len] = bf.mask;
|
mc.b[bf.len] = bf.mask;
|
||||||
memcpy(fc.b,bf.f,8);
|
memcpy(fc.b,bf.f,sizeof(fc.b));
|
||||||
fc.i &= mc.i;
|
fc.i &= mc.i;
|
||||||
struct intfilter ifltr = {.f = fc.i,.m = mc.i};
|
struct intfilter ifltr = {.f = fc.i,.m = mc.i};
|
||||||
VEC_FOR(ifilters,i) {
|
VEC_FOR(ifilters,i) {
|
||||||
@@ -227,7 +230,7 @@ static size_t filters_count()
|
|||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
|
|
||||||
#define FILTERFOR(it) for (it = 0;it < VEC_LENGTH(ifilters);++it)
|
#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
|
#else
|
||||||
|
|
||||||
@@ -273,7 +276,7 @@ static void printfilters()
|
|||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
u8 *imraw = (u8 *)&VEC_BUF(ifilters,i).m;
|
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 mask = imraw[len-1];
|
||||||
u8 *ifraw = (u8 *)&VEC_BUF(ifilters,i).f;
|
u8 *ifraw = (u8 *)&VEC_BUF(ifilters,i).f;
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user