unsigned char pcap_state;
/* thread specific bpf */
struct bpf_program filter;
+ /* ptr to string from config */
char *bpf_filter;
/* data link type for the thread */
char errbuf[PCAP_ERRBUF_SIZE];
ptv->pcap_handle = pcap_create((char *)pcapconfig->iface, errbuf);
if (ptv->pcap_handle == NULL) {
- SCLogError(SC_ERR_PCAP_CREATE, "Couldn't create a new pcap handler, error %s", pcap_geterr(ptv->pcap_handle));
+ if (strlen(errbuf)) {
+ SCLogError(SC_ERR_PCAP_CREATE, "Couldn't create a new pcap handler for %s, error %s",
+ (char *)pcapconfig->iface, errbuf);
+ } else {
+ SCLogError(SC_ERR_PCAP_CREATE, "Couldn't create a new pcap handler for %s",
+ (char *)pcapconfig->iface);
+ }
SCFree(ptv);
pcapconfig->DerefFunc(pcapconfig);
SCReturnInt(TM_ECODE_FAILED);
/* set bpf filter if we have one */
if (pcapconfig->bpf_filter) {
- ptv->bpf_filter = SCStrdup(pcapconfig->bpf_filter);
- /* free bpf as we are using a copy */
- SCFree(pcapconfig->bpf_filter);
+ ptv->bpf_filter = pcapconfig->bpf_filter;
+
if(pcap_compile(ptv->pcap_handle,&ptv->filter,ptv->bpf_filter,1,0) < 0) {
SCLogError(SC_ERR_BPF,"bpf compilation error %s",pcap_geterr(ptv->pcap_handle));
SCFree(ptv);
/* set bpf filter if we have one */
if (pcapconfig->bpf_filter) {
- ptv->bpf_filter = SCStrdup(pcapconfig->bpf_filter);
+ ptv->bpf_filter = pcapconfig->bpf_filter;
SCLogInfo("using bpf-filter \"%s\"", ptv->bpf_filter);
if(pcap_compile(ptv->pcap_handle,&ptv->filter, ptv->bpf_filter,1,0) < 0) {
TmEcode ReceivePcapThreadDeinit(ThreadVars *tv, void *data) {
PcapThreadVars *ptv = (PcapThreadVars *)data;
- if (ptv->bpf_filter) {
- SCFree(ptv->bpf_filter);
- ptv->bpf_filter = NULL;
- }
pcap_close(ptv->pcap_handle);
SCReturnInt(TM_ECODE_OK);
}