The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] usbip: make remote list honor parsable output
@ 2026-08-10 23:13 Jason
  2026-08-11  2:20 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Jason @ 2026-08-10 23:13 UTC (permalink / raw)
  To: Valentina Manea, Shuah Khan; +Cc: Hongren Zheng, linux-usb, linux-kernel

The -p option only affects local devices and gadgets. Remote lists still
print their human-readable headings and details, so scripts cannot parse
them using the documented option.

Pass the parsable flag through the remote listing path. Emit the same busid
and usbid record used for local devices while continuing to consume every
interface record from the server.

Fixes: e9837bbb3e69 ("staging: usbip: userspace tools v1.0.0")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219502
Assisted-by: Codex:gpt-5
Signed-off-by: Jason Colapietro <jasoncola1@gmail.com>
---
 tools/usb/usbip/src/usbip_list.c | 33 ++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/tools/usb/usbip/src/usbip_list.c b/tools/usb/usbip/src/usbip_list.c
index 3d810bcca02..b9d60b87e47 100644
--- a/tools/usb/usbip/src/usbip_list.c
+++ b/tools/usb/usbip/src/usbip_list.c
@@ -41,7 +41,7 @@ void usbip_list_usage(void)
        printf("usage: %s", usbip_list_usage_string);
 }

-static int get_exported_devices(char *host, int sockfd)
+static int get_exported_devices(char *host, int sockfd, bool parsable)
 {
        char product_name[100];
        char class_name[100];
@@ -80,9 +80,11 @@ static int get_exported_devices(char *host, int sockfd)
                return 0;
        }

-       printf("Exportable USB devices\n");
-       printf("======================\n");
-       printf(" - %s\n", host);
+       if (!parsable) {
+               printf("Exportable USB devices\n");
+               printf("======================\n");
+               printf(" - %s\n", host);
+       }

        for (i = 0; i < reply.ndev; i++) {
                memset(&udev, 0, sizeof(udev));
@@ -98,9 +100,14 @@ static int get_exported_devices(char *host, int sockfd)
                usbip_names_get_class(class_name, sizeof(class_name),
                                      udev.bDeviceClass, udev.bDeviceSubClass,
                                      udev.bDeviceProtocol);
-               printf("%11s: %s\n", udev.busid, product_name);
-               printf("%11s: %s\n", "", udev.path);
-               printf("%11s: %s\n", "", class_name);
+               if (parsable) {
+                       printf("busid=%s#usbid=%04x:%04x#\n", udev.busid,
+                              udev.idVendor, udev.idProduct);
+               } else {
+                       printf("%11s: %s\n", udev.busid, product_name);
+                       printf("%11s: %s\n", "", udev.path);
+                       printf("%11s: %s\n", "", class_name);
+               }

                for (j = 0; j < udev.bNumInterfaces; j++) {
                        rc = usbip_net_recv(sockfd, &uintf, sizeof(uintf));
@@ -116,16 +123,18 @@ static int get_exported_devices(char *host, int sockfd)
                                        uintf.bInterfaceClass,
                                        uintf.bInterfaceSubClass,
                                        uintf.bInterfaceProtocol);
-                       printf("%11s: %2d - %s\n", "", j, class_name);
+                       if (!parsable)
+                               printf("%11s: %2d - %s\n", "", j, class_name);
                }

-               printf("\n");
+               if (!parsable)
+                       printf("\n");
        }

        return 0;
 }

-static int list_exported_devices(char *host)
+static int list_exported_devices(char *host, bool parsable)
 {
        int rc;
        int sockfd;
@@ -138,7 +147,7 @@ static int list_exported_devices(char *host)
        }
        dbg("connected to %s:%s", host, usbip_port_string);

-       rc = get_exported_devices(host, sockfd);
+       rc = get_exported_devices(host, sockfd, parsable);
        if (rc < 0) {
                err("failed to get device list from %s", host);
                return -1;
@@ -351,7 +360,7 @@ int usbip_list(int argc, char *argv[])
                        parsable = true;
                        break;
                case 'r':
-                       ret = list_exported_devices(optarg);
+                       ret = list_exported_devices(optarg, parsable);
                        goto out;
                case 'l':
                        ret = list_devices(parsable);
--
2.50.1 (Apple Git-155)

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-08-11  2:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-10 23:13 [PATCH] usbip: make remote list honor parsable output Jason
2026-08-11  2:20 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox