From nobody Tue Sep 29 07:44:25 2026 Received: from mail-yx1-f47.google.com (mail-yx1-f47.google.com [74.125.224.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2134B3B14CE for ; Mon, 10 Aug 2026 23:13:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=74.125.224.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403637; cv=pass; b=CF8H5dFctj7YCompdTxMtDr3ob3L5k8w2NRebqzOZ4TcLAV82Ghptkt85oLf7W2sBfd9rdZiC+lsx9qQK5ZVB9jplxw0UV/8xUtPQQoh1iIFs0dFnwcrBF3nQOeCnl0lAkyetEJaM5byTtQLAQlHzkvW83EVvsSY9QwDu09iqHQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786403637; c=relaxed/simple; bh=s3AmpGmK1zhxWdtx4TDtq14i50GnbDCggwxCVhys9nY=; h=MIME-Version:From:Date:Message-ID:Subject:To:Cc:Content-Type; b=SJCdVm47axXAB3tPadXBWaY+wTUsQ+hxeVGuepSOvO1ighyUi2wP9MKySDgXqKZUvK8+rlrCvU18GyjBX+lqbk+jroXUF/ORYx1fIWQ/8J8v0xjjsnu0UbBOntsMUc+xfWPSsCE+lveYiZy+WeVQqZ0yqBWVCw+zq7PELAQFyhQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XYweyj9K; arc=pass smtp.client-ip=74.125.224.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XYweyj9K" Received: by mail-yx1-f47.google.com with SMTP id 956f58d0204a3-66899fe9077so3723573d50.1 for ; Mon, 10 Aug 2026 16:13:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1786403635; cv=none; d=google.com; s=arc-20260327; b=e8K6tnuqLZNv70ypljLbnDeDlUR5idSR33YpBgR7hIRwD7xpYd8hB0WoFaZeI3qhAJ vr56jcyZ8oWb1uChE+QcD9t5ttfylYBoIjJ+ayTjuDQRpnUZDHT2VGCXtiKnrN8Ui9Bz BuqZFrhyKJYcgbw1l9zzgcZluldQoFpd0mTH/KkGNz+orE7xZ97gSsBnzfIjq4J9jwTR a/jH8Et7/WiUJrzbp8H72EkggchKMGDLTSQ8yuNGZzCivuUQnIG1sn0JM64jf8/RF7qj 4YB9qnzTTBttRUdJPfnKiOKP+mWl2HxVzZz6ZyrfUAPVp5KMYAmmpubFEqtx2XWeD4Bh vEZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=a5zzbX5UUKb28qJzV8Jk8ol6WUaHCfavAB9FhEI6Yr8=; fh=gIAPP4JndoJ1fqjTx9rZk3CSsHcntFUeWKuo6EReN4M=; b=LiZjgsp49IsuvWB2HheWjxncYDbtzfaX6eCHKgy/KY7Qt+v1raK6oKulbUUkcKK8Q1 fGVJ5bcnaVVHWwyAWREv4Yn7i1Mqd6LTzK0trzJzMwFruzA4J7EOB9671G2+2a+lUV3D FkZlJiPsHX5ud0GjX/jTPFU0VPhV5fqOcdlfbL/Omc0BT3J7QCWjBsdaTVI1GkzGonLw gZpjnGruysFPjSrDdur9hHjIHZAmCSUpeXbp3Xz2WMJJcb3772YjQzoLXW2ge1Ut1lJY m4MPM0wluQtcsKDwU9dH5qbtRXRW3MW+oT6wVBYjKwOLa4nhgVw05Vni5ZMaGa7dotAB 5T+Q==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786403635; x=1787008435; darn=vger.kernel.org; h=content-type:cc:to:subject:message-id:date:from:mime-version:from :to:cc:subject:date:message-id:reply-to:content-type; bh=a5zzbX5UUKb28qJzV8Jk8ol6WUaHCfavAB9FhEI6Yr8=; b=XYweyj9KgvoPT7d2L3vdBkklPX/e3Yo/tQWQpJb0rlN//p/xzCi7Ui/wSpy0AdLvre SYesmlMTGW9XuWn9Ksvk56gncuBrfuaDmcIIsyoZrdUNaENHBUjUq6AgAwXDYcKDdqzz 4nPCE1opLMcuYQasDYAJUIeXYfI2f7T8U7beTt7TAAnBcu9cBmfmLgWSJRmKZsAEO56y bNTyjZ4qDVkcAo8bJNe2DWyZdDaC5Nvxv1fLtxU5tgcqP99Vbj8aMu7hdNZESgXSxZLF BbgeiLQJp+lFGtqda6LeY1+XpuxGfQnkWzfw1vK+qSABM2FYHFh4baAbXeglxX8yDink DFcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786403635; x=1787008435; h=content-type:cc:to:subject:message-id:date:from:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=a5zzbX5UUKb28qJzV8Jk8ol6WUaHCfavAB9FhEI6Yr8=; b=Y4JpO4Bqi4gPV7c6wLgKWrBTvoTtcROV2zfIkygGxfsclVrHdZRQWo7oHHUDYMOfYB R8J41LtTY54E1rzUloEJj/xtpDPsiXl+YITYVNla59pQeK+rBw+UmRUM0+9F3upp1/G5 cBYGn/u4aIu/2w3qgG+UPkI6YjM6l3gNok3pT7zKTkADVtFSmpfjstFYh3KHCivYpvzi jcM6pUgNdFzaMFnu/bYjmi8TAkuqtzCWsWRHvk5SaOnnEi9rAhfatNLprk34hbSBNwlp +BlxS6YTagX30UW+Zts1KhtlYURgV8UbClnkSwnv/7fn3NFk0lSyqtLaM81fhyJMnzGS 7LqQ== X-Forwarded-Encrypted: i=1; AHgh+RoOAlfUyJ5Y/hkOsbFfEJLPOKpcB6uRpAqUQzDj0Klo+DjFI0B/afojMbLzKJOFdb3VunsOUvZv10lRM5k=@vger.kernel.org X-Gm-Message-State: AOJu0YwoA2XXQgaohX97SYwg6we5lbMAoRpTepmdTw9qNazYrFe1kZ03 BTOMNc8NRqLYNoHsQ2izI2r6i/bu2WYAlih0sT6We8xmDyQmde1uo+zaprZjhPzgkUV2UaYHmm8 V8y83HiNj4xSky9R1kvjMre1vT7q2sp8= X-Gm-Gg: AR+sD11XtMrl4ERIJuKF9KEI2NTrw/y5x5B+jyrJ8EKudc226WiZw0vz3gBgvYTXi8n HWvzN6uviAm79igMbHCJdVNdPGuvXxq1QRql0eaQOocmQ3CxiESKqq7glhc69yLigsowDoHN4Ax fQwxUs17rYIlpr8t0SXOP1jQDsvP7sH8UgIf589s2yiq/HyaPW8wunbp1f++yfhK1syZzLBBE7K ixLJ4tgGn79sywZbSfWPMbOavwZRtfTOnChFY6Sde0qRKjvzDE2+tL96WIfzAkzKLxbHKbfRkoe Upilq2Is/ZvdBr1L42YBPeP5WMNaV19FPpo5kvmkIaVs5PnIYs9C72B4gjBiPZrFJUKZWnz8zxV ARhiQoGbbfyUhjI0F7n5/fBXZUomWu35rqAhnYC8GtRKU4EuOO7P2vmoommU6mw6pcALgyZvKx0 f7BUxq1opJNQ== X-Received: by 2002:a05:690e:120e:b0:667:bb60:78a5 with SMTP id 956f58d0204a3-66ad72af455mr13186309d50.52.1786403634990; Mon, 10 Aug 2026 16:13:54 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Jason Date: Mon, 10 Aug 2026 19:13:44 -0400 X-Gm-Features: AUfX_myBSolHw0-70-Ggzdm4y00Phsn7b_-SOxtr_Q-m3xkp7IFPYg42q6z4CGI Message-ID: Subject: [PATCH] usbip: make remote list honor parsable output To: Valentina Manea , Shuah Khan Cc: Hongren Zheng , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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=3D219502 Assisted-by: Codex:gpt-5 Signed-off-by: Jason Colapietro --- 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_l= ist.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("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D\n"); - printf(" - %s\n", host); + if (!parsable) { + printf("Exportable USB devices\n"); + printf("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D\n"); + printf(" - %s\n", host); + } for (i =3D 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.bDeviceSubCla= ss, 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=3D%s#usbid=3D%04x:%04x#\n", udev.busi= d, + 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 =3D 0; j < udev.bNumInterfaces; j++) { rc =3D usbip_net_recv(sockfd, &uintf, sizeof(uintf)= ); @@ -116,16 +123,18 @@ static int get_exported_devices(char *host, int sockf= d) uintf.bInterfaceClass, uintf.bInterfaceSubClass, uintf.bInterfaceProtocol); - printf("%11s: %2d - %s\n", "", j, class_name); + if (!parsable) + printf("%11s: %2d - %s\n", "", j, class_nam= e); } - 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 =3D get_exported_devices(host, sockfd); + rc =3D 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 =3D true; break; case 'r': - ret =3D list_exported_devices(optarg); + ret =3D list_exported_devices(optarg, parsable); goto out; case 'l': ret =3D list_devices(parsable); -- 2.50.1 (Apple Git-155)