git: c904e20cc903 - main - Implement own command line option for the frequently used -i usbusX -f Y syntax, -d ugenX.Y, similar to what usbconfig(8) does.
Hans Petter Selasky
hselasky at FreeBSD.org
Fri May 14 15:18:25 UTC 2021
The branch main has been updated by hselasky:
URL: https://cgit.FreeBSD.org/src/commit/?id=c904e20cc903d28c1090c531c907cdd6865455ff
commit c904e20cc903d28c1090c531c907cdd6865455ff
Author: Hans Petter Selasky <hselasky at FreeBSD.org>
AuthorDate: 2021-05-14 15:12:57 +0000
Commit: Hans Petter Selasky <hselasky at FreeBSD.org>
CommitDate: 2021-05-14 15:15:07 +0000
Implement own command line option for the frequently used -i usbusX -f Y syntax,
-d ugenX.Y, similar to what usbconfig(8) does.
MFC after: 1 week
Sponsored by: Mellanox Technologies // NVIDIA Networking
---
usr.sbin/usbdump/usbdump.8 | 30 ++++++++++++++++++++++++-
usr.sbin/usbdump/usbdump.c | 56 ++++++++++++++++++++++++++++++++++++++--------
2 files changed, 76 insertions(+), 10 deletions(-)
diff --git a/usr.sbin/usbdump/usbdump.8 b/usr.sbin/usbdump/usbdump.8
index 475e832cd03b..6b5ad1920e94 100644
--- a/usr.sbin/usbdump/usbdump.8
+++ b/usr.sbin/usbdump/usbdump.8
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 24, 2012
+.Dd May 14, 2021
.Dt USBDUMP 8
.Os
.Sh NAME
@@ -33,6 +33,9 @@
.Nd "dump traffic on USB host controller"
.Sh SYNOPSIS
.Nm
+.Op Fl d Ar [ugen]B
+.Op Fl d Ar [ugen]B.D
+.Op Fl d Ar [ugen]B.D.E
.Op Fl i Ar ifname
.Op Fl r Ar file
.Op Fl s Ar snaplen
@@ -48,6 +51,31 @@ utility provides a way to dump USB packets on host controllers.
.Pp
The following options are accepted:
.Bl -tag -width ".Fl f Ar file"
+.It Fl d Ar [ugen]bus
+Shortcut for
+.Fl i
+option.
+The argument may be prefixed by "ugen".
+The option may be specified multiple times, but the bus specified must
+be the same.
+.It Fl d Ar [ugen]bus.device
+Shortcut for
+.Fl i
+and
+.Fl f
+options.
+The argument may be prefixed by "ugen".
+The option may be specified multiple times, but the bus specified must
+be the same.
+.It Fl d Ar [ugen]bus.device.endpoint
+Shortcut for
+.Fl i
+and
+.Fl f
+options.
+The argument may be prefixed by "ugen".
+The option may be specified multiple times, but the bus specified must
+be the same.
.It Fl b Ar file
Store data part of the USB trace in binary format to the given
.Ar file .
diff --git a/usr.sbin/usbdump/usbdump.c b/usr.sbin/usbdump/usbdump.c
index a38d08a252af..00d3b8e8913b 100644
--- a/usr.sbin/usbdump/usbdump.c
+++ b/usr.sbin/usbdump/usbdump.c
@@ -108,14 +108,14 @@ struct header_32 {
uint8_t align;
} __packed;
-static int doexit = 0;
-static int pkt_captured = 0;
-static int verbose = 0;
+static int doexit;
+static int pkt_captured;
+static int verbose;
static int uf_minor;
-static const char *i_arg = "usbus0";
-static const char *r_arg = NULL;
-static const char *w_arg = NULL;
-static const char *b_arg = NULL;
+static char *i_arg;
+static char *r_arg;
+static char *w_arg;
+static char *b_arg;
static struct usbcap uc;
static const char *errstr_table[USB_ERR_MAX] = {
[USB_ERR_NORMAL_COMPLETION] = "0",
@@ -779,7 +779,10 @@ usage(void)
#define FMT " %-14s %s\n"
fprintf(stderr, "usage: usbdump [options]\n");
- fprintf(stderr, FMT, "-i <usbusX>", "Listen on USB bus interface");
+ fprintf(stderr, FMT, "-d [ugen]B", "Listen on bus, B");
+ fprintf(stderr, FMT, "-d [ugen]B.D", "Listen on bus, B and device, D");
+ fprintf(stderr, FMT, "-d [ugen]B.D.E", "Listen on bus, B, device, D, and endpoint E");
+ fprintf(stderr, FMT, "-i <usbusX>", "Listen on this bus interface");
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");
@@ -828,9 +831,41 @@ main(int argc, char *argv[])
const char *optstring;
char *pp;
- optstring = "b:hi:r:s:vw:f:";
+ optstring = "b:d:hi:r:s:vw:f:";
while ((o = getopt(argc, argv, optstring)) != -1) {
switch (o) {
+ case 'd':
+ pp = optarg;
+ if (pp[0] == 'u' && pp[1] == 'g' && pp[2] == 'e' && pp[3] == 'n')
+ pp += 4;
+ ifindex = strtol(pp, &pp, 10);
+ /* Must be same bus when using -d option. */
+ if (i_arg != NULL) {
+ if (atoi(i_arg + 5) != ifindex)
+ usage();
+ } else {
+ asprintf(&i_arg, "usbus%d", ifindex);
+ }
+ /* Parse unit and endpoint, if any. */
+ if (pp != NULL) {
+ if (*pp == '.') {
+ filt_unit = strtol(pp + 1, &pp, 10);
+ filt_ep = -1;
+ if (pp != NULL) {
+ if (*pp == '.') {
+ filt_ep = strtol(pp + 1, &pp, 10);
+ if (pp != NULL && *pp != 0)
+ usage();
+ } else if (*pp != 0) {
+ usage();
+ }
+ }
+ add_filter(filt_unit, filt_ep);
+ } else if (*pp != 0) {
+ usage();
+ }
+ }
+ break;
case 'i':
i_arg = optarg;
break;
@@ -879,6 +914,9 @@ main(int argc, char *argv[])
}
}
+ if (i_arg == NULL)
+ i_arg = "usbus0";
+
if (b_arg != NULL) {
p->bfd = open(b_arg, O_CREAT | O_TRUNC |
O_WRONLY, S_IRUSR | S_IWUSR);
More information about the dev-commits-src-main
mailing list