These instructions worked for a GL-MT1300 (Beryl Ac1300) and a GL-MT3000 (Beryl AX)
Make sure its a h stick. Other sticks will probably need flashing.
Source info here: https://forum.openwrt.org/t/huawei-e3372h-320-in-ncm-mode/126018/11
Initial glinet ssid is goodlife
Do this to avoid conflict with 192.168.8.x which the E3372 uses when natting. This will be at: http://192.168.8.1/#/lanip on the E3372
I changed the Beryl local green net to 192.168.15.0/24 with Beryl at 192.158.15.1
Luci can't see the config without support loaded. The modem functioned (passed traffic) on an MT3000 without this but not on a MT1300.
The MT1300 needed the luci-proto-ncm package to set the modem up properly to work. Other than this the setup for MT1300 and MT3000 is the same.
Install nano and luci-proto-ncm via the luci package manager or using the following in an SSH shell:
opkg update opkg install nano-full opkg install luci-proto-ncm
In luci @ http://192.168.15.1:8080/cgi-bin/luci/admin/system/flash
Upload Andy's Beryl E3372 Config which copies the following:
(Also here: D:\Andy Docs\Andy Projects\Mesh Wifi\Beryl MT3000)
Useful tools:
Files as modded (see instructions below):
The โbakโ and โnewโ files allow the scripts to switch between eth and ncm mode easily.
The modded usb-mode.json file:
# in the message block add this message to the end:
"55534243123456780000000000000011063000000000010000000000000000"
# In my setup this became message number 61 (zero based list) so i used 61 instead of xx below.
# in devices block modify:
"12d1:1f01": {
"*": {
"t_vendor": 4817,
"t_product": [ 5339, 5340 ],
"mode": "HuaweiAlt",
"msg": [ xx ]
}
}
# where xx is the message number from above. (I used 61 for my file.)
Notes:
We should include this in the upload. Maybe we don't need to - it's already been removed in later MT3000 firmware.
Mod /etc/gcom/ncm.json with this mod: detail here
remove the ATQ0 command from the Huawei initialisation block at the top of /etc/gcom/ncm.json
Now the modem device will be found by glinet nut it needs manually configuring. Do this in glinet gui 1st (to allow it to config the wan properly) then double check in luci>network>interfaces
Manually configure the following:
Apply this. Doing it this way means glinet sets up red fw zone and dhcp etc correctly.
But some interface options aren't right so:
Delete options and add these instead:
config interface 'modem_1_1'
option apn 'giffgaff.com'
option dialnumber '*99#'
option proto 'ncm'
option username 'gg'
option password 'p'
option metric '40'
option disabled '0'
option device '/dev/ttyUSB2'
option mode 'preferlte'
option pdptype 'IP' # Tells the modem what protocol over the PDP layer. (auto, IPV4V6, etc)
option ipv6 'auto'
option delay '5' # I think so that the race fix in /lib/netifd/netifd-proto.sh is not needed? See below.
option iccid '<your sim iccid goes here. find it with AT^ICCID? on a huawei>' # this is for gl_modem to know it's configured the interface already.
option iccid '8944110066625345615'
option ip_type "IP" # this is for kmwan to check the link (also IPV4V6)
There's a whole thing about kmwan thinking the interface is down and trying to bring it up. Make sure /etc/config/kmwan has a corresponding entry for the SAME interface as in /etc/config/network. They can't be different.
That did it. Now we're up and recognised in glinet gui. The gui will say incompatible modem but it still works.
This option:
# depreciated
option ifname 'wwan0'
# Use this instead - already in the config which is why option ifname is not needed.
option device 'wwan0'
Allows you to specify the โdeviceโ the modem sits in.
Some say you need this on ISPs that use IPv6 if you don't want it:
option ipv6 '0'
Make sure the modem_1_1 interface is in the red zone. modem_1_1 > wwan0 (ncm-modem_1_1) > /dev/usbxxx. See the AI overview of how this all plugs together.
Once more, using glinet gui to initially configure the modem means this gets done for you.
Shows you what vendor/device id the usb devices are:
# Copy into lp.sh #!/bin/sh cat /sys/kernel/debug/usb/devices
logread
The modem is going to use NCM protocol.
To check the modem protocol & other exciting things use:
ifstatus modem_1_1
USB Modem (Huawei E3372h Hilink)
โ
โโ Kernel driver: cdc_ncm
โ โโ Creates netdev โ wwan0 when the modem is brought up.
โ
โโ /etc/config/network (your config)
โ โโ config interface 'modem_1_1'
โ option device '/dev/ttyUSBx'
โ option proto 'NCM'
โ
โโ netifd (OpenWrt network daemon)
โ โโ Logical interface 'modem_1_1' (userโdefined)
โ โ โ bound to kernel device wwan0
โ โ โ Points to ncm-modem_1_1 when wwan0 is not present.
โ โโ Internal alias 'wwan0'
โ โ autoโgenerated from USB bus/device (bus 1, device 1) when the modem is brought up,
โ
โโ netifd dynamic session
โโ 'modem_1_1_4'
โ ephemeral virtual interface used by DHCP client
โ comes and goes, not userโmanageable
After further investigations, I found the reason for the ncm interface failing: At initialization, comgt-ncm sends some AT-commands to the modem, one of it ist โATQ0โ, which is not accepted by the modem. After removing this AT-command from the huawei block of /etc/gcom/ncm.json, the interface starts and is working! (The delay option set to some seconds is necessary for start after booting the device)
See: https://github.com/openwrt/openwrt/issues/18807
There's a race condition where netifd hammers the modem_1_1 device with commands while it's still busy on the previous one.
To fix this DON'T hack /lib/netifd/netifd-proto.sh as is listed below. Instead put an option in config interface modem_1_1:
config interface 'modem_1_1'
option delay '5'
Or alternatively using uci:
uci set network.modem_1_1.delay='10' uci commit network /etc/init.d/network restart
This does the same thing but via an intended method.
Basically hacking proto-ncm.sh with a delay means you wait for the command to be killed by modem_network.
Thu Dec 18 10:39:07 2025 user.notice AndyFix: Start delay for modem_1_1_4... Thu Dec 18 10:39:07 2025 daemon.notice netifd: modem_1_1 (14083): Command failed: Permission denied Thu Dec 18 10:39:07 2025 daemon.notice netifd: Interface 'modem_1_1' is now down
Don't Edit:
nano /lib/netifd/netifd-proto.sh
and don't change _proto_notify below: (use the correct interface names tho)
_proto_notify() {
local interface="$1"
local options="$2"
logger -p notice -t AndyFix "Start delay for $interface ..."
[ "$interface" = "wan" ] && sleep 4 # Workaround for netifd bug
[ "$interface" = "wwan" ] && sleep 4 # Workaround for netifd bug
[[ "$interface" == modem_1_1* ]] && sleep 4 # Workaround for netifd bug
json_add_string "interface" "$interface"
ubus $options call network.interface notify_proto "$(json_dump)"
}
The glinet in their interface needs the cellular connection to be primary, not failover otherwise glinet will keep turning it off if there's a glitch.
Go to Network>Multi-WAN
Under Interface Status Tracking Method turn off status tracking.
Under Interface Priority bring the cellular to the top.
WARNING: Variable 'zowee' does not exist or is not an array/object Mon May 26 09:04:03 2025 kern.info kernel: [ 1164.775991] usb 1-1: new high-speed USB device number 9 using xhc i-mtk Mon May 26 09:04:03 2025 kern.info kernel: [ 1164.931620] usb-storage 1-1:1.0: USB Mass Storage device detected Mon May 26 09:04:03 2025 kern.info kernel: [ 1164.939596] scsi host0: usb-storage 1-1:1.0 Mon May 26 09:04:03 2025 kern.info kernel: [ 1164.968465] usb 1-1: USB disconnect, device number 9 Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.372299] usb 1-1: new high-speed USB device number 10 using xh ci-mtk Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.527543] option 1-1:1.0: GSM modem (1-port) converter detected Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.533913] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.541554] option 1-1:1.1: GSM modem (1-port) converter detected Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.547979] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1 Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.555099] option 1-1:1.2: GSM modem (1-port) converter detected Mon May 26 09:04:03 2025 kern.info kernel: [ 1165.561552] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2 Mon May 26 09:04:04 2025 kern.info kernel: [ 1165.593125] cdc_ncm 1-1:1.3: MAC-Address: 9e:af:f9:e4:c3:6d Mon May 26 09:04:04 2025 kern.info kernel: [ 1165.599317] cdc_ncm 1-1:1.3 wwan0: register 'cdc_ncm' at usb-1120 0000.xhci-1, Mobile Broadband Network Device, 9e:af:f9:e4:c3:6d Mon May 26 09:04:04 2025 daemon.notice netifd: Interface 'LTE' is setting up now Mon May 26 09:04:06 2025 daemon.notice netifd: LTE (29893): WARNING: Variable 'zowee' does not exist or is not an array/object Mon May 26 09:04:06 2025 daemon.notice netifd: LTE (29893): Unsupported modem Mon May 26 09:04:06 2025 daemon.notice netifd: LTE (30511): Stopping network LTE Mon May 26 09:04:08 2025 daemon.notice netifd: LTE (30511): WARNING: Variable 'zowee' does not exist or is not an array/object Mon May 26 09:04:08 2025 daemon.notice netifd: LTE (30511): Unsupported modem Mon May 26 09:04:08 2025 daemon.notice netifd: Interface 'LTE' is now down Mon May 26 09:04:08 2025 user.notice firewall: Reloading firewall due to ifdown of LTE ()
Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 12 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=12d1 ProdID=1506 Rev= 1.02 S: Manufacturer=HUAWEI Technology S: Product=HUAWEI Mobile C:* #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=02 Prot=12 Driver=option E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I: If#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=02 Prot=16 Driver=huawei_cdc_ncm E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=2ms I:* If#= 1 Alt= 1 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=16 Driver=huawei_cdc_ncm E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=2ms E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms I:* If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
root@GL-MT3000:~# logread -f
Tue May 27 14:36:39 2025 kern.info kernel: [ 650.916756] usb 1-1: USB disconnect, device number 7
Tue May 27 14:36:39 2025 kern.info kernel: [ 650.921850] cdc_ether 1-1:1.0 eth2: unregister 'cdc_ether' usb-11200000.xhci-1, CDC Ethernet Device
Tue May 27 14:36:39 2025 daemon.notice netifd: Network device 'eth2' link is down
Tue May 27 14:36:39 2025 daemon.notice netifd: Interface 'tethering' has link connectivity loss
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Interface eth2.IPv6 no longer relevant for mDNS.
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Leaving mDNS multicast group on interface eth2.IPv6 with address fe80::21e:10ff:fe1f:0.
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Interface eth2.IPv4 no longer relevant for mDNS.
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Leaving mDNS multicast group on interface eth2.IPv4 with address 192.168.8.119.
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Withdrawing address record for fe80::21e:10ff:fe1f:0 on eth2.
Tue May 27 14:36:39 2025 daemon.info avahi-daemon[5123]: Withdrawing address record for 192.168.8.119 on eth2.
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: SIOCGIFINDEX: No such device
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: received SIGTERM
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: unicasting a release of 192.168.8.119 to 192.168.8.1
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: sending release
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: can't bind to interface eth2: No such device
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: bindtodevice: No such device
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): udhcpc: entering released state
Tue May 27 14:36:39 2025 daemon.notice netifd: tethering (24024): Command failed: Permission denied
Tue May 27 14:36:39 2025 daemon.notice netifd: Interface 'tethering' is now down
Tue May 27 14:36:39 2025 daemon.notice netifd: Interface 'tethering' is disabled
Tue May 27 14:36:39 2025 daemon.warn dnsmasq[4797]: no servers found in /tmp/resolv.conf.d/resolv.conf.auto, will retry
Tue May 27 14:36:39 2025 user.notice kmwan: config json str={ "op": 3, "data": { "cells": [ "tethering" ] } }
Tue May 27 14:36:39 2025 kern.debug kernel: [ 651.168363] kmwan: Delete node:tethering
Tue May 27 14:36:39 2025 user.notice firewall: Reloading firewall due to ifdown of tethering ()
Tue May 27 14:36:59 2025 kern.info kernel: [ 670.475629] usb 1-1: new high-speed USB device number 8 using xhci-mtk
Tue May 27 14:36:59 2025 kern.info kernel: [ 670.629294] usb-storage 1-1:1.0: USB Mass Storage device detected
Tue May 27 14:36:59 2025 kern.info kernel: [ 670.635833] scsi host0: usb-storage 1-1:1.0
Tue May 27 14:36:59 2025 kern.info kernel: [ 670.732696] usb 1-1: USB disconnect, device number 8
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.419692] usb 1-1: new high-speed USB device number 9 using xhci-mtk
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.574661] option 1-1:1.0: GSM modem (1-port) converter detected
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.580996] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.588133] option 1-1:1.1: GSM modem (1-port) converter detected
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.594558] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.601788] option 1-1:1.2: GSM modem (1-port) converter detected
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.608295] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.636615] cdc_ncm 1-1:1.3: MAC-Address: 00:1e:10:1f:00:00
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.642284] cdc_ncm 1-1:1.3: setting rx_max = 16384
Tue May 27 14:37:00 2025 kern.info kernel: [ 671.648838] cdc_ncm 1-1:1.3 wwan0: register 'cdc_ncm' at usb-11200000.xhci-1, Mobile Broadband Network Device, 00:1e:10:1f:00:00
Tue May 27 14:37:00 2025 daemon.notice netifd: Interface 'LTE' is setting up now
Tue May 27 14:37:02 2025 daemon.notice netifd: LTE (28265): Failed to get modem information
Tue May 27 14:37:02 2025 daemon.notice netifd: LTE (28897): Stopping network LTE
Tue May 27 14:37:04 2025 daemon.notice netifd: LTE (28897): sending -> AT^NDISDUP=1,0
Tue May 27 14:37:05 2025 daemon.notice netifd: LTE (28897): Error running AT-command
Tue May 27 14:37:05 2025 daemon.notice netifd: LTE (28897): Failed to disconnect
Tue May 27 14:37:05 2025 daemon.notice netifd: Interface 'LTE' is now down
Tue May 27 14:37:05 2025 daemon.notice netifd: Interface 'LTE' is setting up now
Tue May 27 14:37:07 2025 daemon.notice netifd: LTE (28932): sending -> AT
Tue May 27 14:37:08 2025 daemon.notice netifd: LTE (28932): sending -> ATZ
Tue May 27 14:37:08 2025 daemon.notice netifd: LTE (28932): sending -> ATV1
Tue May 27 14:37:09 2025 daemon.notice netifd: LTE (28932): sending -> ATE1
Tue May 27 14:37:09 2025 daemon.notice netifd: LTE (28932): sending -> ATS0=0
Tue May 27 14:37:10 2025 daemon.notice netifd: LTE (28932): sending -> AT+CGDCONT=1,"IP","giffgaff.com"
Tue May 27 14:37:11 2025 daemon.notice netifd: LTE (28932): Configuring modem
Tue May 27 14:37:11 2025 daemon.notice netifd: LTE (28932): Setting mode
Tue May 27 14:37:11 2025 daemon.notice netifd: LTE (28932): sending -> AT^SYSCFGEX="030201",3fffffff,2,4,7fffffffffffffff,,
Tue May 27 14:37:12 2025 cron.err crond[4605]: time disparity of 1751 minutes detected
Tue May 27 14:37:12 2025 daemon.notice netifd: LTE (28932): Starting network LTE
Tue May 27 14:37:12 2025 daemon.notice netifd: LTE (28932): Connecting modem
Tue May 27 14:37:13 2025 daemon.notice netifd: LTE (28932): sending -> AT^NDISDUP=1,1,"giffgaff.com","gg","p"
Tue May 27 14:37:14 2025 daemon.notice netifd: LTE (28932): Setting up wwan0
Tue May 27 14:37:14 2025 daemon.notice netifd: Interface 'LTE' is now up
Tue May 27 14:37:14 2025 kern.info kernel: [ 685.472413] cdc_ncm 1-1:1.3 wwan0: 150 mbit/s downlink 50 mbit/s uplink
Tue May 27 14:37:14 2025 daemon.notice netifd: Interface 'LTE_4' is enabled
Tue May 27 14:37:14 2025 daemon.notice netifd: Network device 'wwan0' link is up
Tue May 27 14:37:14 2025 daemon.notice netifd: Network alias 'wwan0' link is up
Tue May 27 14:37:14 2025 daemon.notice netifd: Interface 'LTE_4' has link connectivity
Tue May 27 14:37:14 2025 daemon.notice netifd: Interface 'LTE_4' is setting up now
Tue May 27 14:37:14 2025 kern.info kernel: [ 685.524466] IPv6: ADDRCONF(NETDEV_CHANGE): wwan0: link becomes ready
Tue May 27 14:37:14 2025 daemon.notice netifd: LTE_4 (29255): udhcpc: started, v1.33.2
Tue May 27 14:37:14 2025 user.notice firewall: Reloading firewall due to ifup of LTE (wwan0)
Tue May 27 14:37:14 2025 daemon.notice netifd: LTE_4 (29255): udhcpc: sending discover
Tue May 27 14:37:14 2025 daemon.notice netifd: LTE_4 (29255): udhcpc: sending select for 10.144.5.85
Tue May 27 14:37:14 2025 daemon.notice netifd: LTE_4 (29255): udhcpc: lease of 10.144.5.85 obtained, lease time 518400
Tue May 27 14:37:14 2025 daemon.info avahi-daemon[5123]: Joining mDNS multicast group on interface wwan0.IPv4 with address 10.144.5.85.
Tue May 27 14:37:14 2025 daemon.info avahi-daemon[5123]: New relevant interface wwan0.IPv4 for mDNS.
Tue May 27 14:37:14 2025 daemon.info avahi-daemon[5123]: Registering new address record for 10.144.5.85 on wwan0.IPv4.
Tue May 27 14:37:14 2025 daemon.notice netifd: Interface 'LTE_4' is now up
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: reading /tmp/resolv.conf.d/resolv.conf.auto
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain test
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain onion
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain localhost
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain local
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain invalid
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain bind
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using only locally-known addresses for domain lan
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using nameserver 82.132.254.2#53
Tue May 27 14:37:14 2025 daemon.info dnsmasq[4797]: using nameserver 82.132.254.3#53
Tue May 27 14:37:14 2025 user.notice firewall: Reloading firewall due to ifup of LTE_4 (wwan0)
Tue May 27 14:37:15 2025 daemon.info avahi-daemon[5123]: Joining mDNS multicast group on interface wwan0.IPv6 with address fe80::21e:10ff:fe1f:0.