tcpdump mailing list archives

[RFC PATCH 2/2] tcpdump: hw timestamp support


From: "Mcmillan, Scott A" <scott.a.mcmillan () intel com>
Date: Mon, 24 May 2010 07:26:53 -0700

[My apologies if this double posts.  The mail server didn't care for the first submission.]

This patch adds the capability to select the packet timestamp source via the -j command line option.

Signed-off-by: Scott McMillan <scott.a.mcmillan () intel com>

--- a/tcpdump-4.1.1/interface.h 2010-03-11 19:56:44.000000000 -0600
+++ b/tcpdump-4.1.1/interface.h 2010-05-18 14:10:32.000000000 -0500
@@ -356,6 +356,7 @@
 #define bflag gndo->ndo_bflag 
 #define eflag gndo->ndo_eflag 
 #define fflag gndo->ndo_fflag 
+#define jflag gndo->ndo_jflag
 #define Kflag gndo->ndo_Kflag 
 #define nflag gndo->ndo_nflag 
 #define Nflag gndo->ndo_Nflag 
--- a/tcpdump-4.1.1/tcpdump.c   2010-03-11 19:56:44.000000000 -0600
+++ b/tcpdump-4.1.1/tcpdump.c   2010-05-18 14:12:31.000000000 -0500
@@ -74,6 +74,9 @@
 #include <errno.h>
 #endif /* WIN32 */
 
+#ifdef HAVE_LINUX_NET_TSTAMP_H
+#include <linux/net_tstamp.h>
+#endif /* HAVE_LINUX_NET_TSTAMP_H */
 
 #include "netdissect.h"
 #include "interface.h"
@@ -600,7 +603,7 @@
 
        opterr = 0;
        while (
-           (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:i:" I_FLAG "KlLm:M:nNOpqr:Rs:StT:u" U_FLAG 
"vw:W:xXy:Yz:Z:")) != -1)
+           (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:i:" I_FLAG "j:KlLm:M:nNOpqr:Rs:StT:u" U_FLAG 
"vw:W:xXy:Yz:Z:")) != -1)
                switch (op) {
 
                case 'a':
@@ -740,6 +743,17 @@
                        break;
 #endif /* HAVE_PCAP_CREATE */
 
+               case 'j':
+#ifdef HAVE_LINUX_NET_TSTAMP_H
+                       if (strcasecmp(optarg, "raw") == 0)
+                               jflag = SOF_TIMESTAMPING_RAW_HARDWARE;
+                       else if (strcasecmp(optarg, "nic") == 0)
+                               jflag = SOF_TIMESTAMPING_SYS_HARDWARE;
+                       else
+                               error("unknown packet time source `%s'", optarg);
+#endif /* HAVE_LINUX_NET_TSTAMP_H */
+                       break;
+
                case 'l':
 #ifdef WIN32
                        /*
@@ -1063,6 +1077,12 @@
                                error("%s: pcap_set_buffer_size failed: %s",
                                    device, pcap_statustostr(status));
                }
+                if (jflag != 0) {
+                       status = pcap_set_timesource(pd, jflag);
+                       if (status != 0)
+                               warning("%s: pcap_set_timesource failed: %s",
+                                   device, pcap_statustostr(status));
+               }
                status = pcap_activate(pd);
                if (status < 0) {
                        /*
--- a/tcpdump-4.1.1/configure.in        2010-04-05 20:18:35.000000000 -0500
+++ b/tcpdump-4.1.1/configure.in        2010-05-18 14:10:32.000000000 -0500
@@ -1076,6 +1076,16 @@
        fi
 fi
 
+dnl check for hardware timestamp support
+case "$host_os" in
+linux*)
+       AC_CHECK_HEADERS([linux/net_tstamp.h])
+       ;;
+*)
+       AC_MSG_NOTICE(no hardware timestamp support)
+       ;;
+esac
+
 dnl
 dnl set additional include path if necessary
 if test "$missing_includes" = "yes"; then
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.


Current thread: