NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/55240: cdce(4) error "no data interface" when ECM USB IF are preceded by ACM USB IF



>Number:         55240
>Category:       kern
>Synopsis:       cdce(4) error "no data interface" when ECM USB IF are preceded by ACM USB IF
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 06 20:45:00 +0000 2020
>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@localhost:/usr/src/sys/arch/i386/compile/GENERIC i386
>Description:
cdce(4) returns "cdce0: autoconfiguration error: no data interface" when
the ECM USB interfaces of a device are preceded by ACM USB interfaces
instead of binding to the ECM USB interfaces as expected.

>How-To-Repeat:
Connect a wireless module where the ECM USB interfaces are preceded by
ACM USB interfaces (e.g. a Telit HE910) to a USB port and check dmesg(1)
output:

[  1806.975723] umodem0 at uhub5 port 2 configuration 1 interface 0
[  1806.975723] umodem0: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem0: data interface 1, has no CM over data, has break
[  1806.975723] umodem0: status change notification available
[  1806.975723] ucom4 at umodem0
[  1806.975723] umodem1 at uhub5 port 2 configuration 1 interface 2
[  1806.975723] umodem1: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem1: data interface 3, has no CM over data, has break
[  1806.975723] umodem1: status change notification available
[  1806.975723] ucom5 at umodem1
[  1806.975723] umodem2 at uhub5 port 2 configuration 1 interface 4
[  1806.975723] umodem2: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem2: data interface 5, has no CM over data, has break
[  1806.975723] umodem2: status change notification available
[  1806.975723] ucom6 at umodem2
[  1806.975723] umodem3 at uhub5 port 2 configuration 1 interface 6
[  1806.975723] umodem3: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem3: data interface 7, has no CM over data, has break
[  1806.975723] umodem3: status change notification available
[  1806.975723] ucom7 at umodem3
[  1806.975723] umodem4 at uhub5 port 2 configuration 1 interface 8
[  1806.975723] umodem4: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem4: data interface 9, has no CM over data, has break
[  1806.975723] umodem4: status change notification available
[  1806.975723] ucom8 at umodem4
[  1806.975723] umodem5 at uhub5 port 2 configuration 1 interface 10
[  1806.975723] umodem5: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[  1806.975723] umodem5: data interface 11, has no CM over data, has break
[  1806.975723] umodem5: status change notification available
[  1806.975723] ucom9 at umodem5
[  1806.975723] cdce0 at uhub5 port 2 configuration 1 interface 12
[  1806.975723] cdce0: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4
[  1806.975723] cdce0: autoconfiguration error: no data interface

>Fix:
Apply this patch

--- if_cdce.c.orig	2019-09-01 15:00:36.000000000 +0200
+++ if_cdce.c	2020-05-03 21:55:09.000000000 +0200
@@ -147,4 +147,5 @@
 	else {
-		ud = (const usb_cdc_union_descriptor_t *)usb_find_desc(un->un_udev,
-		    UDESC_CS_INTERFACE, UDESCSUB_CDC_UNION);
+		ud = (const usb_cdc_union_descriptor_t *)usb_find_desc_if(un->un_udev,
+		    UDESC_CS_INTERFACE, UDESCSUB_CDC_UNION,
+		    usbd_get_interface_descriptor(uiaa->uiaa_iface));
 		if (ud == NULL) {
@@ -238,4 +239,5 @@
 
-	ue = (const usb_cdc_ethernet_descriptor_t *)usb_find_desc(dev,
-	    UDESC_CS_INTERFACE, UDESCSUB_CDC_ENF);
+	ue = (const usb_cdc_ethernet_descriptor_t *)usb_find_desc_if(dev,
+	    UDESC_CS_INTERFACE, UDESCSUB_CDC_ENF,
+	    usbd_get_interface_descriptor(uiaa->uiaa_iface));
 	if (!ue || usbd_get_string(dev, ue->iMacAddress, eaddr_str) ||

to the NetBSD 9.0 sources and rebuild the kernel. After reboot:

[   427.493472] umodem0 at uhub5 port 2 configuration 1 interface 0
[   427.493472] umodem0: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4, iclass 2/2
[   427.493472] umodem0: data interface 1, has no CM over data, has break
[   427.493472] umodem0: status change notification available
[   427.493472] ucom4 at umodem0
  ...
[   427.493472] umodem5: data interface 11, has no CM over data, has break
[   427.493472] umodem5: status change notification available
[   427.493472] ucom9 at umodem5
[   427.493472] cdce0 at uhub5 port 2 configuration 1 interface 12
[   427.493472] cdce0: Telit (0x1bc7) 6 CDC-ACM + 1 CDC-ECM (0x23), rev 2.00/17.30, addr 4
[   427.513474] cdce0: Ethernet address 00:00:11:12:13:14



Home | Main Index | Thread Index | Old Index