From: Eric Leblond Date: Thu, 24 May 2012 16:38:36 +0000 (+0200) Subject: pfring: follow API change X-Git-Tag: suricata-1.3beta2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dbf5d79e4397a86afb423b24822c4002c43d645e;p=thirdparty%2Fsuricata.git pfring: follow API change As pointed out in issue #459, pf_ring API has changed. Since 5.4.0 release pf_ring_open has one less argument. --- diff --git a/configure.in b/configure.in index 64c5be8bf1..406a8a53d5 100644 --- a/configure.in +++ b/configure.in @@ -747,10 +747,7 @@ AC_INIT(configure.in) ], [ u_char *buffer; - struct pfring_pkthdr hdr; - pfring *pd; memset(&hdr, 0, sizeof(hdr)); - pd = pfring_open("eth1", 1, 1515, 1); - pfring_recv(pd, &buffer, 0, &hdr, 1); + pfring_recv(NULL, &buffer, 0, NULL, 1); ], [ pfring_recv_uchar_buff=yes ], [:]) @@ -762,6 +759,27 @@ AC_INIT(configure.in) else AC_MSG_RESULT(no) fi + + # check if the argument to nfq_get_payload is signed or unsigned + AC_MSG_CHECKING([for post 5.4.0 pfring_open function]) + STORECFLAGS="${CFLAGS}" + CFLAGS="${CFLAGS} -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [ + #include + ], + [ + pfring_open(NULL, 0, 0); + ])], + [pfring_new_open="yes"], + [pfring_new_open="no"]) + AC_MSG_RESULT($pfring_new_open) + if test "x$pfring_new_open" = "xyes"; then + AC_DEFINE([HAVE_PFRING_OPEN_NEW], [1], [For post 5.4.0 version of pfring_open]) + fi + CFLAGS="${STORECFLAGS}" + ]) diff --git a/src/source-pfring.c b/src/source-pfring.c index ad1531d679..4079ce258b 100644 --- a/src/source-pfring.c +++ b/src/source-pfring.c @@ -334,7 +334,12 @@ TmEcode ReceivePfringThreadInit(ThreadVars *tv, void *initdata, void **data) { SCReturnInt(TM_ECODE_FAILED); } +#ifdef HAVE_PFRING_OPEN_NEW + ptv->pd = pfring_open(ptv->interface, (uint32_t)default_packet_size, + PF_RING_REENTRANT | PF_RING_LONG_HEADER | PF_RING_PROMISC); +#else ptv->pd = pfring_open(ptv->interface, LIBPFRING_PROMISC, (uint32_t)default_packet_size, LIBPFRING_REENTRANT); +#endif if (ptv->pd == NULL) { SCLogError(SC_ERR_PF_RING_OPEN,"opening %s failed: pfring_open error", ptv->interface);