Navigation

    Netgate Discussion Forum
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search

    Huawei 4G/LTE USB findings

    Wireless
    2
    10
    319
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      keyser last edited by keyser

      Hey Forum

      I have been trying the get the “standard” Huawei E3372h-320 4G/LTE USB Stick running in pfSense (without luck so far).

      So I thought I’d share a simple list of my findings because there are SOOO many incomplete or “guesswork” articles out there:

      The E3372h-320 is a Hilink firmware version of the Huawei sticks (Firmware version => 22.x). Hilink means it’s a “multi feature” capable stick than can be put into various operating modes by changing it’s USB identity.

      Years back Huawai released these sticks with a simple Modem only firmware (Firmware <= 21.x) - Then they were called E3372s-xxx instead. There are various articles out there on how to reflash you device with a “modem only” firmware. While this worked for some at the time, it is no longer generally possible to reflash the newer hardware versions of the stick.

      You can tell which of the varius modes the HiLink operates in by looking at the USB Product ID it has. The USB Vendor ID will always be 0x12d1 (huawaii). But the product ID can be changed with fx. The “usb_modeswitch” utility on Linux and FreeBSD (pfSense). In Windows the switching utility is built into the Driver installer.
      Here’s a brief rundown on the “multi feature” part:

      1: By default it will present itself as a USB storage device with a few installers for different operating systems.
      USB Product ID: 0x1f01

      2: It has two pure Ethernet modes where it behaves as a Ethernet router. In the first mode its a router on a stick - meaning it creates the 4G/LTE link automatically, and does routing with NAT to the Ethernet side. It also by default has a DHCP server active on the ethernet side (192.168.8.x/24). It even has a Webserver with configuration options on 192.168.8.1 for the router/NAT/DHCP settings.
      This mode is the standard mode used in Windows/linux once you have installed the driver (mode switcher).
      I don’t know the details of the second mode as I cannot test it, but it is similar and still presents itself as a pure Ethernet device.
      USB Product ID: 0x14db or 0x14dc

      3: The stick also has a NCM mode where it acts as a ethernet device that bridges to 4G. The 4G side of the bridge should be controllable over a serial device. This mode allows the Host 4G access without the NAT incurred in Ethernet routing mode.
      USB Product ID: 0x155e

      4: Supposedly there is a pure modem mode as well, but I cannot find it or switch to it.

      STATUS on pfSense:

      I can’t get any of the modes to work correctly - I’m observing the following issues:

      1: Attempting to use the Ethernet modes does not work because pfSense does not have a driver that interacts correctly with the presented Ethernet interface. When using usb_modeswitch to change the device to 0x14db or 0x14dc mode, the switch happens and the device is there for about one second and immidiately connects on the 4G side (led stops blinking).
      But a second later it disconnects and switches back to mass storage device mode (The 4G connection stays up on the stick). It’s not a power issue (tried with a USB hub), and there are dusins of posts with people seeing the same issue on FreeBSD and other deriviates. There have briefly been BSD versions that worked with this mode, but details are scarce. It works flawlessly on Windows/Linux in this mode.

      2: Attemting to use the NCM mode (0x155e) changes the stick correctly to NCM with a ue0 Ethernet device being discovered in pfSense but I cant find a serial device available. The stick stays in this mode as expected. But I cannot get any control or communication going. The Ethernet interface mounts correctly but nothing works and I can never get the 4G side to connect.
      I know this mode works on my stick, because I often use this very stick/SIM card in 0x155e mode on Aruba Instant Access Points as a 4G uplink, and they work fine and the AP recieve the 4G IP address directly (no NAT).

      If anyone has any ideas how to use/get the 0x155e mode going in pfSense I would be thrilled. I have tried dusins of PPP settings and so forth but nothing works. On my Aruba AP, no settings need to be made in 0x155e mode. It connects to 4G and the cellular IP address is given directly to the AP - I don’t even know if it does it by PPP control or some other way…

      Alternatively a fix to pfSense so it mounts the Ethernet device correctly in 0x14db mode would be fine. I can live with the USB NAT performed in this case.

      1 Reply Last reply Reply Quote 0
      • stephenw10
        stephenw10 Netgate Administrator last edited by

        I would try to run usbconfig dump_all_desc against it in the various modes to see what interfaces it actually presents in each.

        If the device appears and then disappears in the Ethernet mode, is it actually changing there or is it FreeBSD doing something odd.

        To create a serial port to configure it in NCM mode probably requires u3g to recognise it. That device ID is not listed specifically though:
        https://github.com/pfsense/FreeBSD-src/blob/devel-12/sys/dev/usb/usbdevs

        Steve

        K 2 Replies Last reply Reply Quote 0
        • K
          keyser @stephenw10 last edited by keyser

          @stephenw10 said in Huawei 4G/LTE USB findings:

          I would try to run usbconfig dump_all_desc against it in the various modes to see what interfaces it actually presents in each.

          If the device appears and then disappears in the Ethernet mode, is it actually changing there or is it FreeBSD doing something odd.

          To create a serial port to configure it in NCM mode probably requires u3g to recognise it. That device ID is not listed specifically though:
          https://github.com/pfsense/FreeBSD-src/blob/devel-12/sys/dev/usb/usbdevs

          Steve

          Hi Steve

          I was hoping you would turn up in this thread ;-) Here's the deal:

          When plugged in, and I run the usb_modeswitch to 0x155e mode, the system logs:

          Apr 8 14:43:37 kernel ue0: Ethernet address: 00:1e:10:1f:00:00
          Apr 8 14:43:37 kernel ue0: <USB Ethernet> on cdce0
          Apr 8 14:43:37 kernel cdce0: <NCM Network Control Model> on usbus1
          Apr 8 14:43:37 kernel cdce0 on uhub1
          Apr 8 14:43:37 kernel ugen1.2: <HUAWEIMOBILE HUAWEIMOBILE> at usbus1
          Apr 8 14:43:35 kernel ugen1.2: <HUAWEIMOBILE HUAWEIMOBILE> at usbus1 (disconnected)
          Apr 8 14:43:35 kernel umass0: detached
          Apr 8 14:43:35 kernel (cd0:umass-sim0:0:0:0): Periph destroyed
          Apr 8 14:43:35 kernel cd0: <HUAWEI Mass Storage 2.3M> s/n 0123456789ABCDEF detached
          Apr 8 14:43:35 kernel cd0 at umass-sim0 bus 0 scbus1 target 0 lun 0
          Apr 8 14:43:35 kernel umass0: at uhub1, port 1, addr 2 (disconnected)

          Basically it destroys the mass storage device as expected and finds the NCM instead.
          As you can see, the ue0 interface is dicovered, but no serial devices to control it (and bring up 4G) is found.
          Running your suggested command for the Huawei device once in 0x155e mode returns:

          ugen1.2: <HUAWEIMOBILE HUAWEIMOBILE> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
          
            bLength = 0x0012
            bDescriptorType = 0x0001
            bcdUSB = 0x0200
            bDeviceClass = 0x0002  <Communication device>
            bDeviceSubClass = 0x0000
            bDeviceProtocol = 0x0000
            bMaxPacketSize0 = 0x0040
            idVendor = 0x12d1
            idProduct = 0x155e
            bcdDevice = 0x0102
            iManufacturer = 0x0001  <HUAWEI_MOBILE>
            iProduct = 0x0002  <HUAWEI_MOBILE>
            iSerialNumber = 0x0000  <no string>
            bNumConfigurations = 0x0001
          
           Configuration index 0
          
              bLength = 0x0009
              bDescriptorType = 0x0002
              wTotalLength = 0x00bd
              bNumInterfaces = 0x0005
              bConfigurationValue = 0x0001
              iConfiguration = 0x0000  <no string>
              bmAttributes = 0x0080
              bMaxPower = 0x0001
          
              Interface 0
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0000
                bAlternateSetting = 0x0000
                bNumEndpoints = 0x0003
                bInterfaceClass = 0x00ff  <Vendor specific>
                bInterfaceSubClass = 0x00ff
                bInterfaceProtocol = 0x00ff
                iInterface = 0x0000  <no string>
          
                Additional Descriptor
          
                bLength = 0x05
                bDescriptorType = 0x24
                bDescriptorSubType = 0x00
                 RAW dump:
                 0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
          
          
                Additional Descriptor
          
                bLength = 0x04
                bDescriptorType = 0x24
                bDescriptorSubType = 0x02
                 RAW dump:
                 0x00 | 0x04, 0x24, 0x02, 0x02
          
          
                Additional Descriptor
          
                bLength = 0x05
                bDescriptorType = 0x24
                bDescriptorSubType = 0x01
                 RAW dump:
                 0x00 | 0x05, 0x24, 0x01, 0x00, 0x00
          
          
                Additional Descriptor
          
                bLength = 0x05
                bDescriptorType = 0x24
                bDescriptorSubType = 0x06
                 RAW dump:
                 0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
          
          
               Endpoint 0
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0083  <IN>
                  bmAttributes = 0x0003  <INTERRUPT>
                  wMaxPacketSize = 0x000a
                  bInterval = 0x0009
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
               Endpoint 1
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0082  <IN>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
               Endpoint 2
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0002  <OUT>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
          
              Interface 1
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0001
                bAlternateSetting = 0x0000
                bNumEndpoints = 0x0002
                bInterfaceClass = 0x00ff  <Vendor specific>
                bInterfaceSubClass = 0x00ff
                bInterfaceProtocol = 0x00ff
                iInterface = 0x0000  <no string>
          
               Endpoint 0
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0084  <IN>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
               Endpoint 1
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0003  <OUT>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
          
              Interface 2
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0002
                bAlternateSetting = 0x0000
                bNumEndpoints = 0x0002
                bInterfaceClass = 0x00ff  <Vendor specific>
                bInterfaceSubClass = 0x00ff
                bInterfaceProtocol = 0x00ff
                iInterface = 0x0000  <no string>
          
               Endpoint 0
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0085  <IN>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
               Endpoint 1
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0004  <OUT>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
                Additional Descriptor
          
                bLength = 0x08
                bDescriptorType = 0x0b
                bDescriptorSubType = 0x03
                 RAW dump:
                 0x00 | 0x08, 0x0b, 0x03, 0x02, 0x02, 0x0d, 0x00, 0x0b
          
          
          
              Interface 3
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0003
                bAlternateSetting = 0x0000
                bNumEndpoints = 0x0001
                bInterfaceClass = 0x0002  <Communication device>
                bInterfaceSubClass = 0x000d
                bInterfaceProtocol = 0x0000
                iInterface = 0x0008  <NCM Network Control Model>
          
                Additional Descriptor
          
                bLength = 0x05
                bDescriptorType = 0x24
                bDescriptorSubType = 0x00
                 RAW dump:
                 0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
          
          
                Additional Descriptor
          
                bLength = 0x05
                bDescriptorType = 0x24
                bDescriptorSubType = 0x06
                 RAW dump:
                 0x00 | 0x05, 0x24, 0x06, 0x03, 0x04
          
          
                Additional Descriptor
          
                bLength = 0x0d
                bDescriptorType = 0x24
                bDescriptorSubType = 0x0f
                 RAW dump:
                 0x00 | 0x0d, 0x24, 0x0f, 0x0a, 0x00, 0x00, 0x00, 0x00,
                 0x08 | 0xea, 0x05, 0x00, 0x00, 0x00
          
          
                Additional Descriptor
          
                bLength = 0x06
                bDescriptorType = 0x24
                bDescriptorSubType = 0x1a
                 RAW dump:
                 0x00 | 0x06, 0x24, 0x1a, 0x00, 0x01, 0x1f
          
          
               Endpoint 0
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0087  <IN>
                  bmAttributes = 0x0003  <INTERRUPT>
                  wMaxPacketSize = 0x0010
                  bInterval = 0x0005
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
          
              Interface 4
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0004
                bAlternateSetting = 0x0000
                bNumEndpoints = 0x0000
                bInterfaceClass = 0x000a  <CDC-data>
                bInterfaceSubClass = 0x0000
                bInterfaceProtocol = 0x0001
                iInterface = 0x0009  <CDC Network Data>
          
          
              Interface 4 Alt 1
                bLength = 0x0009
                bDescriptorType = 0x0004
                bInterfaceNumber = 0x0004
                bAlternateSetting = 0x0001
                bNumEndpoints = 0x0002
                bInterfaceClass = 0x000a  <CDC-data>
                bInterfaceSubClass = 0x0000
                bInterfaceProtocol = 0x0001
                iInterface = 0x0009  <CDC Network Data>
          
               Endpoint 0
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0086  <IN>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          
               Endpoint 1
                  bLength = 0x0007
                  bDescriptorType = 0x0005
                  bEndpointAddress = 0x0005  <OUT>
                  bmAttributes = 0x0002  <BULK>
                  wMaxPacketSize = 0x0200
                  bInterval = 0x0000
                  bRefresh = 0x0000
                  bSynchAddress = 0x0000
          

          Your link gets a little to technical for me to decipher what I can do to have pfSense discover the serial ports.

          EDIT: As far as I can see, it has one configuration to select in this mode (the currently active one).
          That configuration has 5 interfaces, but pfSense only discovers the ue0 Ethernet one. I suppose 1 of the remaining 4 is the serial control interface i'm missing?

          stephenw10 1 Reply Last reply Reply Quote 0
          • K
            keyser @stephenw10 last edited by

            @stephenw10 said in Huawei 4G/LTE USB findings:

            I would try to run usbconfig dump_all_desc against it in the various modes to see what interfaces it actually presents in each.

            If the device appears and then disappears in the Ethernet mode, is it actually changing there or is it FreeBSD doing something odd.

            To create a serial port to configure it in NCM mode probably requires u3g to recognise it. That device ID is not listed specifically though:
            https://github.com/pfsense/FreeBSD-src/blob/devel-12/sys/dev/usb/usbdevs

            Steve

            But I guess the "core" of your link is that 0x155e is not recognized as a Huawei USB device in FreeBSD 12, and as such it will load no serial drivers to the unrecognized devices.
            I just don't get why it finds the ue0 device then....?

            Also: the E3372h-320 in 0x155e mode is the most broadly available Huawei 4G dongle in northern europe - and has been for 3 - 4 years now, so how can that not be supported in FreeBSD yet?

            1 Reply Last reply Reply Quote 0
            • stephenw10
              stephenw10 Netgate Administrator @keyser last edited by

              Yes, there's only one config index shown so no change of selecting something different in pfSense. There are 5 interfaces shown but none is obviously a serial connection.

              Just as an example this is a modem that is supported by u3g:

              [22.01-RELEASE][admin@6100.stevew.lan]/root: usbconfig -d ugen0.2 dump_all_desc
              ugen0.2: <Huawei Technologies Co., Ltd. HUAWEI Mobile> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
              
                bLength = 0x0012 
                bDescriptorType = 0x0001 
                bcdUSB = 0x0210 
                bDeviceClass = 0x0000  <Probed by interface class>
                bDeviceSubClass = 0x0000 
                bDeviceProtocol = 0x00ff 
                bMaxPacketSize0 = 0x0040 
                idVendor = 0x12d1 
                idProduct = 0x15c1 
                bcdDevice = 0x0102 
                iManufacturer = 0x0001  <Huawei Technologies Co., Ltd.>
                iProduct = 0x0002  <HUAWEI Mobile>
                iSerialNumber = 0x0003  <0123456789ABCDEF>
                bNumConfigurations = 0x0003 
              
               Configuration index 0
              
                  bLength = 0x0009 
                  bDescriptorType = 0x0002 
                  wTotalLength = 0x012d 
                  bNumInterfaces = 0x0006 
                  bConfigurationValue = 0x0001 
                  iConfiguration = 0x0000  <no string>
                  bmAttributes = 0x00a0 
                  bMaxPower = 0x0001 
              
                  Interface 0
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0000 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0003 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0010 
                    iInterface = 0x0007  <Huawei Mobile Connect - Modem>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x00
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0082  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x000a 
                      bInterval = 0x0009 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0081  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 2
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0001  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 1
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0001 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0013 
                    iInterface = 0x0008  <Huawei Mobile Connect - Application>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0083  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0002  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 2
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0002 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0012 
                    iInterface = 0x0009  <Huawei Mobile Connect - Pcui>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0084  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0003  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 3
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0003 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0001 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0016 
                    iInterface = 0x000a  <HUAWEI Mobile Connect - Network Card>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x06
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x1a
                     RAW dump: 
                     0x00 | 0x06, 0x24, 0x1a, 0x00, 0x01, 0x1f
              
              
                    Additional Descriptor
              
                    bLength = 0x0d
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x0f
                     RAW dump: 
                     0x00 | 0x0d, 0x24, 0x0f, 0x0c, 0x0f, 0x00, 0x00, 0x00, 
                     0x08 | 0xea, 0x05, 0x03, 0x00, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x03, 0x03
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0086  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x0010 
                      bInterval = 0x0005 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 3 Alt 1
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0003 
                    bAlternateSetting = 0x0001 
                    bNumEndpoints = 0x0003 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0016 
                    iInterface = 0x000b  <CDC Network Data>
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0086  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x0010 
                      bInterval = 0x0005 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0085  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 2
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0004  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 4
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0004 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0014 
                    iInterface = 0x000e  <Huawei Mobile Connect - Gps>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x04
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0087  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0005  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 5
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0005 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x001b 
                    iInterface = 0x000f  <Huawei Mobile Connect - Serial B>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x05
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0088  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0006  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
              
               Configuration index 1
              
                  bLength = 0x0009 
                  bDescriptorType = 0x0002 
                  wTotalLength = 0x0120 
                  bNumInterfaces = 0x0007 
                  bConfigurationValue = 0x0002 
                  iConfiguration = 0x0000  <no string>
                  bmAttributes = 0x00a0 
                  bMaxPower = 0x0001 
              
                  Interface 0
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0000 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0001 
                    bInterfaceClass = 0x0002  <Communication device>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0000 
                    iInterface = 0x0010  <CDC Ethernet Control Model (ECM)>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x0d
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x0f
                     RAW dump: 
                     0x00 | 0x0d, 0x24, 0x0f, 0x12, 0x00, 0x00, 0x00, 0x00, 
                     0x08 | 0xea, 0x05, 0x00, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0082  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x0010 
                      bInterval = 0x0005 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 1
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0001 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x000a  <CDC-data>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0000 
                    iInterface = 0x0011  <CDC Ethernet Data>
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0081  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0001  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 2
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0002 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0003 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0010 
                    iInterface = 0x0007  <Huawei Mobile Connect - Modem>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0084  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x000a 
                      bInterval = 0x0009 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0083  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 2
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0002  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 3
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0003 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0013 
                    iInterface = 0x0008  <Huawei Mobile Connect - Application>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x03
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0085  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0003  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 4
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0004 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0012 
                    iInterface = 0x0009  <Huawei Mobile Connect - Pcui>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x04
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0086  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0004  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 5
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0005 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0014 
                    iInterface = 0x000e  <Huawei Mobile Connect - Gps>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x05
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0087  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0005  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 6
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0006 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x001b 
                    iInterface = 0x000f  <Huawei Mobile Connect - Serial B>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x06
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0088  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0006  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
              
               Configuration index 2
              
                  bLength = 0x0009 
                  bDescriptorType = 0x0002 
                  wTotalLength = 0x0089 
                  bNumInterfaces = 0x0003 
                  bConfigurationValue = 0x0003 
                  iConfiguration = 0x0000  <no string>
                  bmAttributes = 0x00a0 
                  bMaxPower = 0x0001 
              
                  Additional Descriptor
              
                  bLength = 0x08
                  bDescriptorType = 0x0b
                  bDescriptorSubType = 0x00
                   RAW dump: 
                   0x00 | 0x08, 0x0b, 0x00, 0x02, 0x02, 0x0e, 0x00, 0x0d
              
              
                  Interface 0
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0000 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0001 
                    bInterfaceClass = 0x0002  <Communication device>
                    bInterfaceSubClass = 0x000e 
                    bInterfaceProtocol = 0x0000 
                    iInterface = 0x000a  <HUAWEI Mobile Connect - Network Card>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x0c
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x1b
                     RAW dump: 
                     0x00 | 0x0c, 0x24, 0x1b, 0x00, 0x01, 0x00, 0x04, 0x20, 
                     0x08 | 0x80, 0xdc, 0x05, 0x20
              
              
                    Additional Descriptor
              
                    bLength = 0x08
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x1c
                     RAW dump: 
                     0x00 | 0x08, 0x24, 0x1c, 0x00, 0x01, 0x10, 0xdc, 0x05
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x01
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0082  <IN>
                      bmAttributes = 0x0003  <INTERRUPT>
                      wMaxPacketSize = 0x0010 
                      bInterval = 0x0005 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 1
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0001 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0000 
                    bInterfaceClass = 0x000a  <CDC-data>
                    bInterfaceSubClass = 0x0000 
                    bInterfaceProtocol = 0x0002 
                    iInterface = 0x000b  <CDC Network Data>
              
              
                  Interface 1 Alt 1
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0001 
                    bAlternateSetting = 0x0001 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x000a  <CDC-data>
                    bInterfaceSubClass = 0x0000 
                    bInterfaceProtocol = 0x0002 
                    iInterface = 0x000b  <CDC Network Data>
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0081  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0001  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              
                  Interface 2
                    bLength = 0x0009 
                    bDescriptorType = 0x0004 
                    bInterfaceNumber = 0x0002 
                    bAlternateSetting = 0x0000 
                    bNumEndpoints = 0x0002 
                    bInterfaceClass = 0x00ff  <Vendor specific>
                    bInterfaceSubClass = 0x0006 
                    bInterfaceProtocol = 0x0014 
                    iInterface = 0x000e  <Huawei Mobile Connect - Gps>
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x00
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
              
              
                    Additional Descriptor
              
                    bLength = 0x04
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x02
                     RAW dump: 
                     0x00 | 0x04, 0x24, 0x02, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x01
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x01, 0x00, 0x02
              
              
                    Additional Descriptor
              
                    bLength = 0x05
                    bDescriptorType = 0x24
                    bDescriptorSubType = 0x06
                     RAW dump: 
                     0x00 | 0x05, 0x24, 0x06, 0x00, 0x00
              
              
                   Endpoint 0
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0083  <IN>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
                   Endpoint 1
                      bLength = 0x0007 
                      bDescriptorType = 0x0005 
                      bEndpointAddress = 0x0002  <OUT>
                      bmAttributes = 0x0002  <BULK>
                      wMaxPacketSize = 0x0200 
                      bInterval = 0x0000 
                      bRefresh = 0x0000 
                      bSynchAddress = 0x0000 
              
              

              Which shows in the boot log as:

              ugen0.2: <Huawei Technologies Co., Ltd. HUAWEI Mobile> at usbus0
              u3g0 on uhub0
              u3g0: <Huawei Mobile Connect - Modem> on usbus0
              u3g0: Found 5 ports.
              

              Resulting in:

              [22.01-RELEASE][admin@6100.stevew.lan]/dev: ls cuaU*
              cuaU0.0      cuaU0.0.lock cuaU0.1.init cuaU0.2      cuaU0.2.lock cuaU0.3.init cuaU0.4      cuaU0.4.lock
              cuaU0.0.init cuaU0.1      cuaU0.1.lock cuaU0.2.init cuaU0.3      cuaU0.3.lock cuaU0.4.init
              

              It finds the USB ethernet device on yoru modem because the cdce driver will attach to any cdc Ethernet device, it doesn't need to have the exact matching USB IDs.

              Steve

              K 2 Replies Last reply Reply Quote 0
              • K
                keyser @stephenw10 last edited by

                @stephenw10 😒

                So no hope of getting that stick running? It is more or less he only stick you can buy these days, so it's a little difficult getting something else that will be supported.

                I'm guessing it's not so much a driver thing (likely the same drivers will work), but it's rather an issue where it doesn't recognize the ID/devices and then does not know which drivers to use to attach to the devices.
                Any chance I can low level edit something to make it attach the standard drivers to this 0x155e ID?

                1 Reply Last reply Reply Quote 0
                • K
                  keyser @stephenw10 last edited by

                  @stephenw10 I should mention that It seems my Aruba AP’s use the CDC interface to make the 4G connection, so that is likely the interface to use. But whether that is the serial Interface or a API interface I don’t know. I can see your Huawei have the CDC as well, but also somthing called Serial B.

                  Can you figure out which device number corresponds to the cuaUx.x interface you use to control the 4G connection with?

                  1 Reply Last reply Reply Quote 0
                  • stephenw10
                    stephenw10 Netgate Administrator last edited by

                    Mmm, it's unfortunately difficult to add devices to u3g to test because the values are tied into the OS. You need to recompile everything.

                    I see there are a number of threads reporting similar or identical responses with that device and no good result.
                    The immediate disconnect thing is odd. Doesn't look like anyone else has found a reason for that either. 😕

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      keyser @stephenw10 last edited by keyser

                      @stephenw10 said in Huawei 4G/LTE USB findings:

                      Mmm, it's unfortunately difficult to add devices to u3g to test because the values are tied into the OS. You need to recompile everything.

                      I see there are a number of threads reporting similar or identical responses with that device and no good result.
                      The immediate disconnect thing is odd. Doesn't look like anyone else has found a reason for that either. 😕

                      😞

                      Since this is a bit outside netgate’s jurisdiction (base OS driver updates), I guess there is no need to get my hopes too high.
                      Given BSD always had lackluster support in the cellular department, I’ll put this project on lifesupport until support for 4G dongles you can actually get is present.

                      But Thanks for the insight

                      1 Reply Last reply Reply Quote 0
                      • stephenw10
                        stephenw10 Netgate Administrator last edited by

                        I have two here, both are internal m.2 cards but still USB connected. Neither are current though so it's hard to recommend for a new deployment.
                        The only thing that will always work is an external Ethernet connected LTE modem.

                        Steve

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post