<div dir="ltr">Dear all,<br><br>I have a problem with some modems that don't support USB <2.00 for the network interface.<br>In this case, PPP must be used.<br><br>It is a modem-specific limitation, and maybe it should have a udev flag: MM_USE_PPP_OVER_USB1, or something more creative.<br><br>The question is how to recognize the overall USB version . The udev USB version property for the device  will be >=2.00, but along the way, either the root hub or an intermediate one, will bring the effective version down.<br>The speed property is "cumulative": if a hub along the way is 12Mbps, then the final speed for the device is shown as 12Mbps:<br><br>  looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.4/3-2.4.3/3-2.4.3.2/3-2.4.3.2:1.0/tty/ttyACM4':<br>    KERNEL=="ttyACM4"<br>    SUBSYSTEM=="tty"<br>    DRIVER==""<br><br>  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.4/3-2.4.3/3-2.4.3.2/3-2.4.3.2:1.0':<br>    KERNELS=="3-2.4.3.2:1.0"<br>    SUBSYSTEMS=="usb"<br>    DRIVERS=="cdc_acm"<div>    ATTRS{authorized}=="1"<br>    ATTRS{bAlternateSetting}==" 0"<br>    ATTRS{bInterfaceClass}=="02"<br>    ATTRS{bInterfaceNumber}=="00"<br>    ATTRS{bInterfaceProtocol}=="01"<br>    ATTRS{bInterfaceSubClass}=="02"<br>    ATTRS{bNumEndpoints}=="01"<br>    ATTRS{bmCapabilities}=="2"<br>    ATTRS{iad_bFirstInterface}=="00"<br>    ATTRS{iad_bFunctionClass}=="02"<br>    ATTRS{iad_bFunctionProtocol}=="01"<br>    ATTRS{iad_bFunctionSubClass}=="02"<br>    ATTRS{iad_bInterfaceCount}=="02"<br>    ATTRS{interface}=="CDC Abstract Control Model (ACM)"<br>    ATTRS{supports_autosuspend}=="1"<br><br>  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.4/3-2.4.3/3-2.4.3.2':<br>    KERNELS=="3-2.4.3.2"<br>    SUBSYSTEMS=="usb"<br>    DRIVERS=="usb"<br>    ATTRS{authorized}=="1"<br>    ATTRS{avoid_reset_quirk}=="0"<br>    ATTRS{bConfigurationValue}=="1"<br>    ATTRS{bDeviceClass}=="ef"<br>    ATTRS{bDeviceProtocol}=="01"<br>    ATTRS{bDeviceSubClass}=="02"<br>    ATTRS{bMaxPacketSize0}=="64"<br>    ATTRS{bMaxPower}=="500mA"<br>    ATTRS{bNumConfigurations}=="1"<br>    ATTRS{bNumInterfaces}=="12"<br>    ATTRS{bcdDevice}=="0318"<br>    ATTRS{bmAttributes}=="a0"<br>    ATTRS{busnum}=="3"<br>    ATTRS{configuration}==""<br>    ATTRS{devnum}=="79"<br>    ATTRS{devpath}=="2.4.3.2"<br>    ATTRS{idProduct}=="0065"<br>    ATTRS{idVendor}=="1e2d"<br>    ATTRS{ltm_capable}=="no"<br>    ATTRS{manufacturer}=="Cinterion"<br>    ATTRS{maxchild}=="0"<br>    ATTRS{product}=="LTE Modem"<br>    ATTRS{quirks}=="0x0"<br>    ATTRS{removable}=="unknown"<br>    ATTRS{serial}=="8d8f52c8"<br>    <span style="background-color:rgb(255,255,0)">ATTRS{speed}=="12"</span><br>    ATTRS{urbnum}=="463"<br>   <span style="background-color:rgb(255,255,0)"> ATTRS{version}==" 2.10"</span><br><br></div><div><br></div><div>It is possible to cross the entire parent chain, and then get the minimum version. I don't have a root hub USB 1.x at hand, but I have found an old external USB hub 1.1, and connected this way: device - hub1.1 - hub2.0 - roothub2.0:<br></div><div>name: ttyACM4, version:       NULL, minversion: NULL<br></div><div>name: ttyACM4, version:       NULL, minversion: NULL<br>name: ttyACM4, version:       2.10. minversion:  2.10<br>name: ttyACM4, version:       1.10. minversion:  1.10<br>name: ttyACM4, version:       2.00. minversion:  1.10<br>name: ttyACM4, version:       2.00. minversion:  1.10<br>name: ttyACM4, version:       2.00. minversion:  1.10<br>name: ttyACM4, version:       NULL, minversion:  1.10<br>name: ttyACM4, version:       NULL, minversion:  1.10<br></div><div><br></div><div>I have placed some code in mm-kernel-device-udev.c to obtain the chain above.</div><div><br></div><div>The question is whether there is a better way to do this, possibly without touching the udev implementation.</div><div>Or whether it is acceptable to read the speed property instead of rebuilding the effective usb version: is it ok to replace a variable for another here for all foreseeable cases?</div><div><br></div><div>Thank you all in advance,</div><div>Kind Regards,</div><div>Giacinto</div><div><br></div><div><br></div><div><br></div></div>