Reliable, low cost QMI modem card

Until now, using Quectel EC25-modems with PPP (3g) worked quite well in USA.
However, now all carriers are phasing out 3G, and usage of 4G is forced, requiring QMI. Which, unfortunately, is a bit arkward because of 'raw IP' when using EC25. Any recommendations for a reliable alternative modem, cat4 is good enough ? 802.3 preferred, of course.

Hi
I have a Quectel EC25-EU, with SW EC25EUGAR06A05M4G, and I have no problem to use QMI and raw-IP, but maybe the European version is different.
What issues do you have or do you refer to https://github.com/openwrt/openwrt/issues/9664?

I have issues to set up the network config correctly, because having custom built image. In short words, I do not get an IP.
Could you provide your working /etc/config/network , /etc/config/dhcp ?
Which openwrt version are you using ? Actually, I see a few very recent patches for the QMI stuff, waiting to be merged. Patches just a few hours/days old, so it looks like ongoing problem fixing.
Thanx for the link, I just checked the sources in my 21.02.03 build environment, and I do not see this patch to be present. Seems to be a very dynamic area of interest ...

I have a customized version of QMI / uqmi, https://github.com/mrhaav/openwrt-packages
I have used this with different versions of Openwrt, 19.07.8, 21.02.2 and 22.03.0, and with different modems / routers, Quectel EC25-EU, Sierra Wireless EM7455, TP-link MR200v4, D-Link DWR-921 and ZTE MF286D.

Looks like this qmi stuff is a fast moving target. Did you already consider these pending patches to include in your package https://github.com/openwrt/openwrt/pull/10906
I have the impression, this would make sense, if not done yet.

Some of the stuff in https://github.com/openwrt/openwrt/pull/10906 have I solve.
The timer for registration is, default, 35s but you can turn this timer off and wait for ever, uci set network.<your interface>.abort_search=false. This could be good if you have bad coverage.
My uqmi daemon will handle the disconnections by the service provider. The daemon will check, every 30s, if the modem is connected. If the modem has been disconnected it will re-connect and update the interface with the IP-address.
I havenĀ“t had any issue with setting echo "Y" > /sys/class/net/$ifname/qmi/raw_ip. Normally the interface is down when qmi is initiating the session.
To avoid dead locks, I have the timeout timer configured when reading the PIN status, pin_status=$(uqmi -s -d "$device" --uim-get-sim-state -t 2000 2>&1)

What platform are you using? I could compile my uqmi if you would like to test.