]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nflog: set socket timeout 978/head
authorVictor Julien <victor@inliniac.net>
Mon, 26 May 2014 10:45:59 +0000 (12:45 +0200)
committerVictor Julien <victor@inliniac.net>
Mon, 26 May 2014 10:45:59 +0000 (12:45 +0200)
Set socket timeout so that we can exit if there is no traffic.

It would hang after the SIGINT signal, until packets arived.

src/source-nflog.c
src/util-error.c
src/util-error.h

index 372fad9e360d943855936390060daa3492095bfb..1bda45b0e5b3adc7116a15a797018781a56c423d 100644 (file)
@@ -289,6 +289,18 @@ TmEcode ReceiveNFLOGThreadInit(ThreadVars *tv, void *initdata, void **data)
                SCReturnInt(TM_ECODE_FAILED);
     }
 
+    /* set a timeout to the socket so we can check for a signal
+     * in case we don't get packets for a longer period. */
+    struct timeval timev;
+    timev.tv_sec = 1;
+    timev.tv_usec = 0;
+
+    int fd = nflog_fd(ntv->h);
+    if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timev, sizeof(timev)) == -1) {
+        SCLogWarning(SC_WARN_NFLOG_SETSOCKOPT, "can't set socket "
+                "timeout: %s", strerror(errno));
+    }
+
 #ifdef PACKET_STATISTICS
     ntv->capture_kernel_packets = SCPerfTVRegisterCounter("capture.kernel_packets",
                                                            ntv->tv,
index 1c5a1e21fa12d05ed048963a0cc0851c04480f16..99b65ba7b5960f748786fcfeac0997267ea28b8a 100644 (file)
@@ -166,6 +166,7 @@ const char * SCErrorToString(SCError err)
         CASE_CODE (SC_ERR_NFLOG_HANDLE_PKT);
         CASE_CODE (SC_ERR_NFLOG_GROUP);
         CASE_CODE (SC_ERR_NFLOG_FD);
+        CASE_CODE (SC_WARN_NFLOG_SETSOCKOPT);
         CASE_CODE (SC_WARN_NFLOG_RECV);
         CASE_CODE (SC_WARN_NFLOG_LOSING_EVENTS);
         CASE_CODE (SC_WARN_NFLOG_MAXBUFSIZ_REACHED);
index 19e79ed438573838625a842d6c7653911ff8134f..1e8eba3920a6ad284429a421b24d4f35de5508f9 100644 (file)
@@ -285,6 +285,7 @@ typedef enum {
     SC_WARN_NFLOG_RECV,
     SC_WARN_NFLOG_LOSING_EVENTS,
     SC_WARN_NFLOG_MAXBUFSIZ_REACHED,
+    SC_WARN_NFLOG_SETSOCKOPT,
 } SCError;
 
 const char *SCErrorToString(SCError);