From: Victor Julien Date: Fri, 25 Jul 2014 11:47:59 +0000 (+0200) Subject: Fix pcap packet acquisition methods X-Git-Tag: suricata-2.1beta1~87 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b5d3b7e92ad1e712950eba5aa822df6d691e6af5;p=thirdparty%2Fsuricata.git Fix pcap packet acquisition methods Fix pcap packet acquisition methods passing 0 to pcap_dispatch. Previously they passed the packet pool size, but the packet_q_len variable was now hardcoded at 0. This patch sets packet_q_len to 64. If packet pool is empty, we fall back to direct alloc. As the pcap_dispatch function is only called when packet pool is not empty, we alloc at most 63 packets. --- diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c index 0d6f9a74ed..da0f6ee35c 100644 --- a/src/source-pcap-file.c +++ b/src/source-pcap-file.c @@ -185,7 +185,7 @@ TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot) { SCEnter(); - uint16_t packet_q_len = 0; + int packet_q_len = 64; PcapFileThreadVars *ptv = (PcapFileThreadVars *)data; int r; TmSlot *s = (TmSlot *)slot; @@ -203,7 +203,7 @@ TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot) PacketPoolWait(); /* Right now we just support reading packets one at a time. */ - r = pcap_dispatch(pcap_g.pcap_handle, (int)packet_q_len, + r = pcap_dispatch(pcap_g.pcap_handle, packet_q_len, (pcap_handler)PcapFileCallbackLoop, (u_char *)ptv); if (unlikely(r == -1)) { SCLogError(SC_ERR_PCAP_DISPATCH, "error code %" PRId32 " %s", diff --git a/src/source-pcap.c b/src/source-pcap.c index f116da3fbe..e7c40d2f20 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -294,7 +294,7 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) { SCEnter(); - uint16_t packet_q_len = 0; + int packet_q_len = 64; PcapThreadVars *ptv = (PcapThreadVars *)data; int r; TmSlot *s = (TmSlot *)slot; @@ -312,7 +312,7 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) PacketPoolWait(); /* Right now we just support reading packets one at a time. */ - r = pcap_dispatch(ptv->pcap_handle, (int)packet_q_len, + r = pcap_dispatch(ptv->pcap_handle, packet_q_len, (pcap_handler)PcapCallbackLoop, (u_char *)ptv); if (unlikely(r < 0)) { int dbreak = 0;