{
PfringIfaceConfig *pfp = (PfringIfaceConfig *)conf;
if (SC_ATOMIC_SUB(pfp->ref, 1) == 0) {
-#ifdef HAVE_PFRING_SET_BPF_FILTER
if (pfp->bpf_filter) {
SCFree(pfp->bpf_filter);
}
-#endif
SCFree(pfp);
}
}
char *threadsstr = NULL;
PfringIfaceConfig *pfconf = SCMalloc(sizeof(*pfconf));
char *tmpclusterid;
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
char *tmpctype = NULL;
cluster_type default_ctype = CLUSTER_ROUND_ROBIN;
#endif
strlcpy(pfconf->iface, iface, sizeof(pfconf->iface));
pfconf->threads = 1;
pfconf->cluster_id = 1;
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
pfconf->ctype = default_ctype;
#endif
pfconf->DerefFunc = PfringDerefConfig;
SCLogDebug("Going to use cluster-id %" PRId32, pfconf->cluster_id);
}
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
if (strncmp(pfconf->iface, "zc", 2) == 0) {
SCLogInfo("ZC interface detected, not setting cluster type for PF_RING (iface %s)",
pfconf->iface);
SCFree(pfconf);
return NULL;
}
-#endif
+#endif /* HAVE_PFRING */
return pfconf;
}
PfringIfaceConfig *pfconf = SCMalloc(sizeof(*pfconf));
char *tmpclusterid;
char *tmpctype = NULL;
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
cluster_type default_ctype = CLUSTER_ROUND_ROBIN;
int getctype = 0;
#endif
-#ifdef HAVE_PFRING_SET_BPF_FILTER
char *bpf_filter = NULL;
-#endif /* HAVE_PFRING_SET_BPF_FILTER */
if (unlikely(pfconf == NULL)) {
return NULL;
strlcpy(pfconf->iface, iface, sizeof(pfconf->iface));
pfconf->threads = 1;
pfconf->cluster_id = 1;
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
pfconf->ctype = (cluster_type)default_ctype;
#endif
pfconf->DerefFunc = PfringDerefConfig;
SCLogDebug("Going to use cluster-id %" PRId32, pfconf->cluster_id);
}
}
-#ifdef HAVE_PFRING_SET_BPF_FILTER
+
/*load pfring bpf filter*/
/* command line value has precedence */
if (ConfGet("bpf-filter", &bpf_filter) == 1) {
}
}
}
-#endif /* HAVE_PFRING_SET_BPF_FILTER */
-#ifdef HAVE_PFRING_CLUSTER_TYPE
+#ifdef HAVE_PFRING
if (ConfGet("pfring.cluster-type", &tmpctype) == 1) {
SCLogDebug("Going to use command-line provided cluster-type");
getctype = 1;
return NULL;
}
}
-
-#endif /* HAVE_PFRING_CLUSTER_TYPE */
-
+#endif /* HAVE_PFRING */
if (ConfGetChildValueWithDefault(if_root, if_default, "checksum-checks", &tmpctype) == 1) {
if (strcmp(tmpctype, "auto") == 0) {
pfconf->checksum_mode = CHECKSUM_VALIDATION_AUTO;
/* threads count */
int threads;
-#ifdef HAVE_PFRING_CLUSTER_TYPE
cluster_type ctype;
-#endif /* HAVE_PFRING_CLUSTER_TYPE */
+
uint8_t cluster_id;
char *interface;
LiveDevice *livedev;
-#ifdef HAVE_PFRING_SET_BPF_FILTER
+
char *bpf_filter;
-#endif /* HAVE_PFRING_SET_BPF_FILTER */
ChecksumValidationMode checksum_mode;
} PfringThreadVars;
/* we have to enable the ring here as we need to do it after all
* the threads have called pfring_set_cluster(). */
-#ifdef HAVE_PFRING_ENABLE
int rc = pfring_enable_ring(ptv->pd);
if (rc != 0) {
SCLogError(SC_ERR_PF_RING_OPEN, "pfring_enable_ring failed returned %d ", rc);
SCReturnInt(TM_ECODE_FAILED);
}
-#endif /* HAVE_PFRING_ENABLE */
while(1) {
if (suricata_ctl_flags & (SURICATA_STOP | SURICATA_KILL)) {
hdr.ts.tv_sec = hdr.ts.tv_usec = 0;
/* Depending on what compile time options are used for pfring we either return 0 or -1 on error and always 1 for success */
-#ifdef HAVE_PFRING_RECV_UCHAR
u_char *pkt_buffer = GET_PKT_DIRECT_DATA(p);
u_int buffer_size = GET_PKT_DIRECT_MAX_SIZE(p);
int r = pfring_recv(ptv->pd, &pkt_buffer,
if (buffer_size == 0) {
PacketSetData(p, pkt_buffer, hdr.caplen);
}
-#else
- int r = pfring_recv(ptv->pd, (char *)GET_PKT_DIRECT_DATA(p),
- (u_int)GET_PKT_DIRECT_MAX_SIZE(p),
- &hdr,
- LIBPFRING_WAIT_FOR_INCOMING);
-#endif /* HAVE_PFRING_RECV_UCHAR */
if (r == 1) {
//printf("RecievePfring src %" PRIu32 " sport %" PRIu32 " dst %" PRIu32 " dstport %" PRIu32 "\n",
}
}
-#ifdef HAVE_PFRING_OPEN_NEW
ptv->pd = pfring_open(ptv->interface, (uint32_t)default_packet_size, opflag);
-#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,"Failed to open %s: pfring_open error."
" Check if %s exists and pf_ring module is loaded.",
} else if (strncmp(ptv->interface, "zc", 2) == 0) {
SCLogInfo("ZC interface detected, not adding thread to cluster");
} else {
-#ifdef HAVE_PFRING_CLUSTER_TYPE
ptv->ctype = pfconf->ctype;
rc = pfring_set_cluster(ptv->pd, ptv->cluster_id, ptv->ctype);
-#else
- rc = pfring_set_cluster(ptv->pd, ptv->cluster_id);
-#endif /* HAVE_PFRING_CLUSTER_TYPE */
if (rc != 0) {
SCLogError(SC_ERR_PF_RING_SET_CLUSTER_FAILED, "pfring_set_cluster "
version & 0x000000FF, ptv->interface, ptv->cluster_id);
}
-#ifdef HAVE_PFRING_SET_BPF_FILTER
if (pfconf->bpf_filter) {
ptv->bpf_filter = SCStrdup(pfconf->bpf_filter);
if (unlikely(ptv->bpf_filter == NULL)) {
}
}
}
-#endif /* HAVE_PFRING_SET_BPF_FILTER */
ptv->capture_kernel_packets = SCPerfTVRegisterCounter("capture.kernel_packets",
ptv->tv,
if (ptv->interface)
SCFree(ptv->interface);
pfring_remove_from_cluster(ptv->pd);
-#ifdef HAVE_PFRING_SET_BPF_FILTER
+
if (ptv->bpf_filter) {
pfring_remove_bpf_filter(ptv->pd);
SCFree(ptv->bpf_filter);
}
-#endif /* HAVE_PFRING_SET_BPF_FILTER */
+
pfring_close(ptv->pd);
return TM_ECODE_OK;
}