Brought up Telit LE910C4 in ECM Mode as wwan0. Turned off system, now wwan0 has disappeared

Yesterday I got a new Base HAT up with a Telit modem. Biggest issue was that I had to use dhclient -v wwan0 to get wwan0 added and visible. Connect.sixfab.com show the unit was up and operable. End of day came so I shut things down. Today I came in, turned things on and wwan0 is nowhere to be found. minicom sees the modem just fine but ip addr doesn’t show it, nor does ifconfig. dhclient -v wwan0 returns wwan0 not found. Multiple reboots get same results. Any suggestion on how to resolve this are welcome!

Hello,

Could you please share the details according the template here?

Here’s info based on the template.

Problem Description:
Yesterday I got a new Base HAT up with a Telit modem. Biggest issue was that I had to use dhclient -v wwan0 to get wwan0 added and visible. Connect.sixfab.com show the unit was up and operable. End of day came so I shut things down. Today I came in, turned things on and wwan0 is nowhere to be found. minicom sees the modem just fine but ip addr doesn’t show it, nor does ifconfig. dhclient -v wwan0 returns wwan0 not found. Multiple reboots get same results. Any suggestion on how to resolve this are welcome!

Use Case Scenario:
I’m developing a system which includes an underwater power generator, charge controller/inverter, and cloud based server for data and as a portal for smartphone control. I’m using Eth0 to connect to the underwater unit, wlan0 to connect to the controller/inverter, and wwan0 to connect to the cloud, all on an RPI 3B+.

Environment:

RPI 3B+ with RPI OS, HAT is SixFab 3G/4G/LTE using Telit LE910C4-NF with Sixfab supplied antennae and sim. SIM ID is 8988307000002659XXXX.

Connection Type: ECM

Script:
Here’s a template of the software approach:
import socket
import ctypes
import struct

Constant for SO_BINDTODEVICE

SO_BINDTODEVICE = 25 # On Linux

def connect_via_interface(interface: str, target_ip: str, port: int):
“”“Connect to a target IP using a specific network interface”“”
print(f"Connecting to {target_ip}:{port} via {interface}")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the specific interface (requires root)
s.setsockopt(socket.SOL_SOCKET, SO_BINDTODEVICE, interface.encode() + b'\0')

try:
    s.connect((target_ip, port))
    print(f"Connected to {target_ip} via {interface}")
    # You can send/recv here
    s.send(b"GET / HTTP/1.0\r\nHost: " + target_ip.encode() + b"\r\n\r\n")
    print(s.recv(1024))
except Exception as e:
    print(f"Connection failed: {e}")
finally:
    s.close()

Route specific targets via specific interfaces

connect_via_interface(“wlan0”, “10.0.0.5”, 80) # Local device on wlan0
connect_via_interface(“wwan0”, “1.1.1.1”, 80) # Public IP via cellular
connect_via_interface(“eth0”, “192.168.50.6”, 80) # Local device on ethernet

Linux Command Outputs:

pi@raspberrypi:~ $ cat /etc/os-release
PRETTY_NAME=“Debian GNU/Linux 12 (bookworm)”
NAME=“Debian GNU/Linux”
VERSION_ID=“12”
VERSION=“12 (bookworm)”
VERSION_CODENAME=bookworm
ID=debian
HOME_URL=“https://www.debian.org/
SUPPORT_URL=“Debian -- User Support
BUG_REPORT_URL=“https://bugs.debian.org/

Linux raspberrypi 6.12.25+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.25-1+rpt1 (2025-04-30) aarch64 GNU/Linux

pi@raspberrypi:~ $ lsusb
Bus 001 Device 006: ID 3554:fc03 CX 2.4G Receiver
Bus 001 Device 004: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 001 Device 005: ID 1bc7:1206 Telit Wireless Solutions LE910C4-NF
Bus 001 Device 007: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

pi@raspberrypi:~ $ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 2: Dev 5, If 4, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 5, If 2, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 5, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 5, If 7, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 5, If 5, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 5, If 3, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 5, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 5, If 6, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M
|__ Port 2: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 3: Dev 6, If 1, Class=Human Interface Device, Driver=usbhid, 12M

pi@raspberrypi:~ $ usb-devices

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev=06.12
S: Manufacturer=Linux 6.12.25+rpt-rpi-v8 dwc_otg_hcd
S: Product=DWC OTG Controller
S: SerialNumber=3f980000.usb
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=2514 Rev=0b.b3
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms

T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 3
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=2514 Rev=0b.b3
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms

T: Bus=01 Lev=03 Prnt=03 Port=00 Cnt=01 Dev#= 7 Spd=480 MxCh= 0
D: Ver= 2.10 Cls=ff(vend.) Sub=00 Prot=ff MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=7800 Rev=03.00
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=lan78xx
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl=1ms

T: Bus=01 Lev=03 Prnt=07 Port=01 Cnt=01 Dev#= 5 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1bc7 ProdID=1206 Rev=03.18
S: Manufacturer=Android
S: Product=LE910C4-NF
S: SerialNumber=0123456789ABCDEF
C: #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 2 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
E: Ad=84(I) Atr=03(Int.) MxPS= 16 Ivl=32ms
I: If#= 3 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=88(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=8a(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 7 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=8c(I) Atr=03(Int.) MxPS= 10 Ivl=32ms

T: Bus=01 Lev=02 Prnt=05 Port=01 Cnt=01 Dev#= 4 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=090c ProdID=1000 Rev=11.00
S: Manufacturer=USB
S: Product=USB Flash Disk
S: SerialNumber=FBL1606140200292
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=31875us
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

T: Bus=01 Lev=02 Prnt=04 Port=02 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=3554 ProdID=fc03 Rev=07.90
S: Manufacturer=CX
S: Product=2.4G Receiver
C: #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=2ms
I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=2ms

pi@raspberrypi:~ $ dmesg |grep tty
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 console=ttyS0,115200 console=tty1 root=PARTUUID=0d003022-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=US
[ 0.000415] printk: legacy console [tty1] enabled
[ 3.074689] 3f201000.serial: ttyAMA1 at MMIO 0x3f201000 (irq = 99, base_baud = 0) is a PL011 rev2
[ 3.074853] serial serial0: tty port ttyAMA1 registered
[ 6.039860] systemd[1]: Created slice system-getty.slice - Slice /system/getty.
[ 8.659978] usb 1-1.1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 8.665774] usb 1-1.1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 8.667058] usb 1-1.1.2: GSM modem (1-port) converter now attached to ttyUSB2
[ 8.668018] usb 1-1.1.2: GSM modem (1-port) converter now attached to ttyUSB3
[ 8.669470] usb 1-1.1.2: GSM modem (1-port) converter now attached to ttyUSB4

pi@raspberrypi:~ $ ls -l /sys/bus/usb-serial/devices
total 0
lrwxrwxrwx 1 root root 0 May 22 17:08 ttyUSB0 → …/…/…/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/ttyUSB0
lrwxrwxrwx 1 root root 0 May 22 17:08 ttyUSB1 → …/…/…/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.4/ttyUSB1
lrwxrwxrwx 1 root root 0 May 22 17:08 ttyUSB2 → …/…/…/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.5/ttyUSB2
lrwxrwxrwx 1 root root 0 May 22 17:08 ttyUSB3 → …/…/…/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.6/ttyUSB3
lrwxrwxrwx 1 root root 0 May 22 17:08 ttyUSB4 → …/…/…/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.7/ttyUSB4

pi@raspberrypi:~ $ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 May 22 15:13 usb-Android_LE910C4-NF_0123456789ABCDEF-if00-port0 → …/…/ttyUSB0
lrwxrwxrwx 1 root root 13 May 22 15:13 usb-Android_LE910C4-NF_0123456789ABCDEF-if04-port0 → …/…/ttyUSB1
lrwxrwxrwx 1 root root 13 May 22 15:13 usb-Android_LE910C4-NF_0123456789ABCDEF-if05-port0 → …/…/ttyUSB2
lrwxrwxrwx 1 root root 13 May 22 15:13 usb-Android_LE910C4-NF_0123456789ABCDEF-if06-port0 → …/…/ttyUSB3
lrwxrwxrwx 1 root root 13 May 22 15:13 usb-Android_LE910C4-NF_0123456789ABCDEF-if07-port0 → …/…/ttyUSB4

AT Responses:
Telit Modules
AT OK
ATI 332, OK
AT+CGMR M0F.660012, OK
AT+CPIN? +CPIN: READY
AT+CPAS +CPAS: 0, OK
AT+CFUN? +CFUN: 1, OK
AT+COPS? +COPS: 0,0,”T-Mobile”,7, OK
AT#USBCFG? #USBCFG: 4, OK
AT#BND? #BND: ,10,80800000000381A, OK
AT+CREG? +CREG: 0,5, OK
AT+CGDCONT?
-CGDCONT: 1,”IPV4V6”,”super”,””,0,0,0,0
-CGDCONT: 2,”IPV4V6”,”ims”,””,0,0,0,0
-CGDCONT: 3,”IPV4V6”,”sos”,””,0,0,0,0
-CGDCONT: 4,”IPV4V6”,”attm2mglobal”,””,0,0,0,0
OK
AT+CSQ -CSQ: 20,4 , OK
AT+CGATT? -CGATT: 1 , OK
AT+GMMnLE910-NF
AT#SWPKGV
25.21.662-P0F.662900
M0F.660012
P0F.662900
A0F.66012
OK
AT#FWSWITCH? FWSWITCH: 0,0,0 ,OK
AT+CGREG? -CGREG: 0,5 ,OK
AT#CGPADDR=
#CGPADDR: 1,”100.74.196.78”
#CGPADDR: 2,””
#CGPADDR: 3,””
#CGPADDR: 4,””
OK

Any suggestions as to how to get wwan0 back up are most appreciated!!

Response from sixfab, followed by my reply.

Dear Chuck,

Thank you for the detailed report.

Based on your setup, the ECM drivers appear to be loaded correctly. To further troubleshoot the missing wwan0 interface, please try the following steps:

  1. Run the following commands to manually bring up the interface:
sudo ip link set wwan0 up
sudo dhclient -v wwan0
  1. Please share the output of the following commands so we can verify interface status:
ip addr
ifconfig
  1. Lastly, ensure that ModemManager is stopped and disabled, as it may interfere with the interface:
sudo systemctl stop ModemManager
sudo systemctl disable ModemManager

Let us know the results after running these steps.

My response:

Here are the results. Consistent in that wwan0 stil is not visible.

pi@raspberrypi:~ $ sudo ip link set wwan0 up
Cannot find device “wwan0”

pi@raspberrypi:~ $ sudo dhclient -v wwan0
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit ISC DHCP - ISC

Cannot find device “wwan0”
Failed to get interface index: No such device

pi@raspberrypi:~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enxb827eb0b1aa7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:eb:0b:1a:a7 brd ff:ff:ff:ff:ff:ff
3: wwx92b3dd3f312b: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 92:b3:dd:3f:31:2b brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:5e:4f:f2 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.81/24 brd 10.0.0.255 scope global dynamic noprefixroute wlan0
valid_lft 42976sec preferred_lft 42976sec
inet6 fe80::75a7:837d:d969:aa6f/64 scope link noprefixroute
valid_lft forever preferred_lft forever

pi@raspberrypi:~ $ ifconfig
enxb827eb0b1aa7: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:0b:1a:a7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 19 bytes 2257 (2.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19 bytes 2257 (2.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.81 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::75a7:837d:d969:aa6f prefixlen 64 scopeid 0x20
ether b8:27:eb:5e:4f:f2 txqueuelen 1000 (Ethernet)
RX packets 512 bytes 34760 (33.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 554 bytes 46785 (45.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

pi@raspberrypi:~ $ sudo systemctl stop ModemManager
Failed to stop ModemManager.service: Unit ModemManager.service not loaded.

Note: I uninstalled ModemManager from the system early on

Chuck

Hello Chuck,

Thank you for the update.

Seems the OS hase renamed your interface from wwan0 to wwx92b3dd3f312b.
Can you dmesg log if it has changed it?
dmesg | grep wwan0 or If you can’t see anything, check the whole dmesg log.

That was it! I added net.ifnames=0 to /boot/firmware/cmdlines.txt and it now comes back as wwan0.

Thanks for the help!!

Chuck