NetBSD Problem Report #55273
From www@netbsd.org Mon May 18 18:03:34 2020
Return-Path: <www@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id C848D1A9217
for <gnats-bugs@gnats.NetBSD.org>; Mon, 18 May 2020 18:03:34 +0000 (UTC)
Message-Id: <20200518180334.0887A1A921E@mollari.NetBSD.org>
Date: Mon, 18 May 2020 18:03:34 +0000 (UTC)
From: rspmn@arcor.de
Reply-To: rspmn@arcor.de
To: gnats-bugs@NetBSD.org
Subject: urndis(4) error "could not find data bulk in/out" without CDC union descriptor
X-Send-Pr-Version: www-1.0
>Number: 55273
>Category: kern
>Synopsis: urndis(4) error "could not find data bulk in/out" without CDC union descriptor
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: skrll
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon May 18 18:05:00 +0000 2020
>Last-Modified: Fri Sep 06 08:20:03 +0000 2024
>Originator: Reinhard Speyerer
>Release: NetBSD 9.0
>Organization:
>Environment:
NetBSD netbsd 9.0 NetBSD 9.0 (GENERIC) #0: Fri Feb 14 00:06:28 UTC 2020 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/i386/compile/GENERIC i386
>Description:
urndis(4) returns
"autoconfiguration error: urndis0: could not find data bulk in/out"
when the corresponing CDC union descriptor is missing which seems
to be quite common for many current devices.
Obtain the corresponding information from the interface association
as it is already done in the umb(4) driver instead of adding each new
device without a CDC union descriptor to the urndis_devs table in the driver.
>How-To-Repeat:
Connect a device with a RNDIS interface which does not have a CDC union
descriptor (e.g. Alcatel Onetouch L850V) to a USB port and check dmesg(1)
output:
[ 119.859971] urndis0 at uhub4 port 6 configuration 1 interface 0
[ 119.859971] urndis0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 119.859971] autoconfiguration error: urndis0: could not find data bulk in
[ 119.859971] autoconfiguration error: urndis0: could not find data bulk out
[ 119.859971] umass0 at uhub4 port 6 configuration 1 interface 2
[ 119.859971] umass0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 119.859971] umass0: using SCSI over Bulk-Only
[ 119.869972] scsibus0 at umass0: 2 targets, 1 lun per target
[ 119.869972] sd0 at scsibus0 target 0 lun 0: <ONETOUCH, ESTORIL, 2.31> disk removable
[ 119.869972] sd0: drive offline
>Fix:
Apply this patch
--- if_urndis.c.orig 2019-09-13 08:51:58.000000000 +0200
+++ if_urndis.c 2020-05-18 08:09:06.000000000 +0200
@@ -923,2 +923,3 @@
const usb_cdc_union_descriptor_t *ud;
+ const usb_interface_assoc_descriptor_t *ad;
const usb_cdc_header_descriptor_t *desc;
@@ -961,2 +962,9 @@
+ if (desc->bDescriptorType == UDESC_INTERFACE_ASSOC) {
+ ad = (const usb_interface_assoc_descriptor_t *)desc;
+ if (ad->bFirstInterface == if_ctl &&
+ ad->bInterfaceCount > 1)
+ if_data = if_ctl + 1;
+ continue;
+ }
if (desc->bDescriptorType != UDESC_CS_INTERFACE) {
to the NetBSD 9.0 sources and rebuild the kernel. After reboot and
switching to the USB composition with the RNDIS interface:
[ 88.189468] urndis0 at uhub4 port 6 configuration 1 interface 0
[ 88.189468] urndis0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 88.209470] urndis0: Ethernet address a6:27:cc:ab:d9:ae
[ 88.209470] umass0 at uhub4 port 6 configuration 1 interface 2
[ 88.209470] umass0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 88.209470] umass0: using SCSI over Bulk-Only
[ 88.209470] scsibus0 at umass0: 2 targets, 1 lun per target
[ 88.209470] sd0 at scsibus0 target 0 lun 0: <ONETOUCH, ESTORIL, 2.31> disk removable
[ 88.209470] sd0: drive offline
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: kern-bug-people->skrll
Responsible-Changed-By: skrll@NetBSD.org
Responsible-Changed-When: Mon, 18 May 2020 19:22:16 +0000
Responsible-Changed-Why:
take
From: Reinhard Speyerer <rspmn@arcor.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: kern/55273
Date: Tue, 29 Aug 2023 22:54:45 +0200
Here is a if_urndis.c 1.48 patch which avoids potential regressions by
only using the data interface from the Interface Association Descriptor
if no CDC Union Descriptor is found:
--- if_urndis.c.orig 2023-07-30 19:45:17.000000000 +0200
+++ if_urndis.c 2023-08-29 22:12:10.000000000 +0200
@@ -903,4 +903,5 @@
const usb_cdc_header_descriptor_t *desc;
+ const usb_interface_assoc_descriptor_t *ad;
usbd_desc_iter_t iter;
- int if_ctl, if_data;
+ int if_ctl, if_data, if_data_ia;
int i, j, altcnt;
@@ -936,6 +937,19 @@
if_data = -1;
+ if_data_ia = -1;
+ /*
+ * Use a matching Interface Association Descriptor
+ * as a fallback if no CDC Union Descriptor is found.
+ */
usb_desc_iter_init(un->un_udev, &iter);
while ((desc = (const void *)usb_desc_iter_next(&iter)) != NULL) {
-
+ if (desc->bDescriptorType == UDESC_INTERFACE_ASSOC) {
+ if (desc->bLength < sizeof(*ad))
+ continue;
+ ad = (const usb_interface_assoc_descriptor_t *)desc;
+ if (ad->bFirstInterface == if_ctl &&
+ ad->bInterfaceCount > 1)
+ if_data_ia = if_ctl + 1;
+ continue;
+ }
if (desc->bDescriptorType != UDESC_CS_INTERFACE) {
@@ -952,2 +966,4 @@
}
+ if (if_data == -1 && if_data_ia != -1)
+ if_data = if_data_ia;
netbsd# eject cd1
netbsd# dmesg | tail -14
[ 5627.204988] sd0: detached
[ 5627.204988] cd1: detached
[ 5627.204988] scsibus0: detached
[ 5627.204988] umass0: detached
[ 5627.204988] umass0: at uhub3 port 2 (addr 2) disconnected
[ 5628.885014] urndis0 at uhub3 port 2 configuration 1 interface 0
[ 5628.885014] urndis0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 5628.895015] urndis0: Ethernet address 42:2e:27:5e:7f:30
[ 5628.895015] umass0 at uhub3 port 2 configuration 1 interface 2
[ 5628.895015] umass0: Alcatel (0x1bbb) MobileBroadBand (0x195), rev 2.01/2.28, addr 2
[ 5628.895015] umass0: using SCSI over Bulk-Only
[ 5628.895015] scsibus0 at umass0: 2 targets, 1 lun per target
[ 5628.905017] sd0 at scsibus0 target 0 lun 0: <ONETOUCH, ESTORIL, 2.31> disk removable
[ 5628.905017] sd0: drive offline
netbsd# ifconfig urndis0 192.168.1.2 up
netbsd# ping -c 3 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=4.629637 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.956267 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.951238 ms
----192.168.1.1 PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.951238/2.179047/4.629637/2.122274 ms
Regards,
Reinhard
From: Rin Okuyama <rokuyama.rk@gmail.com>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/55273: urndis(4) error "could not find data bulk in/out"
without CDC union descriptor
Date: Fri, 6 Sep 2024 17:18:02 +0900
-------- Forwarded Message --------
Subject: CVS commit: src/sys/dev/usb
Date: Sun, 1 Oct 2023 06:55:27 +0000
From: Nick Hudson <skrll@netbsd.org>
Reply-To: source-changes-d@NetBSD.org
To: source-changes-full@NetBSD.org
Module Name: src
Committed By: skrll
Date: Sun Oct 1 06:55:27 UTC 2023
Modified Files:
src/sys/dev/usb: if_urndis.c
Log Message:
Apply the new diff from
kern/55273 urndis(4) error "could not find data bulk in/out" without CDC
union descriptor
Fallback to the interface association descriptor if no CDC Union
Descriptor is
found.
To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/dev/usb/if_urndis.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Rin Okuyama <rokuyama.rk@gmail.com>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/55273: urndis(4) error "could not find data bulk in/out"
without CDC union descriptor
Date: Fri, 6 Sep 2024 17:18:51 +0900
-------- Forwarded Message --------
Subject: CVS commit: [netbsd-10] src/sys/dev/usb
Date: Sat, 14 Oct 2023 07:05:39 +0000
From: Martin Husemann <martin@netbsd.org>
Reply-To: source-changes-d@NetBSD.org
To: source-changes-full@NetBSD.org
Module Name: src
Committed By: martin
Date: Sat Oct 14 07:05:39 UTC 2023
Modified Files:
src/sys/dev/usb [netbsd-10]: if_urndis.c
Log Message:
Pull up following revision(s) (requested by abs in ticket #416):
sys/dev/usb/if_urndis.c: revision 1.49
Apply the new diff from
kern/55273 urndis(4) error "could not find data bulk in/out" without
CDC union descriptor
Fallback to the interface association descriptor if no CDC Union
Descriptor is found.
To generate a diff of this commit:
cvs rdiff -u -r1.47.4.1 -r1.47.4.2 src/sys/dev/usb/if_urndis.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2024
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.