Looking for recommendation: LTE USB stick for OpenWrt router, Germany

I would be looking for a LTE USB stick supported by OpenWRT, the USB LTE Stick meant to provide the Internet connection, the OpenWRT router meant to provide firewall and WiFi to clients.
I know my way around on the OpenWRT side, but I am basically clueless on LTE support.

I have seen the wiki, but that does not seem to have specific USB LTE stick recommentations. The device list only seems to have all-in-one devices.

Can anyone e.g. name specific LTE usb stick models that are known to work with OpenWRT 21.02?

Or does someone have recommentation, for what to look for, when choosing between available LTE USB sticks?

Or should I rather look for proprietary LTE modem routers and attach the OpenWRT device via LAN?

I use an Alcatel IK40V. When you connect this stick with your OpenWRT router (the repository has all driver needed), you have a new ethernet device, which you can use as your WAN device. Configure it as DHCP client and your router will get an IP address from the stick.

Huawei E3276 or 3372, works really well.

1 Like

Huawei E3372s-22 here ( europe too ). Work out of the box with any decent router. My setup for years as backup access, now got a B315s-22 bridge mode.

thanks so far

I have not yet decided, currently reading more blogs about the topic: most interesting so far was the blog https://www.lte-anbieter.info/lte-hardware/sticks/lte-stick-uebersicht.php (German)
Outline is: since 2018 no more new LTE USB sticks got introduced, stick development is said to basically be dead. There aren’t even LTE USB Sticks with more recent LTE versions available. Market is said to have shifted to LTE and 5G Wifi routers instead.

Hi.
E3372s, is available worldwide but as you said they are LTE cat4. E3372h is cheaper ( Hilink mode, but easy to convert to S mode, getting rid of double nat used in H mode ). If you think In future, look at mikrotik products, cat5 cat6 ones, they starting providing 5G modules.
You can connect them to any openwrt based router in bridge mode.

Yes, I've noticed it too - I've been looking for replacements for the cat4 USB LTEs I currently own.
I think I found a cat6 device, but the price was astronomical.

Still the 3372 have been able to deliver 85-90Mbit, which is pretty decent.

Getting/Using an old cell phone, tethered via USB, might be a better idea, if you want to get higher speeds.

Also if you use a tethered phone you can still use minutes of any plan. A problem in the UK with the Huawei routers which helpfully have an RJ11 port like the B818-263 is that UK operators do not allow VoLTE with fixed routers. So drops down to 3G for calls and connection interrupted.

I now got a IK40 for 30€, looks like a french/polish edition according to the papers, but so far it works with German Telekom LTE. And I only bricked/restored my OpenWRT router once during OpenWrt stick installation :wink:

My decision was based on:

  • As it is for private fun use, I did not want to spend 200€ or more on a proprietary full blown LTE WiFi router.
  • In the OpenWRT supported devices list, there are quite some LTE devices now listed as supported by OpenWRT, Unfortunately so far the interesting ones where not available for me, and several were listed quite expensive even though only having Wifi n or with meager 64MB RAM. But I am looking forward that more and more LTE routers come out and hopefully more and more of them will be supported by future OpenWRT version. So I aimed for a USB stick.
  • I could not find a Huawei 3276.
  • I felt uneasy with the Huawai 3372, as there are lots of different subvariants and lots of blogs further complaining that on top lots of varying firmwares exist, some claimed to have issues.
  • Amazon has lots of noname China LTE sticks for 20€, but I do not know, if they cooperate with OpenWRT.
  • So the IK40 seemed like a good choice, also since I found one for 30€ on eBay. Labeled as previously owned but feels brandnew. There seems to be a predecessor, which is unsuitable as it has less LTE bands and a successor (41 something), which does not seem faster, but is listed more expensive.
  • I do not know if true, but there were blogs claiming you have to unlock tethered mobiles first, before OpenWRT can use them. As I want to use it for IoT monitoring of a remote central heating, I prefer handsfree restart.

Interestingly the OpenWRT LTE stick installation is quite easy, once you know, what to do. If someone needs OpenWRT 21.02 config details for IK40: [How-To] configure and setup USB Alcatel LTE Link Key IK40 and Alcatel LTE MW40V

1 Like

The E3372 has had multiple versions. The current one is called E3372-325 and seems to be HiLink only. At least I haven't heard of anyone converting it into serial mode. The E3372-320 is somewhat supported, but success with E3372-325 seems to depend on 1) having the correct firmware version and 2) some struggle and some luck.

In case you have too old firmware in the E3372-325 when you buy it, you're sometimes out of luck. The update either comes from the operator whose SIM you put into it or from somewhere else, but in either case it is possible that no update is available for you. I am currently trying to make one work with OpenWRT and with Debian on my laptop. It works with Windows 11 no problem, but with too old firmware the best I've been able to do under OpenWRT is to make it rapidly cycle between RNDIS and storage modes.

The earlier E3372-153 or the previous E3372-320 are not available anymore where I live. Everyone's just selling the newest one. I could get an Alcatel IK41 by paying a little more though. But as it stands now and whoever might read this later, E3372 is not a recommendation unless you're aware of the version and what to do with it.

Hi.
Used ones start from 10eu ( europe ) or aliexpress

I've seen that reported now and then. We should really fix it. Maybe someone with one of these devices could figure out what magic Windows does to it?

I wonder if https://desowin.org/usbpcap/ still works with Windows 11? Yes, I can see it says Windows 7, 8 and 10, but that doesn't necessarily exclude 11. Having a dump of the first few USB transactions after the device is plugged in might do the trick.

Captured on Windows 11. There are over 15,000 packets, but that's probably because the dongle opens its UI automatically in Edge. Which ones should I copy and paste here?

There are 5.6.0, 5.6.1 and 5.6.2 and of these three, 5.6.1 is URB_BULK in or URB_BULK out, 5.6.2 is always URB_INTERRUPT in and 5.6.0 is purely URB_CONTROL out or URB_CONTROL in beginning with packet number 17.

Edit: Here are the first sixteen:
0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   00 05 00 06 00 80 02 08 00 00 00 00 80 06 00 01
0020   00 00 12 00

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   01 05 00 06 00 80 02 12 00 00 00 03 12 01 10 02
0020   00 00 00 40 66 35 01 20 ff ff 02 03 04 01

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   00 05 00 06 00 80 02 08 00 00 00 00 80 06 00 02
0020   00 00 09 00

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   01 05 00 06 00 80 02 09 00 00 00 03 09 02 4b 00
0020   02 01 00 e0 01

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   00 05 00 06 00 80 02 08 00 00 00 00 80 06 00 02
0020   00 00 4b 00

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   01 05 00 06 00 80 02 4b 00 00 00 03 09 02 4b 00
0020   02 01 00 e0 01 08 0b 00 02 e0 01 03 07 09 04 00
0030   00 01 e0 01 03 05 05 24 00 10 01 05 24 01 00 01
0040   04 24 02 00 05 24 06 00 01 07 05 82 03 08 00 04
0050   09 04 01 00 02 0a 00 00 06 07 05 81 02 00 02 00
0060   07 05 01 02 00 02 00

0000   1c 00 50 20 cf 93 02 80 ff ff 00 00 00 00 00 00
0010   00 05 00 06 00 00 02 08 00 00 00 00 00 09 01 00
0020   00 00 00 00

0000   1c 00 50 20 cf 93 02 80 ff ff 00 00 00 00 00 00
0010   01 05 00 06 00 00 02 00 00 00 00 03

0000   1b 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 2a 00
0010   00 05 00 06 00 00 ff 00 00 00 00

0000   1b 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 2a 00
0010   01 05 00 06 00 00 ff 00 00 00 00

0000   1b 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 2a 00
0010   00 05 00 06 00 00 ff 00 00 00 00

0000   1b 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 2a 00
0010   01 05 00 06 00 00 ff 00 00 00 00

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 0b 00
0010   00 05 00 06 00 80 02 08 00 00 00 00 80 06 07 03
0020   09 04 04 00

0000   1c 00 a0 3a 05 a4 02 80 ff ff 00 00 00 00 08 00
0010   01 05 00 06 00 80 02 04 00 00 00 03 0c 03 52 00

0000   1c 00 a0 1a f2 a3 02 80 ff ff 00 00 00 00 0b 00
0010   00 05 00 06 00 80 02 08 00 00 00 00 80 06 07 03
0020   09 04 0c 00

0000   1c 00 a0 1a f2 a3 02 80 ff ff 00 00 00 00 08 00
0010   01 05 00 06 00 80 02 0c 00 00 00 03 0c 03 52 00
0020   4e 00 44 00 49 00 53 00

Yet another edit:

On my laptop running Debian Bookworm, usb_modeswitch does the job using the "Huawei alternative mode" switching message, namely 55534243123456780000000000000011063000000000010000000000000000 (taken from usb_modeswitch.c 2.6.1 source code), though like I said elsewhere, it registers and deregisters as rndis device twice, then disconnects and reconnects, again registers and deregisters twice and then finally registers as rndis and appears as a network device.

Edit:

My /etc/usb_modeswitch.d/3566:2001 on the laptop says "Huawei new mode" and "No driver loading". There was somewhere some instruction that used the "alternative mode" but that switched it into cdc_ncm mode which was a dead end. The "Huawei new mode" message is 55534243123456780000000000000011062000000101000100000000000000.

Edit:

This is how it looks like in Debian Bookworm:

There are less events now, for some reason.

[Jul14 08:32] usb 3-2: new high-speed USB device number 6 using xhci_hcd
[  +0.153107] usb 3-2: New USB device found, idVendor=3566, idProduct=2001, bcdDevice=ff.ff
[  +0.000012] usb 3-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[  +0.000005] usb 3-2: Product: Mobile
[  +0.000002] usb 3-2: Manufacturer: Mobile
[  +0.000002] usb 3-2: SerialNumber: 123456789ABCD
[  +1.230976] usb 3-2: reset high-speed USB device number 6 using xhci_hcd
[  +1.311456] usb 3-2: reset high-speed USB device number 6 using xhci_hcd
[  +0.152185] usb 3-2: device firmware changed
[  +0.000115] usb 3-2: USB disconnect, device number 6
[  +0.015588] usbcore: registered new interface driver rndis_host
[  +0.860521] usb 3-2: new high-speed USB device number 7 using xhci_hcd
[  +0.152836] usb 3-2: New USB device found, idVendor=3566, idProduct=2001, bcdDevice=ff.ff
[  +0.000014] usb 3-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[  +0.000004] usb 3-2: Product: Mobile
[  +0.000003] usb 3-2: Manufacturer: Mobile
[  +0.000002] usb 3-2: SerialNumber: 123456789ABCD
[  +0.039192] rndis_host 3-2:1.0 usb0: register 'rndis_host' at usb-0000:33:00.4-2, RNDIS device, c2:ce:c1:39:ea:a6
[  +1.017227] rndis_host 3-2:1.0 usb0: unregister 'rndis_host' usb-0000:33:00.4-2, RNDIS device
[  +0.162387] usb 3-2: reset high-speed USB device number 7 using xhci_hcd
[  +0.165630] rndis_host 3-2:1.0 usb0: register 'rndis_host' at usb-0000:33:00.4-2, RNDIS device, c2:ce:c1:39:ea:a6
[  +1.010693] rndis_host 3-2:1.0 usb0: unregister 'rndis_host' usb-0000:33:00.4-2, RNDIS device
[  +0.168032] usb 3-2: reset high-speed USB device number 7 using xhci_hcd
[  +0.163961] rndis_host 3-2:1.0 usb0: register 'rndis_host' at usb-0000:33:00.4-2, RNDIS device, c2:ce:c1:39:ea:a6
[  +0.042989] rndis_host 3-2:1.0 enxc2cec139eaa6: renamed from usb0

Yuck, it's a while since I was able to read USB transactions fluently :wink: Doesn't wireshark dissect those packets even further?

In any case, the top level list of requests is in itself very interesting. Assuming we aren't missing some later transaction here it seems that Windows use the same initial RNDIS config we see. There is no mode switching. If there were, then we'd either see additional device and config descriptor requests (for a morphing device) or addtional set configuration requests (for multi config devices).

And looking at packet #6 we see what I believe is the same RNDIS config you see in Linux. You can simply compare the packet dump with

hexdump -C /sys/bus/usb/devices/x-y/descriptors

ignoring the initial parts (packet header in pcap and device descriptor in "descriptors").

Useful fools for manually dissecting these dumps is https://www.usbmadesimple.co.uk/ums_4.htm and constants and structs in include/uapi/linux/usb/ch9.h and include/uapi/linux/usb/cdc.h. Note that this device seems to use Communication (CDC) class specific descriptors even if it fomally is a "Wireless Controller".

Manual dissection of packet #6 shows a e0/01/03 device with a single two-interface function having a control interface with an interrupt ep and a data interface with two bulk endpoints. I.e. pretty standard CDC, simlar to e.g. an ethernet dongle:

09 02 4b 00 02 01 00 e0 01 config (len 0x004b, 2 ints, cfg #1, ..)

08 0b 00 02 e0 01 03 07 interface association  (2 ints starting at #0, cl/sc/pr = e0/01/03, string descr 7)

09 04 00 00 01 e0 01 03 05 interface (#0, alt #0, 1 ep, cl/sc/pr = e0/01/03, string descr 5)

 05 24 00 10 01 class int (cdc header, ver 1.10) 
 05 24 01 00 01 class int (cdc call management, no cap, data int: #1)
 04 24 02 00    class int (cdc acm, no cap) 
 05 24 06 00 01 class int (cdc union, master #0, slave #1)

 07 05 82 03 08 00 04   ep

09 04 01 00 02 0a 00 00 06 interface

 07 05 81 02 00 02 00      ep
 07 05 01 02 00 02 00      ep

and we see in the next packet that Windows does "set configuration 1", so nothing unexpected or different from Linux going on so far.

I don't know what thoise unknown packets are, but they look like simply incomplete copies of packet 13, so I assume they're just timeouts while the device is reconfiguring and enabling itself.

No surprises in the two string descriptor requests either. It's actually one request for descriptor #7, referenced by the IA above. The initial one is to get the required buffer size. The returned string is "RNDIS".

So all this is approximately the same Linux would do. I guess the real difference is what the RNDIS driver does in those control requests. I believe there are suprisingly many of those in that WIndows capture. Linux is probably not as fluent in talkiing RNDIS.

EDIT: Or maybe this is even simpler? Maybe it's not Windows doing something magic bu Linux doing something unexpected - causing the firmware to reset? It would be useful to see a capture of a device probing cycle on Linux too. In particular any control requests sent by the rndis_host driver right before the device resets.

You can use tcpdump to capture USB packets on OpenWrt if you build libpcap with usbmon support and install and load the usbmon module. There's a config setting under libpcap for this: CONFIG_PCAP_HAS_USB. Unfortunately I don't think it is enabled in any official builds. You can also do captures on a desktop Linux, using any of tcpdump, tshark or wireshark as long as you load the usbmon module. Select the appropriate "usbmonX" interface matching the bus you plug the modem into. It's easiest to dedicate a bus to the device being tested to avoid "noise" from other devices in the capture.

This is how a capture looks like in Debian Bookworm:

Captured using tcpdump. If there is no activity from udev and usb_modeswitch on the laptop, the device will once attempt to register as rndis device, even appears as a network interface that gets renamed, then immediately unregisters and comes back as a storage device. The udev rule that makes this work runs usb_modeswitch twice, both with reset and the first time with a release delay.

The interesting parts are in those control requests. That's the

RNDIS_MSG_INIT

etc in
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/usb/rndis_host.c#n288

One theory is that there is something there which makes the modem firmware reset. Maybe it doesn't like our idea of a reasonable max_transfer_size etc. LTE modems are known to have a sick relation to buffer bloat.

From the above, it looks like a similar control message is sent in packet 2597 and 2737. In both cases this happens around 1 second after the last communication with the device (a timeout?), and then there are a few hundred ms delay (device reset?) before we probe the device and configuration descriptors again (i.e rediscovered the device).

So I wonder what's in those control requests....

Packet 2597 is

0000   00 6c e9 03 20 94 ff ff 53 02 00 07 03 00 00 00
0010   ad 55 b1 64 00 00 00 00 13 7f 0a 00 8d ff ff ff
0020   0c 00 00 00 0c 00 00 00 21 00 00 00 00 00 0c 00
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040   03 00 00 00 0c 00 00 00 00 00 00 00
Or:

Packet 2737 is

0000   80 8a 34 39 20 94 ff ff 53 02 00 07 03 00 00 00
0010   af 55 b1 64 00 00 00 00 c5 7c 00 00 8d ff ff ff
0020   0c 00 00 00 0c 00 00 00 21 00 00 00 00 00 0c 00
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040   03 00 00 00 0c 00 00 00 00 00 00 00
Or:

OK, that's a RNDIS_MSG_HALT message. That could be a symptom of a disconnect already happening, since it is sent during "unbind". But then we wouldn't see it acked by the device, would we?

The other alternative is that it is part of the probe error handling. Which makes more sense. But you should also see an error message from the driver then I believe, so that doesn't quite add up either.

Would it be possible to simply make OpenWRT's usbmode do the same thing that usb_modeswitch already does successfully?

Namely, udev runs

/sbin/usb_modeswitch -v 3566 -p 2001 -W -R -w 400
/sbin/usb_modeswitch -v 3566 -p 2001 -W -R

with a configuration file that says

TargetVendor=0x3566
TargetProductList="1506"
HuaweiNewMode=1
NoDriverLoading=1

and is located in /etc/usb_modeswitch.d/.

I started looking into their respective source codes, but since I'm not an experienced coder, it may take me some time to realize what happens there. I'd especially like to understand how each one of them reads their configuration files. My chance to return the E3372-325 expired today, so now I must find at least some use for it.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.