From: Victor Julien Date: Fri, 28 Apr 2017 07:44:37 +0000 (+0200) Subject: cleanup: remove libpcap < 1 support X-Git-Tag: suricata-4.0.0-beta1~117 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cda6e0291f561fac715c470a195ad01026b17918;p=thirdparty%2Fsuricata.git cleanup: remove libpcap < 1 support --- diff --git a/configure.ac b/configure.ac index 8ad0f6f7c7..200052f2b4 100644 --- a/configure.ac +++ b/configure.ac @@ -1117,17 +1117,22 @@ #see: http://blog.flameeyes.eu/2008/04/29/i-consider-ac_check_lib-harmful TMPLIBS="${LIBS}" AC_CHECK_LIB(pcap, pcap_activate,, LPCAPVTEST="no") - if test "$LPCAPVTEST" != "no"; then - AC_PATH_PROG(HAVE_PCAP_CONFIG, pcap-config, "no") - if test "$HAVE_PCAP_CONFIG" = "no" -o "$cross_compiling" = "yes"; then - AC_DEFINE([LIBPCAP_VERSION_MAJOR],[1],(libpcap version 1.0+)) - else - PCAP_CFLAGS="$(pcap-config --defines) $(pcap-config --cflags)" - AC_SUBST(PCAP_CFLAGS) - AC_DEFINE([LIBPCAP_VERSION_MAJOR],[1],(libpcap version 1.0+)) - fi + if test "$LPCAPVTEST" = "no"; then + echo + echo " ERROR! libpcap library too old, need at least 1+, " + echo " go get it from http://www.tcpdump.org or your distribution:" + echo + echo " Ubuntu: apt-get install libpcap-dev" + echo " Fedora: yum install libpcap-devel" + echo + exit 1 + fi + AC_PATH_PROG(HAVE_PCAP_CONFIG, pcap-config, "no") + if test "$HAVE_PCAP_CONFIG" = "no" -o "$cross_compiling" = "yes"; then + AC_MSG_RESULT(no pcap-config is use) else - AC_DEFINE([LIBPCAP_VERSION_MAJOR],[0],(libpcap version 0.x)) + PCAP_CFLAGS="$(pcap-config --defines) $(pcap-config --cflags)" + AC_SUBST(PCAP_CFLAGS) fi LIBS="${TMPLIBS}" diff --git a/src/source-pcap.c b/src/source-pcap.c index 33d8c72529..08a2ab505b 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -99,9 +99,6 @@ typedef struct PcapThreadVars_ ChecksumValidationMode checksum_mode; -#if LIBPCAP_VERSION_MAJOR == 0 - char iface[PCAP_IFACE_NAME_LENGTH]; -#endif LiveDevice *livedev; } PcapThreadVars; @@ -163,8 +160,6 @@ static inline void PcapDumpCounters(PcapThreadVars *ptv) } } - -#if LIBPCAP_VERSION_MAJOR == 1 static int PcapTryReopen(PcapThreadVars *ptv) { int pcap_activate_r; @@ -191,42 +186,6 @@ static int PcapTryReopen(PcapThreadVars *ptv) ptv->pcap_state = PCAP_STATE_UP; return 0; } -#else /* implied LIBPCAP_VERSION_MAJOR == 0 */ -static int PcapTryReopen(PcapThreadVars *ptv) -{ - char errbuf[PCAP_ERRBUF_SIZE] = ""; - - ptv->pcap_state = PCAP_STATE_DOWN; - pcap_close(ptv->pcap_handle); - - ptv->pcap_handle = pcap_open_live((char *)ptv->iface, ptv->pcap_snaplen, - LIBPCAP_PROMISC, LIBPCAP_COPYWAIT, errbuf); - if (ptv->pcap_handle == NULL) { - SCLogError(SC_ERR_PCAP_OPEN_LIVE, "Problem creating pcap handler for live mode, error %s", errbuf); - return -1; - } - - /* set bpf filter if we have one */ - if (ptv->bpf_filter != NULL) { - SCLogInfo("using bpf-filter \"%s\"", ptv->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)); - return -1; - } - - if(pcap_setfilter(ptv->pcap_handle,&ptv->filter) < 0) { - SCLogError(SC_ERR_BPF,"could not set bpf filter %s",pcap_geterr(ptv->pcap_handle)); - return -1; - } - } - - SCLogInfo("Recovering interface listening"); - ptv->pcap_state = PCAP_STATE_UP; - return 0; -} - -#endif void PcapCallbackLoop(char *user, struct pcap_pkthdr *h, u_char *pkt) { @@ -366,7 +325,6 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) * * \todo Create a general pcap setup function. */ -#if LIBPCAP_VERSION_MAJOR == 1 TmEcode ReceivePcapThreadInit(ThreadVars *tv, void *initdata, void **data) { SCEnter(); @@ -533,110 +491,6 @@ TmEcode ReceivePcapThreadInit(ThreadVars *tv, void *initdata, void **data) *data = (void *)ptv; SCReturnInt(TM_ECODE_OK); } -#else /* implied LIBPCAP_VERSION_MAJOR == 0 */ -TmEcode ReceivePcapThreadInit(ThreadVars *tv, void *initdata, void **data) -{ - SCEnter(); - PcapIfaceConfig *pcapconfig = initdata; - - if (initdata == NULL) { - SCLogError(SC_ERR_INVALID_ARGUMENT, "initdata == NULL"); - SCReturnInt(TM_ECODE_FAILED); - } - - PcapThreadVars *ptv = SCMalloc(sizeof(PcapThreadVars)); - if (unlikely(ptv == NULL)) { - pcapconfig->DerefFunc(pcapconfig); - SCReturnInt(TM_ECODE_FAILED); - } - memset(ptv, 0, sizeof(PcapThreadVars)); - - ptv->tv = tv; - - ptv->livedev = LiveGetDevice(pcapconfig->iface); - if (ptv->livedev == NULL) { - SCLogError(SC_ERR_INVALID_VALUE, "Unable to find Live device"); - SCFree(ptv); - SCReturnInt(TM_ECODE_FAILED); - } - - SCLogInfo("using interface %s", pcapconfig->iface); - if (strlen(pcapconfig->iface) > PCAP_IFACE_NAME_LENGTH) { - SCFree(ptv); - /* Dereference config */ - pcapconfig->DerefFunc(pcapconfig); - SCReturnInt(TM_ECODE_FAILED); - } - strlcpy(ptv->iface, pcapconfig->iface, PCAP_IFACE_NAME_LENGTH); - - if (pcapconfig->snaplen == 0) { - /* We try to set snaplen from MTU value */ - ptv->pcap_snaplen = GetIfaceMaxPacketSize(pcapconfig->iface); - /* be conservative with old pcap lib to mimic old tcpdump behavior - when MTU was not available. */ - if (ptv->pcap_snaplen <= 0) - ptv->pcap_snaplen = LIBPCAP_SNAPLEN; - } else { - ptv->pcap_snaplen = pcapconfig->snaplen; - } - - char errbuf[PCAP_ERRBUF_SIZE] = ""; - ptv->pcap_handle = pcap_open_live(ptv->iface, ptv->pcap_snaplen, - LIBPCAP_PROMISC, LIBPCAP_COPYWAIT, errbuf); - if (ptv->pcap_handle == NULL) { - SCLogError(SC_ERR_PCAP_OPEN_LIVE, "Problem creating pcap handler for live mode, error %s", errbuf); - SCFree(ptv); - /* Dereference config */ - pcapconfig->DerefFunc(pcapconfig); - SCReturnInt(TM_ECODE_FAILED); - } - - /* set bpf filter if we have one */ - if (pcapconfig->bpf_filter) { - SCMutexLock(&pcap_bpf_compile_lock); - - 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) { - SCLogError(SC_ERR_BPF,"bpf compilation error %s",pcap_geterr(ptv->pcap_handle)); - - SCMutexUnlock(&pcap_bpf_compile_lock); - SCFree(ptv); - /* Dereference config */ - pcapconfig->DerefFunc(pcapconfig); - return TM_ECODE_FAILED; - } - - if(pcap_setfilter(ptv->pcap_handle,&ptv->filter) < 0) { - SCLogError(SC_ERR_BPF,"could not set bpf filter %s",pcap_geterr(ptv->pcap_handle)); - - SCMutexUnlock(&pcap_bpf_compile_lock); - SCFree(ptv); - /* Dereference config */ - pcapconfig->DerefFunc(pcapconfig); - return TM_ECODE_FAILED; - } - - SCMutexUnlock(&pcap_bpf_compile_lock); - } - - ptv->datalink = pcap_datalink(ptv->pcap_handle); - - ptv->capture_kernel_packets = StatsRegisterCounter("capture.kernel_packets", - ptv->tv); - ptv->capture_kernel_drops = StatsRegisterCounter("capture.kernel_drops", - ptv->tv); - ptv->capture_kernel_ifdrops = StatsRegisterCounter("capture.kernel_ifdrops", - ptv->tv); - - *data = (void *)ptv; - - /* Dereference config */ - pcapconfig->DerefFunc(pcapconfig); - SCReturnInt(TM_ECODE_OK); -} -#endif /* LIBPCAP_VERSION_MAJOR */ /** * \brief This function prints stats to the screen at exit. diff --git a/src/suricata.c b/src/suricata.c index 8df7e796d4..f974950659 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -718,11 +718,6 @@ void SCPrintBuildInfo(void) #ifdef HAVE_PCAP_SET_BUFF strlcat(features, "PCAP_SET_BUFF ", sizeof(features)); #endif -#if LIBPCAP_VERSION_MAJOR == 1 - strlcat(features, "LIBPCAP_VERSION_MAJOR=1 ", sizeof(features)); -#elif LIBPCAP_VERSION_MAJOR == 0 - strlcat(features, "LIBPCAP_VERSION_MAJOR=0 ", sizeof(features)); -#endif #ifdef __SC_CUDA_SUPPORT__ strlcat(features, "CUDA ", sizeof(features)); #endif