From c59245ddcc0541edca71769b3153bc13580a5bbb Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Mon, 13 May 2013 12:24:34 +0200 Subject: ring: break out timestamping since not directly related Break out the timestamping part of the ring.h file, since it's not directly related to the {t,r}x_ring. Also inlining doesn't make sense here. Signed-off-by: Daniel Borkmann --- netsniff-ng.c | 2 ++ netsniff-ng/Makefile | 1 + ring.h | 35 ---------------------------------- tstamping.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 tstamping.c diff --git a/netsniff-ng.c b/netsniff-ng.c index 2391d39..b4a239e 100644 --- a/netsniff-ng.c +++ b/netsniff-ng.c @@ -37,6 +37,8 @@ #include "dissector.h" #include "xmalloc.h" +extern int set_sockopt_hwtimestamp(int sock, const char *dev); + enum dump_mode { DUMP_INTERVAL_TIME, DUMP_INTERVAL_SIZE, diff --git a/netsniff-ng/Makefile b/netsniff-ng/Makefile index 46b885d..b50778f 100644 --- a/netsniff-ng/Makefile +++ b/netsniff-ng/Makefile @@ -45,6 +45,7 @@ netsniff-ng-objs = dissector.o \ ring_rx.o \ ring_tx.o \ tprintf.o \ + tstamping.o \ geoip.o \ mac80211.o \ netsniff-ng.o diff --git a/ring.h b/ring.h index e74661c..dea1b6c 100644 --- a/ring.h +++ b/ring.h @@ -131,39 +131,4 @@ static inline void set_sockopt_tpacket(int sock) panic("Cannot set tpacketv2!\n"); } -#ifdef __WITH_HARDWARE_TIMESTAMPING -# include - -static inline int set_sockopt_hwtimestamp(int sock, const char *dev) -{ - int timesource, ret; - struct hwtstamp_config hwconfig; - struct ifreq ifr; - - if (!strncmp("any", dev, strlen("any"))) - return -1; - - memset(&hwconfig, 0, sizeof(hwconfig)); - hwconfig.tx_type = HWTSTAMP_TX_OFF; - hwconfig.rx_filter = HWTSTAMP_FILTER_ALL; - - memset(&ifr, 0, sizeof(ifr)); - strlcpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); - ifr.ifr_data = &hwconfig; - - ret = ioctl(sock, SIOCSHWTSTAMP, &ifr); - if (ret < 0) - return -1; - - timesource = SOF_TIMESTAMPING_RAW_HARDWARE; - - return setsockopt(sock, SOL_PACKET, PACKET_TIMESTAMP, ×ource, - sizeof(timesource)); -} -#else -static inline int set_sockopt_hwtimestamp(int sock, const char *dev) -{ - return -1; -} -#endif #endif /* RING_H */ diff --git a/tstamping.c b/tstamping.c new file mode 100644 index 0000000..4de455d --- /dev/null +++ b/tstamping.c @@ -0,0 +1,53 @@ +/* + * netsniff-ng - the packet sniffing beast + * Copyright 2009, 2010 Daniel Borkmann. + * Subject to the GPL, version 2. + */ + +extern int set_sockopt_hwtimestamp(int sock, const char *dev); + +#ifdef __WITH_HARDWARE_TIMESTAMPING +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xutils.h" + +int set_sockopt_hwtimestamp(int sock, const char *dev) +{ + int timesource, ret; + struct hwtstamp_config hwconfig; + struct ifreq ifr; + + if (!strncmp("any", dev, strlen("any"))) + return -1; + + memset(&hwconfig, 0, sizeof(hwconfig)); + hwconfig.tx_type = HWTSTAMP_TX_OFF; + hwconfig.rx_filter = HWTSTAMP_FILTER_ALL; + + memset(&ifr, 0, sizeof(ifr)); + strlcpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); + ifr.ifr_data = &hwconfig; + + ret = ioctl(sock, SIOCSHWTSTAMP, &ifr); + if (ret < 0) + return -1; + + timesource = SOF_TIMESTAMPING_RAW_HARDWARE; + + return setsockopt(sock, SOL_PACKET, PACKET_TIMESTAMP, ×ource, + sizeof(timesource)); +} +#else +int set_sockopt_hwtimestamp(int sock, const char *dev) +{ + return -1; +} +#endif -- cgit v1.2.3-54-g00ecf