diff options
-rw-r--r-- | Makefile | 11 | ||||
-rw-r--r-- | bpf.h | 3 | ||||
-rw-r--r-- | bpf_comp.c | 3 | ||||
-rwxr-xr-x | configure | 67 | ||||
-rw-r--r-- | netsniff-ng.c | 2 | ||||
-rw-r--r-- | netsniff-ng/Makefile | 4 | ||||
-rw-r--r-- | tstamping.c | 8 | ||||
-rw-r--r-- | tstamping.h | 9 |
8 files changed, 86 insertions, 21 deletions
@@ -81,12 +81,6 @@ CFLAGS_DEF += -D_LARGEFILE_SOURCE CFLAGS_DEF += -D_LARGEFILE64_SOURCE CFLAGS_DEF += -D_FILE_OFFSET_BITS=64 -ifeq ($(CONFIG_LIBPCAP), 1) - CFLAGS_PCAP = -D__WITH_TCPDUMP_LIKE_FILTER -else - CFLAGS_PCAP = -endif - WFLAGS_DEF = -Wall WFLAGS_DEF += -Wformat=2 WFLAGS_DEF += -Wmissing-prototypes @@ -124,9 +118,6 @@ ALL_CFLAGS = $(CFLAGS) $(CPPFLAGS) -I. ALL_CFLAGS += -DVERSION_STRING=\"$(VERSION_STRING)\" ALL_CFLAGS += -DVERSION_LONG=\"$(VERSION_LONG)\" ALL_CFLAGS += -DPREFIX_STRING=\"$(PREFIX)\" -ifneq ($(wildcard /usr/include/linux/net_tstamp.h),) - ALL_CFLAGS += -D__WITH_HARDWARE_TIMESTAMPING -endif VERSION_STRING = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_LONG = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)~$(NAME) @@ -252,7 +243,7 @@ $(foreach tool,$(TOOLS),$(eval $(call TOOL_templ,$(tool)))) %:: ; -netsniff-ng: ALL_CFLAGS += $(shell pkg-config --cflags libnl-3.0) $(shell pkg-config --cflags libnl-genl-3.0) $(CFLAGS_PCAP) -D__WITH_PROTOS +netsniff-ng: ALL_CFLAGS += $(shell pkg-config --cflags libnl-3.0) $(shell pkg-config --cflags libnl-genl-3.0) -D__WITH_PROTOS trafgen: ALL_CFLAGS += -I.. $(shell pkg-config --cflags libnl-3.0) $(shell pkg-config --cflags libnl-genl-3.0) -D__WITH_PROTOS ifpps: ALL_CFLAGS += $(shell pkg-config --cflags ncurses) flowtop: ALL_CFLAGS += $(shell pkg-config --cflags ncurses) @@ -8,6 +8,7 @@ #include "xmalloc.h" #include "bpf_insns.h" #include "bpf_ext.h" +#include "config.h" extern void bpf_dump_op_table(void); extern void bpf_dump_all(struct sock_fprog *bpf); @@ -18,7 +19,7 @@ extern void bpf_attach_to_sock(int sock, struct sock_fprog *bpf); extern void bpf_detach_from_sock(int sock); extern int enable_kernel_bpf_jit_compiler(void); extern void bpf_parse_rules(char *rulefile, struct sock_fprog *bpf, uint32_t link_type); -#ifdef __WITH_TCPDUMP_LIKE_FILTER +#if defined(HAVE_TCPDUMP_LIKE_FILTER) && defined(NEED_TCPDUMP_LIKE_FILTER) extern void bpf_try_compile(const char *rulefile, struct sock_fprog *bpf, uint32_t link_type); #else @@ -4,10 +4,13 @@ * Subject to the GPL, version 2. */ +#define NEED_TCPDUMP_LIKE_FILTER + #include <pcap.h> #include <linux/filter.h> #include "xmalloc.h" +#include "config.h" #include "bpf.h" #include "die.h" @@ -12,6 +12,9 @@ MISSING_NACL=0 TOOLS="netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn" TOOLS_NOBUILD="" +HAVE_LIBPCAP=0 +HAVE_HWTSTAMP=0 + [ -z $CC ] && CC=cc TMPDIR=$(mktemp -d config.XXXXXX) @@ -369,6 +372,55 @@ EOF else echo "[YES]" echo "CONFIG_LIBPCAP=1" >> Config + HAVE_LIBPCAP=1 + fi +} + +check_hwtstamp() +{ + echo -n "[*] Checking hw timestamping ... " + + cat > $TMPDIR/hwtstest.c << EOF +#include <string.h> +#include <arpa/inet.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <linux/sockios.h> +#include <linux/net_tstamp.h> +#include <linux/if_packet.h> +#include <linux/if_ether.h> +#include <linux/if.h> + +void main(void) +{ + int timesource = SOF_TIMESTAMPING_RAW_HARDWARE, ret; + int sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); + struct hwtstamp_config hwconfig; + struct ifreq ifr; + + memset(&hwconfig, 0, sizeof(hwconfig)); + hwconfig.tx_type = HWTSTAMP_TX_OFF; + hwconfig.rx_filter = HWTSTAMP_FILTER_ALL; + + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, "lo", sizeof(ifr.ifr_name)); + ifr.ifr_data = &hwconfig; + + ioctl(sock, SIOCSHWTSTAMP, &ifr); + setsockopt(sock, SOL_PACKET, PACKET_TIMESTAMP, ×ource, + sizeof(timesource)); +} +EOF + + $CC -o $TMPDIR/hwtstest $TMPDIR/hwtstest.c >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/hwtstest ] ; then + echo "[NO]" + echo "CONFIG_HWTSTAMP=0" >> Config + else + echo "[YES]" + echo "CONFIG_HWTSTAMP=1" >> Config + HAVE_HWTSTAMP=1 fi } @@ -422,8 +474,19 @@ EOF gen_config_hdr() { local _version="`git describe --always`" + local _have_libpcap="" + local _have_hwts="" + echo "[*] Generating config.h ... " + if [ "$HAVE_LIBPCAP" == "1" ] ; then + _have_libpcap="#define HAVE_TCPDUMP_LIKE_FILTER 1" + fi + + if [ "$HAVE_HWTSTAMP" == "1" ] ; then + _have_hwts="#define HAVE_HARDWARE_TIMESTAMPING 1" + fi + cat > config.h << EOF #ifndef CONFIG_H #define CONFIG_H @@ -433,6 +496,8 @@ gen_config_hdr() #define FILE_PUBKEY ".curvetun/pub.key" #define FILE_USERNAM ".curvetun/username" #define GITVERSION "$_version" +$_have_libpcap +$_have_hwts #endif /* CONFIG_H */ EOF } @@ -456,7 +521,7 @@ check_libgeoip check_zlib check_urcu check_libpcap -# mausezahn dependencies +check_hwtstamp check_libcli check_libnet diff --git a/netsniff-ng.c b/netsniff-ng.c index 09dbf41..7f03d4b 100644 --- a/netsniff-ng.c +++ b/netsniff-ng.c @@ -6,6 +6,8 @@ */ #define _GNU_SOURCE +#define NEED_TCPDUMP_LIKE_FILTER + #include <stdio.h> #include <stdlib.h> #include <signal.h> diff --git a/netsniff-ng/Makefile b/netsniff-ng/Makefile index e05ad1d..2f64c0f 100644 --- a/netsniff-ng/Makefile +++ b/netsniff-ng/Makefile @@ -57,7 +57,6 @@ netsniff-ng-objs = dissector.o \ ring_tx.o \ ring.o \ tprintf.o \ - tstamping.o \ timer.o \ geoip.o \ mac80211.o \ @@ -66,3 +65,6 @@ netsniff-ng-objs = dissector.o \ ifeq ($(CONFIG_LIBPCAP), 1) netsniff-ng-objs += bpf_comp.o endif +ifeq ($(CONFIG_HWTSTAMP), 1) +netsniff-ng-objs += tstamping.o +endif diff --git a/tstamping.c b/tstamping.c index 7c97850..860b7a0 100644 --- a/tstamping.c +++ b/tstamping.c @@ -4,14 +4,12 @@ #include <sys/socket.h> #include <linux/sockios.h> #include <linux/net_tstamp.h> -#include <linux/net_tstamp.h> #include <linux/if_packet.h> #include <linux/if.h> #include "str.h" #include "tstamping.h" -#ifdef __WITH_HARDWARE_TIMESTAMPING int set_sockopt_hwtimestamp(int sock, const char *dev) { int timesource, ret; @@ -38,9 +36,3 @@ int set_sockopt_hwtimestamp(int sock, const char *dev) return setsockopt(sock, SOL_PACKET, PACKET_TIMESTAMP, ×ource, sizeof(timesource)); } -#else -int set_sockopt_hwtimestamp(int sock, const char *dev) -{ - return -1; -} -#endif diff --git a/tstamping.h b/tstamping.h index 41df9aa..ccc642e 100644 --- a/tstamping.h +++ b/tstamping.h @@ -1,6 +1,15 @@ #ifndef TSTAMPING_H #define TSTAMPING_H +#include "config.h" + +#ifdef HAVE_HARDWARE_TIMESTAMPING extern int set_sockopt_hwtimestamp(int sock, const char *dev); +#else +static inline int set_sockopt_hwtimestamp(int sock, const char *dev) +{ + return -1; +} +#endif #endif /* TSTAMPING_H */ |