From nobody Tue Sep 29 07:48:34 2026 Received: from mail-yx1-f53.google.com (mail-yx1-f53.google.com [74.125.224.53]) (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 861DC3438AF for ; Tue, 11 Aug 2026 03:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=74.125.224.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786419430; cv=pass; b=O1csiXfr96DcBWaoEb+NCWfI9DspJCJvOJmtkbUbBazPFQfr+CxzdDRVKSlUa1bO0K2lnKC/T/g8AqHCnHVWPAhrc8q1ASdNJhOe5XjZmvTjFGog/n0yl1ab8Kct01qFB7Zy+lRE3EBW+gxWIR/ZYUB25IzW7vzLW2Fgw+av37A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786419430; c=relaxed/simple; bh=h7ERLeSsm63NpAkva3LUfyOhZMDa714TtANVGouyQCA=; h=MIME-Version:From:Date:Message-ID:Subject:To:Cc:Content-Type; b=FzvG/NpU56FUHaEb3nVvNp221vvIzmFd1Z+vPX7LoEA3Ptp3GiS8kUMLc4uLWTcn4WEYq9nWOAWIp3slxRoF6QK0FbXbX3dQqB1TZ8e/pnnHxJIl/gdrMAXKnuVHBTiDVStYVLImGJjNb0RybhXHdHr2+6nE60EBzB9DM6270K0= 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=tIFjvkXS; arc=pass smtp.client-ip=74.125.224.53 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="tIFjvkXS" Received: by mail-yx1-f53.google.com with SMTP id 956f58d0204a3-6688dfaed31so4059564d50.3 for ; Mon, 10 Aug 2026 20:37:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1786419427; cv=none; d=google.com; s=arc-20260327; b=HHM+UttitktORLqzlE1NjlR5hCBqPhxQcPAshwaFSJDBQQqIyOQXqTmqPKRooR+X4e mPYeB7CQqbLeCkdryZbazMvVygZL2GyFgcaDodMhBjjVjYJeVGRiOraq9FKwgnPm946y 7Rzq1kc0V6MGdr4WaQP82oEIsFB+5OVCrIGcS3Ur0CYIc3sVuo9TbX9pHlhp1iYi7UTr /KZsD0i2SpQaRrfu8OlTDo+gpJncbK6U/X/7EgudC3MRFxfERIfqNmz6HEA4966YDW0a gx87hkWLfzxrKpkowE9HKa9iTGvcdljDC94Ev6QaCYzjTR1reuDzX0XLC/0nzSad4A0V L11Q== 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=ZnL4Vz4XyDBv6/wX4o2LTm4p1gW6ZuiqBp9YAgRdnNQ=; fh=NhGe7pcZv26wZ1jIhR6r5dZBBrMgblYwyBLufom4yY4=; b=kDWTS6RRVEYQK3vdmjHahk7aYG3Hhirrljigpsjrj9NDO01CXRm8D1U47vhQtsvAZZ b0cY6lYAMu8f9rmu9LZ2cs+CUfOKAksdOfK9UZ2u6eubvVwdpw83Z14Vq9UyMsu2lvaO +TO1UoZAgM+L0dJ7Z5hZRfQS+mrVlngLlFEl2Yn0S+kqPAi13C/bCJDe7gyuJzdt7ZqJ gLQo2gkEobxjhXg0dhp+wR+9k94/mQjPHe8xxJKP7qlbxQkNAO7soBKCw+PpAwVXOpnc VTgJBl+zjgukcb5OwggM+8oiBmnZBlaLnkUwiX9NsEDl+oPK2t8Fs4SqvIsKz2fIaby4 3CPQ==; 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=1786419427; x=1787024227; 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=ZnL4Vz4XyDBv6/wX4o2LTm4p1gW6ZuiqBp9YAgRdnNQ=; b=tIFjvkXS75TMPj0qvk2DFdYskEEgyh+KWm6wI+cafhqgvdw8wD2bEwJtqWw0xtiOQR tVsD22pcMxgj+GREMy745TLPKcQ3T53OP0P654XLQHHTNoiQUmA6ZAFmEofWZiYMIwga Fmpa7hVZvo2XKnrbsVoP0iwqhwocxQokhFN27K96ZOC0Ew17hXSWnK/0uEGKfpol6KVO O8WuFdHGbGx79MVAXVVDNJWorzag4gO1nvD30FpFB9IvCdJj/vNspou978ulFK4ssS59 d6+McnYFfCAAYLpWYqFKlFq957huZN5qQchCEPfUZaNA6UmFEvEcGM4r9RdH9lru6D9A EC+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786419427; x=1787024227; 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=ZnL4Vz4XyDBv6/wX4o2LTm4p1gW6ZuiqBp9YAgRdnNQ=; b=nIe2pY5YSABQZYzGD/24iOnuLpbcOe2gTVq/OVX5XjYUEihcTHNkN5WvYgHwwAGBkM GvHPBY+sY3r+eIRGIyJcajZa6C0/2Wso/aU7wh/oi4Ltq+W6+GLW6bwMnnbEqF1nXBF2 ea5oCMb1rzAM935H67xjC63gQyDUiNpVUiDirxOkby98AIaD16cFQetXRUwCMQMlaXZV ngfXXt2QWDQHqPLVmu0hfguPYvwb/4JhBPnxszIX4GSdqvvAmP8XxizDyAA8mncGOzjY KIn9tfnC4Vu2hY25A1ibPQ6bTCwYJtVF2zuqYiLIt4iumptVVAdXNvuGREeZ5ZBAN/et QNrQ== X-Forwarded-Encrypted: i=1; AHgh+Rr+R9kS07ayne+CP7IJ1YAWwBGOhQ5SL9Q35v40mNpA5ORzGkso8rEKMKp83r3SacsMjTkyDBswkR6JHg0=@vger.kernel.org X-Gm-Message-State: AOJu0YyxBSydSyOT89UVGFxgmqy7Qz2SMQWva/yZ6XEuGnnmML13Ct4j tcX9zF7qddBFuOobdXavqYqClD9gaxVB6hM2Yf6Z6HFQF9NsRSEKlt8MNfJYc/zF3uBziKHdOar uuiU2/chmdiBlU4HsZhIVOb0n48qNUZQ9ryLu X-Gm-Gg: AR+sD10mwNQPYKh8mKV30p29iJPEQBs1wMEFjvwZswy5w4wIXkzD1aw9Sx5N3s0DXtf yTF7MgU6m3drWsntVI7PBCq7nXE7rtYyY/BnFS5Qt6uvIwd2WR+UDJc1jlArk6ExlhlXpSfidSJ fiP6ai+ODMtCarDTk3mFc9SfswMIVWuFG1WYwngCJZuypbZE9s9R0IiLM4VQxbi1bdbF5k22vBj R+pVG5b/rCpiQiSzP8RyMKP5Rn1neqmIoqSx3rTiNSQNOP6EFnn3+2+dtxt4ULgYK20SmQNLoAK VbVs3vuHXy3hIm5GqOFN2qXpNJ0NoN8TAWXv/38aGaEX+6CmiVJ/M0jTZQsvSAo5Dta3yNbNgv/ TgmRg+qvr+dTEAQKlOdZj9he2F4bpqjS9zzpiHmQU+4VAkL3I2jNnjQzNeSsjuJT6HM3dCglF5D cBqIa1mzr92ofe X-Received: by 2002:a05:690e:4292:20b0:666:39a8:fb82 with SMTP id 956f58d0204a3-66b22d9f964mr102664d50.14.1786419427395; Mon, 10 Aug 2026 20:37:07 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Jason Colapietro Date: Mon, 10 Aug 2026 23:36:56 -0400 X-Gm-Features: AUfX_mzF21M26wbAtf2AnhCVFZnA26kG-PD1qMX1SfK5ylkY4TSVFQwLsLDopRk Message-ID: Subject: [PATCH v2] usbip: make remote list honor parsable output To: Valentina Manea , Shuah Khan Cc: Hongren Zheng , Greg KH , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stable@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 Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5 Signed-off-by: Jason Colapietro --- Changes in v2: - Make the email From header match Signed-off-by. - Add Cc: stable@vger.kernel.org. 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)