Thales IoT Developer Community
5G show case: Build up a powerful 5G router with multiple MV3x modules
Showcase, August 25, 2022 - 9:35pm, 2243 views
For building up a powerful 5G router, many customers choose to have multiple 5G modules connected to their host SoC, with multiple MNO coverages and multiple IP connections
Below is an example of 5G show case which we did in our lab, showing a HW setup with 3 pieces of MV3x modules (one MV31-W, one MV32-W-A and one MV32-W-B) on a single LINUX host. Each of the MV3x modules has a different SIM card from a different MNO, so that the LINUX host could have 3 different network coverages and 3 different mobile data connections
=====================================
root@tester-OptiPlex-5080:~# lsusb
Bus 002 Device 004: ID 1e2d:00b8 Gemalto M2M GmbH Cinterion PID 0x00B8 USB Mobile Broadband
Bus 002 Device 003: ID 1e2d:00f1 Gemalto M2M GmbH Cinterion PID 0x00F1 USB Mobile Broadband
Bus 002 Device 002: ID 1e2d:00f2 Gemalto M2M GmbH Cinterion PID 0x00F2 USB Mobile Broadband
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 413c:2107 Dell Computer Corp. KB212-B Quiet Key Keyboard
Bus 001 Device 003: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --ms-query-firmware-id
[/dev/cdc-wdm0] Firmware ID retrieved: '31453244-3030-4631-3035-303446583030'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm1 -p --ms-query-firmware-id
[/dev/cdc-wdm1] Firmware ID retrieved: '31453244-3030-4631-3035-303446583030'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm2 -p --ms-query-firmware-id
[/dev/cdc-wdm2] Firmware ID retrieved: '31453244-3030-4238-3034-3134464f5843'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --query-device-caps
[/dev/cdc-wdm0] Device capabilities retrieved:
Device type: 'embedded'
Cellular class: 'gsm'
Voice class: 'no-voice'
SIM class: 'removable'
Data class: 'umts, hsdpa, hsupa, lte, custom'
SMS caps: 'pdu-receive, pdu-send'
Ctrl caps: 'hw-radio-switch'
*** sessions: '15'
Custom data class: '5G'
Device ID: '355532870001404'
Firmware info: 'FDE.F0.0.0.1.3.GC.001.006'
Hardware info: 'Cinterion Snapdragon X62'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm1 -p --query-device-caps
[/dev/cdc-wdm1] Device capabilities retrieved:
Device type: 'embedded'
Cellular class: 'gsm'
Voice class: 'no-voice'
SIM class: 'removable'
Data class: 'umts, hsdpa, hsupa, lte, custom'
SMS caps: 'pdu-receive, pdu-send'
Ctrl caps: 'hw-radio-switch'
*** sessions: '15'
Custom data class: '5G'
Device ID: '352264110060346'
Firmware info: 'FDE.F0.0.0.1.1.DT.001.004'
Hardware info: 'Cinterion Snapdragon X65'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm2 -p --query-device-caps
[/dev/cdc-wdm2] Device capabilities retrieved:
Device type: 'embedded'
Cellular class: 'gsm'
Voice class: 'no-voice'
SIM class: 'removable'
Data class: 'umts, hsdpa, hsupa, lte, custom'
SMS caps: 'pdu-receive, pdu-send'
Ctrl caps: 'reg-manual'
*** sessions: '15'
Custom data class: '5G'
Device ID: '355979860367446'
Firmware info: 'T99W175.F0.6.0.0.6.VF.009.024'
Hardware info: 'Thales Snapdragon X55'
root@tester-OptiPlex-5080:~#
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --query-radio-state
[/dev/cdc-wdm0] Radio state retrieved:
Hardware radio state: 'on'
Software radio state: 'on'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --ms-query-lte-attach-info
[/dev/cdc-wdm0] Successfully queried LTE attach info
Attach state: attached
IP type: ipv4
Access string: iot.1nce.net
Username: n/a
Password: n/a
Compression: none
Auth protocol: none
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm1 -p --ms-query-lte-attach-info
[/dev/cdc-wdm1] Successfully queried LTE attach info
Attach state: attached
IP type: ipv4v6
Access string: ims
Username: n/a
Password: n/a
Compression: none
Auth protocol: none
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm2 -p --ms-query-lte-attach-info
[/dev/cdc-wdm2] Successfully queried LTE attach info
Attach state: attached
IP type: default
Access string: web.vodafone.de
Username: n/a
Password: n/a
Compression: none
Auth protocol: none
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --query-packet-service-state
[/dev/cdc-wdm0] Packet service status:
Network error: 'unknown'
Packet service state: 'attached'
Available data classes: 'lte'
Uplink speed: '1250000000 bps'
Downlink speed: '3781000000 bps'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm1 -p --query-packet-service-state
[/dev/cdc-wdm1] Packet service status:
Network error: 'unknown'
Packet service state: 'attached'
Available data classes: 'lte'
Uplink speed: '3023000000 bps'
Downlink speed: '4239000000 bps'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm2 -p --query-packet-service-state
[/dev/cdc-wdm2] Packet service status:
Network error: 'unknown'
Packet service state: 'attached'
Available data classes: 'lte'
Uplink speed: '1200000000 bps'
Downlink speed: '3200000000 bps'
root@tester-OptiPlex-5080:~#
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm0 -p --query-visible-providers
[/dev/cdc-wdm0] Visible providers (3):
Provider [0]:
Provider ID: '26201'
Provider name: 'Telekom.de'
State: 'preferred, visible, registered'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [1]:
Provider ID: '26203'
Provider name: 'o2 - de'
State: 'visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [2]:
Provider ID: '26202'
Provider name: 'vodafone.de'
State: 'visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm1 -p --query-visible-providers
[/dev/cdc-wdm1] Visible providers (3):
Provider [0]:
Provider ID: '26201'
Provider name: 'Telekom.de'
State: 'home, preferred, visible, registered'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [1]:
Provider ID: '26203'
Provider name: 'o2 - de'
State: 'visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [2]:
Provider ID: '26202'
Provider name: 'vodafone.de'
State: 'forbidden, visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
root@tester-OptiPlex-5080:~# mbimcli -d /dev/cdc-wdm2 -p --query-visible-providers
[/dev/cdc-wdm2] Visible providers (3):
Provider [0]:
Provider ID: '26202'
Provider name: 'vodafone.de'
State: 'home, preferred, visible, registered'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [1]:
Provider ID: '26203'
Provider name: 'o2 - de'
State: 'forbidden, visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
Provider [2]:
Provider ID: '26201'
Provider name: 'Telekom.de'
State: 'forbidden, visible'
Cellular class: 'gsm'
RSSI: '99'
Error rate: '99'
root@tester-OptiPlex-5080:~# mbim-network /dev/cdc-wdm0 start
Loading profile at /etc/mbim-network.conf...
APN: unset
APN auth protocol: unset
APN user: unset
APN password: unset
mbim-proxy: yes
Querying subscriber ready status 'mbimcli -d /dev/cdc-wdm0 --query-subscriber-ready-status --device-open-proxy'...
[/dev/cdc-wdm0] Subscriber ready status retrieved: Ready state: 'initialized' Subscriber ID: '901405101098088' SIM ICCID: '89882806660010980888' Ready info: 'none' Telephone numbers: (0) 'unknown'
Querying registration state 'mbimcli -d /dev/cdc-wdm0 --query-registration-state --device-open-proxy'...
[/dev/cdc-wdm0] Registration status: Network error: 'unknown' Register state: 'roaming' Register mode: 'automatic' Available data classes: 'lte' Current cellular class: 'gsm' Provider ID: '26201' Provider name: 'Telekom.de' Roaming text: 'unknown' Registration flags: 'packet-service-automatic-attach'
Attaching to packet service with 'mbimcli -d /dev/cdc-wdm0 --attach-packet-service --device-open-proxy'...
[/dev/cdc-wdm0] Successfully attached to packet service [/dev/cdc-wdm0] Packet service status: Network error: 'unknown' Packet service state: 'attached' Available data classes: 'lte' Uplink speed: '1250000000 bps' Downlink speed: '3781000000 bps'
Starting network with 'mbimcli -d /dev/cdc-wdm0 --connect=apn='' --device-open-proxy'...
Network started successfully
root@tester-OptiPlex-5080:~#
root@tester-OptiPlex-5080:~# mbim-network /dev/cdc-wdm1 start
Loading profile at /etc/mbim-network.conf...
APN: unset
APN auth protocol: unset
APN user: unset
APN password: unset
mbim-proxy: yes
Querying subscriber ready status 'mbimcli -d /dev/cdc-wdm1 --query-subscriber-ready-status --device-open-proxy'...
[/dev/cdc-wdm1] Subscriber ready status retrieved: Ready state: 'initialized' Subscriber ID: '262011409193877' SIM ICCID: '89490200001487545165' Ready info: 'none' Telephone numbers: (1) '+491755860176'
Querying registration state 'mbimcli -d /dev/cdc-wdm1 --query-registration-state --device-open-proxy'...
[/dev/cdc-wdm1] Registration status: Network error: 'unknown' Register state: 'home' Register mode: 'automatic' Available data classes: 'lte' Current cellular class: 'gsm' Provider ID: '26201' Provider name: 'Telekom.de' Roaming text: 'unknown' Registration flags: 'packet-service-automatic-attach'
Attaching to packet service with 'mbimcli -d /dev/cdc-wdm1 --attach-packet-service --device-open-proxy'...
[/dev/cdc-wdm1] Successfully attached to packet service [/dev/cdc-wdm1] Packet service status: Network error: 'unknown' Packet service state: 'attached' Available data classes: 'lte' Uplink speed: '3023000000 bps' Downlink speed: '4239000000 bps'
Starting network with 'mbimcli -d /dev/cdc-wdm1 --connect=apn='' --device-open-proxy'...
Network started successfully
root@tester-OptiPlex-5080:~# mbim-network /dev/cdc-wdm2 start
Loading profile at /etc/mbim-network.conf...
APN: unset
APN auth protocol: unset
APN user: unset
APN password: unset
mbim-proxy: yes
Querying subscriber ready status 'mbimcli -d /dev/cdc-wdm2 --query-subscriber-ready-status --device-open-proxy'...
[/dev/cdc-wdm2] Subscriber ready status retrieved: Ready state: 'initialized' Subscriber ID: '262029924625988' SIM ICCID: '89492099176012918275' Ready info: 'none' Telephone numbers: (1) '+491733917200'
Querying registration state 'mbimcli -d /dev/cdc-wdm2 --query-registration-state --device-open-proxy'...
[/dev/cdc-wdm2] Registration status: Network error: 'unknown' Register state: 'home' Register mode: 'automatic' Available data classes: 'lte' Current cellular class: 'gsm' Provider ID: '26202' Provider name: 'vodafone.de' Roaming text: 'unknown' Registration flags: 'packet-service-automatic-attach'
Attaching to packet service with 'mbimcli -d /dev/cdc-wdm2 --attach-packet-service --device-open-proxy'...
[/dev/cdc-wdm2] Successfully attached to packet service [/dev/cdc-wdm2] Packet service status: Network error: 'unknown' Packet service state: 'attached' Available data classes: 'lte' Uplink speed: '1200000000 bps' Downlink speed: '3200000000 bps'
Starting network with 'mbimcli -d /dev/cdc-wdm2 --connect=apn='' --device-open-proxy'...
Network started successfully
root@tester-OptiPlex-5080:~# ifconfig -a
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.178.96 netmask 255.255.255.0 broadcast 192.168.178.255
inet6 fe80::ea39:bcfc:d18:5508 prefixlen 64 scopeid 0x20<link>
inet6 2001:9e8:340:1500:fa1f:1ddf:3f52:67a7 prefixlen 64 scopeid 0x0<global>
inet6 2001:9e8:340:1500:36b5:7b0:4759:325e prefixlen 64 scopeid 0x0<global>
ether 70:b5:e8:53:49:58 txqueuelen 1000 (Ethernet)
RX packets 29918 bytes 41572987 (41.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17210 bytes 1605410 (1.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xd1200000-d1220000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 706 bytes 79401 (79.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 706 bytes 79401 (79.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wwan0: flags=4226<BROADCAST,NOARP,MULTICAST> mtu 1500
ether e2:80:70:8d:78:18 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
wwan1: flags=4226<BROADCAST,NOARP,MULTICAST> mtu 1500
ether e2:80:70:8d:78:18 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
wwan2: flags=4226<BROADCAST,NOARP,MULTICAST> mtu 1500
ether e2:80:70:8d:78:18 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
root@tester-OptiPlex-5080:~#
root@tester-OptiPlex-5080:/home/tester# ./mbim-set-ip /dev/cdc-wdm0 wwan0
Requesting IPv4 and IPv6 information through mbimcli proxy:
[/dev/cdc-wdm0] IPv4 configuration available: 'address, gateway, dns, mtu'
IP [0]: '100.104.216.225/30'
Gateway: '100.104.216.226'
DNS [0]: '8.8.8.8'
DNS [1]: '8.8.4.4'
MTU: '1500'
[/dev/cdc-wdm0] IPv6 configuration available: 'none'
Applying the following network interface configurations:
ip link set wwan0 down
ip addr flush dev wwan0
ip -6 addr flush dev wwan0
ip link set wwan0 up
ip addr add 100.104.216.225/30 dev wwan0 broadcast +
ip route add default via 100.104.216.226 dev wwan0
ip link set mtu 1500 dev wwan0
systemd-resolve -4 --interface=wwan0 --set-dns=8.8.8.8
systemd-resolve -4 --interface=wwan0 --set-dns=8.8.4.4
Network interface configurations completed.
root@tester-OptiPlex-5080:/home/tester# ping -I wwan0 -4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 100.104.216.225 wwan0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=51.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=23.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=51 time=24.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=51 time=22.5 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=51 time=23.8 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4008ms
rtt min/avg/***/mdev = 22.497/29.245/51.472/11.134 ms
root@tester-OptiPlex-5080:/home/tester# ./mbim-set-ip /dev/cdc-wdm2 wwan2
Requesting IPv4 and IPv6 information through mbimcli proxy:
[/dev/cdc-wdm2] IPv4 configuration available: 'address, gateway, dns, mtu'
IP [0]: '100.104.91.168/28'
Gateway: '100.104.91.169'
DNS [0]: '139.7.30.125'
DNS [1]: '139.7.30.126'
MTU: '1500'
[/dev/cdc-wdm2] IPv6 configuration available: 'address, gateway, dns, mtu'
IP [0]: '2a00:20:608c:4337:c94c:40d7:e0cb:95a8/64'
Gateway: '2a00:20:608c:4337:787e:563c:97e1:5aae'
DNS [0]: '2a01:860:0:300::153'
DNS [1]: '2a01:860:0:300::53'
MTU: '1500'
Applying the following network interface configurations:
ip link set wwan2 down
ip addr flush dev wwan2
ip -6 addr flush dev wwan2
ip link set wwan2 up
ip addr add 100.104.91.168/28 dev wwan2 broadcast +
ip route add default via 100.104.91.169 dev wwan2
ip link set mtu 1500 dev wwan2
systemd-resolve -4 --interface=wwan2 --set-dns=139.7.30.125
systemd-resolve -4 --interface=wwan2 --set-dns=139.7.30.126
ip -6 addr add 2a00:20:608c:4337:98f3:f401:134c:1b2d/64 dev wwan2
ip -6 route add default via 2a00:20:608c:4337:787e:563c:97e1:5aae dev wwan2
ip -6 link set mtu 1500 dev wwan2
systemd-resolve -6 --interface=wwan2 --set-dns=2a01:860:0:300::153
systemd-resolve -6 --interface=wwan2 --set-dns=2a01:860:0:300::53
Network interface configurations completed.
root@tester-OptiPlex-5080:/home/tester# ping -I wwan2 -4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 100.104.91.168 wwan2: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=112 time=66.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=112 time=23.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=112 time=27.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=112 time=26.2 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/***/mdev = 23.902/36.126/66.794/17.754 ms
root@tester-OptiPlex-5080:/home/tester# ./mbim-set-ip /dev/cdc-wdm1 wwan1
Requesting IPv4 and IPv6 information through mbimcli proxy:
[/dev/cdc-wdm1] IPv4 configuration available: 'address, gateway, dns, mtu'
IP [0]: '10.32.119.231/28'
Gateway: '10.32.119.232'
DNS [0]: '10.74.210.210'
DNS [1]: '10.74.210.211'
MTU: '1500'
[/dev/cdc-wdm1] IPv6 configuration available: 'address, gateway, dns, mtu'
IP [0]: '2a01:59f:b10c:1a4d:8430:acc3:aeaa:e227/64'
Gateway: '2a01:59f:b10c:1a4d:14d1:c288:738a:874f'
DNS [0]: '2a01:598:7ff:0:10:74:210:210'
DNS [1]: '2a01:598:7ff:0:10:74:210:211'
MTU: '1500'
Applying the following network interface configurations:
ip link set wwan1 down
ip addr flush dev wwan1
ip -6 addr flush dev wwan1
ip link set wwan1 up
ip addr add 10.32.119.231/28 dev wwan1 broadcast +
ip route add default via 10.32.119.232 dev wwan1
ip link set mtu 1500 dev wwan1
systemd-resolve -4 --interface=wwan1 --set-dns=10.74.210.210
systemd-resolve -4 --interface=wwan1 --set-dns=10.74.210.211
ip -6 addr add 2a01:59f:b10c:1a4d:6405:46ba:c115:79a5/64 dev wwan1
ip -6 route add default via 2a01:59f:b10c:1a4d:14d1:c288:738a:874f dev wwan1
ip -6 link set mtu 1500 dev wwan1
systemd-resolve -6 --interface=wwan1 --set-dns=2a01:598:7ff:0:10:74:210:210
systemd-resolve -6 --interface=wwan1 --set-dns=2a01:598:7ff:0:10:74:210:211
Network interface configurations completed.
root@tester-OptiPlex-5080:/home/tester#
====================================================
see screenshot for 3 mobile network connections on LINUX host
https://ubuntu.com/core/docs/networkmanager/configure-cellular-connections
https://www.kernel.org/doc/html/v5.8/networking/cdc_mbim.html
https://code.launchpad.net/ubuntu/+source/libmbim stumble guys online
https://www.freedesktop.org/software/libmbim/libmbim-glib/latest/