|
|
|
@ -32,6 +32,7 @@
|
|
|
|
|
#include "runmode-unix-socket.h"
|
|
|
|
|
#include "suricata.h"
|
|
|
|
|
#include "conf.h"
|
|
|
|
|
#include "util-misc.h"
|
|
|
|
|
|
|
|
|
|
extern uint32_t max_pending_packets;
|
|
|
|
|
PcapFileGlobalVars pcap_g;
|
|
|
|
@ -136,10 +137,33 @@ void TmModuleDecodePcapFileRegister (void)
|
|
|
|
|
tmm_modules[TMM_DECODEPCAPFILE].flags = TM_FLAG_DECODE_TM;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define PCAP_FILE_BUFFER_SIZE_DEFAULT 131072U // 128 KiB
|
|
|
|
|
#define PCAP_FILE_BUFFER_SIZE_MIN 4096U // 4 KiB
|
|
|
|
|
#define PCAP_FILE_BUFFER_SIZE_MAX 67108864U // 64MiB
|
|
|
|
|
|
|
|
|
|
void PcapFileGlobalInit(void)
|
|
|
|
|
{
|
|
|
|
|
memset(&pcap_g, 0x00, sizeof(pcap_g));
|
|
|
|
|
SC_ATOMIC_INIT(pcap_g.invalid_checksums);
|
|
|
|
|
|
|
|
|
|
#if defined(HAVE_SETVBUF) && !defined(OS_WIN32)
|
|
|
|
|
pcap_g.read_buffer_size = PCAP_FILE_BUFFER_SIZE_DEFAULT;
|
|
|
|
|
|
|
|
|
|
const char *str = NULL;
|
|
|
|
|
if (ConfGet("pcap-file.buffer-size", &str) == 1) {
|
|
|
|
|
uint32_t value = 0;
|
|
|
|
|
if (ParseSizeStringU32(str, &value) < 0) {
|
|
|
|
|
SCLogWarning("failed to parse pcap-file.buffer-size %s", str);
|
|
|
|
|
}
|
|
|
|
|
if (value >= PCAP_FILE_BUFFER_SIZE_MIN && value <= PCAP_FILE_BUFFER_SIZE_MAX) {
|
|
|
|
|
SCLogInfo("Pcap-file will use %u buffer size", value);
|
|
|
|
|
pcap_g.read_buffer_size = value;
|
|
|
|
|
} else {
|
|
|
|
|
SCLogWarning("pcap-file.buffer-size value of %u is invalid. Valid range is %u-%u",
|
|
|
|
|
value, PCAP_FILE_BUFFER_SIZE_MIN, PCAP_FILE_BUFFER_SIZE_MAX);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TmEcode PcapFileExit(TmEcode status, struct timespec *last_processed)
|
|
|
|
@ -250,7 +274,8 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d
|
|
|
|
|
|
|
|
|
|
if(directory == NULL) {
|
|
|
|
|
SCLogDebug("argument %s was a file", (char *)initdata);
|
|
|
|
|
PcapFileFileVars *pv = SCCalloc(1, sizeof(PcapFileFileVars));
|
|
|
|
|
const size_t toalloc = sizeof(PcapFileFileVars) + pcap_g.read_buffer_size;
|
|
|
|
|
PcapFileFileVars *pv = SCCalloc(1, toalloc);
|
|
|
|
|
if (unlikely(pv == NULL)) {
|
|
|
|
|
SCLogError("Failed to allocate file vars");
|
|
|
|
|
CleanupPcapFileThreadVars(ptv);
|
|
|
|
|