git: 87fb416ac882 - main - usbdump: add -t to omit timestamps

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Sun, 12 Jul 2026 19:50:36 UTC
The branch main has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=87fb416ac8828d07fdf23a2c0d35d88efafce2af

commit 87fb416ac8828d07fdf23a2c0d35d88efafce2af
Author:     Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2026-07-12 19:50:24 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2026-07-12 19:50:24 +0000

    usbdump: add -t to omit timestamps
    
    Matches tcpdump naming, but without getting more intense as you add more
    -t.  This slightly reduces the post-processing needed on usbdump output
    to diff two transactions.
    
    Reviewed by:    adrian
    Differential Revision:  https://reviews.freebsd.org/D58196
---
 usr.sbin/usbdump/usbdump.8 |  9 +++++++--
 usr.sbin/usbdump/usbdump.c | 35 ++++++++++++++++++++++-------------
 2 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/usr.sbin/usbdump/usbdump.8 b/usr.sbin/usbdump/usbdump.8
index 96be9f738e2d..3c50f54d081e 100644
--- a/usr.sbin/usbdump/usbdump.8
+++ b/usr.sbin/usbdump/usbdump.8
@@ -23,7 +23,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 14, 2021
+.Dd July 12, 2026
 .Dt USBDUMP 8
 .Os
 .Sh NAME
@@ -37,6 +37,7 @@
 .Op Fl i Ar ifname
 .Op Fl r Ar file
 .Op Fl s Ar snaplen
+.Op Fl t
 .Op Fl u
 .Op Fl v
 .Op Fl w Ar file
@@ -90,6 +91,8 @@ This option also works with the -f option.
 Snapshot
 .Ar snaplen
 bytes from each packet.
+.It Fl t
+Do not print packet timestamps.
 .It Fl u
 Unbuffered output.
 .It Fl v
@@ -140,7 +143,9 @@ is as follows:
 The meaning of the output format elements is as follows:
 .Bl -tag -width "<xfertype>"
 .It <time>
-A timestamp preceding all output lines.
+A timestamp preceding all output lines, unless the
+.Fl t
+option is used.
 The timestamp has the format "hh:mm:ss.frac" and is as accurate as
 the kernel's clock.
 .It <bus>
diff --git a/usr.sbin/usbdump/usbdump.c b/usr.sbin/usbdump/usbdump.c
index d7b084657162..36b70d3160bd 100644
--- a/usr.sbin/usbdump/usbdump.c
+++ b/usr.sbin/usbdump/usbdump.c
@@ -45,6 +45,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
@@ -108,6 +109,7 @@ struct header_32 {
 
 static int doexit;
 static int pkt_captured;
+static bool print_time = true;
 static int verbose;
 static int uf_minor;
 static char *i_arg;
@@ -459,13 +461,9 @@ hexdump(const uint8_t *region, uint32_t len)
 static void
 print_apacket(const struct header_32 *hdr, const uint8_t *ptr, int ptr_len)
 {
-	struct tm *tm;
 	struct usbpf_pkthdr up_temp;
 	struct usbpf_pkthdr *up;
-	struct timeval tv;
-	size_t len;
 	uint32_t x;
-	char buf[64];
 
 	ptr += USBPF_HDR_LEN;
 	ptr_len -= USBPF_HDR_LEN;
@@ -494,15 +492,22 @@ print_apacket(const struct header_32 *hdr, const uint8_t *ptr, int ptr_len)
 	if (!match_filter(up->up_address, up->up_endpoint))
 		return;
 
-	tv.tv_sec = hdr->ts_sec;
-	tv.tv_usec = hdr->ts_usec;
-	tm = localtime(&tv.tv_sec);
-
-	len = strftime(buf, sizeof(buf), "%H:%M:%S", tm);
-
 	if (verbose >= 0) {
-		printf("%.*s.%06ld usbus%d.%d %s-%s-EP=%08x,SPD=%s,NFR=%d,SLEN=%d,IVAL=%d%s%s\n",
-		    (int)len, buf, tv.tv_usec,
+		if (print_time) {
+			struct timeval tv;
+			char buf[64];
+			struct tm *tm;
+			size_t len;
+
+			tv.tv_sec = hdr->ts_sec;
+			tv.tv_usec = hdr->ts_usec;
+			tm = localtime(&tv.tv_sec);
+
+			len = strftime(buf, sizeof(buf), "%H:%M:%S", tm);
+			printf("%.*s.%06ld ", (int)len, buf, tv.tv_usec);
+		}
+
+		printf("usbus%d.%d %s-%s-EP=%08x,SPD=%s,NFR=%d,SLEN=%d,IVAL=%d%s%s\n",
 		    (int)up->up_busunit, (int)up->up_address,
 		    (up->up_type == USBPF_XFERTAP_SUBMIT) ? "SUBM" : "DONE",
 		    usb_xferstr(up->up_xfertype),
@@ -784,6 +789,7 @@ usage(void)
 	fprintf(stderr, FMT, "-f <unit[.endpoint]>", "Specify a device and endpoint filter");
 	fprintf(stderr, FMT, "-r <file>", "Read the raw packets from file");
 	fprintf(stderr, FMT, "-s <snaplen>", "Snapshot bytes from each packet");
+	fprintf(stderr, FMT, "-t", "Do not print packet timestamps");
 	fprintf(stderr, FMT, "-v", "Increase the verbose level");
 	fprintf(stderr, FMT, "-b <file>", "Save raw version of all recorded data to file");
 	fprintf(stderr, FMT, "-w <file>", "Write the raw packets to file");
@@ -811,7 +817,7 @@ main(int argc, char *argv[])
 	const char *optstring;
 	char *pp;
 
-	optstring = "b:d:hi:r:s:uvw:f:";
+	optstring = "b:d:hi:r:s:tuvw:f:";
 	while ((o = getopt(argc, argv, optstring)) != -1) {
 		switch (o) {
 		case 'b':
@@ -881,6 +887,9 @@ main(int argc, char *argv[])
 			if (snapshot == 0)
 				snapshot = -1;
 			break;
+		case 't':
+			print_time = false;
+			break;
 		case 'u':
 			setbuf(stdout, NULL);
 			setbuf(stderr, NULL);