]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pfring: follow API change
authorEric Leblond <eric@regit.org>
Thu, 24 May 2012 16:38:36 +0000 (18:38 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 25 May 2012 10:46:29 +0000 (12:46 +0200)
As pointed out in issue #459, pf_ring API has changed. Since
5.4.0 release pf_ring_open has one less argument.

configure.in
src/source-pfring.c

index 64c5be8bf1ef64662a0d457ee76951cfee1611e5..406a8a53d5b723d98d23198aec5240f4d0320ecc 100644 (file)
@@ -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.h>
+                ],
+                [
+                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}"
+
     ])
 
 
index ad1531d6798f6d80d1c68e7c9a7be043d2f3cf41..4079ce258b22b6b1fef3494e3559fe1c090786ed 100644 (file)
@@ -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);