Problem: no ISPs support my area (actually they do, but they lie to me because maybe they don't support a new customer or they don't like me specially, who knows.)
Solution: Buy a 4G (plus extra super) plan from a mobile carrier.

They send me a SIM card. What do I do with a SIM card?

I buy a TP-Link TL-MR3020, an old cheap router that advertises itself as supporting 4G. I expect to get a router with a place to plug my SIM card, but instead I get a router with an USB port. What do I do with a USB port?

I buy a rather expensive USB 4G modem (which every storeowner tell me I can only get from the mobile carriers themselves, the carriers sell it for 4 times the price I paid), an Olivetti Olicard 600.

I put the SIM inside the Olicard and plug it in the router. Nothing happens. Inside the old cranky web interface I see that the router is "unknown". I ask a guy from a mobile phone maintenance shop to solve it for me, he does the default "quick setup", nothing works, he says it's a problem with the SIM.

I test the USB modem on a Windows computer, it comes with a driver and a GUI program for connecting itself. I input the info from the SIM carrier. Everything works.

I try an updated TP-Link firmware on the router, it is invalid for some odd reason. Then I remember OpenWrt, despite never having used it. I get an old OpenWrt image for my device, newer versions aren't supported. I read on the TL-MR3020 device page that I shouldn't fear the loss of the 3G/4G support in the default firmware: OpenWrt makes USB modems work in any device with an USB port.

It is flashed and instantly works, shows up a much better web interface, SSH support, a real Linux. Now this thing is certainly going to work. But it doesn't. There isn't an interface for my USB modem as I thought it would automatically have. I try to follow a tutorial for enabling the USB, stop at the middle because the tutorial expects me to have /dev/ttyUSBx devices and I don't. Why?

I ask for help in the forum. People say crazy things, ignore me. Some gentle guy tells me to use the newest version. There's no newest version for my device. I install a newer version, not the newest. I'm afraid of things getting wrong, but the OpenWrt update process is easy and painless. However nothing changes.

I ask for help in the forum. After a while appears a very helpful guy. He points me to another tutorial, completely different from the one I was following, using qmi instead of usb-serial.

When I'm trying to install the necessary packages my router's disk gets full. Apparently there's no solution for that, but actually there is: if you compile a new image with the packages you want all at once, some magic happens that saves disk space and much more packages fit (also you don't get Luci, the web interface, as that is an optional package that takes a lot of disk space).

I follow the ImageBuilder tutorial and it works flawlessly. I flash the new image, my IP and ssh settings are kept and I'm able to ssh to the router. However, the qmi stuff still needs /dev/cdc-wdmx entries and I don't have any of these.

I do the same, now with the most recent OpenWrt version (the one which apparently wasn't supported) and it works too (my device was moved from the generic branch to the tiny branch -- I don't know if "branch" the correct word here), but my problem persists.

I didn't know that, but qmi is just a protocol built on top of usb-serial (in other words, usb-serial would have worked too) and for both of them to work, besides having the proper drivers installed (which I did) what I needed was to trigger a modeswitch on my USB modem.

Everybody gets their devices' modes switched automatically because everybody have supported devices. I didn't.

After having discovered how to trigger a modeswitch on my device and adding it to the /etc/usb-mode.json everything started working and I was able to call uqmi -d /dev/cdc-wdm3 with all the uqmi commands, get connected and so on.

However, the tutorials for the networking part and actually getting online weren't working for me, and they're confusing. The thing that worked was just adding this to /etc/config/network:


config interface 'wwan0'
        option proto 'qmi'
        option device '/dev/cdc-wdm3'
        option modes 'umts'
        option username 'claro'
        option password 'claro'
        option apn 'claro.com.br'
        option ifname 'wwan0'


And then configuring /etc/config/wireless and /etc/config/dhcp with the most default values possible.